英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4095|回复: 2
打印 上一主题 下一主题

PIC16f887 flash读写函数

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-21 14:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void write_flash(unsigned char H_addr,unsigned char L_addr,unsigned char W_dataH,unsigned char W_dataL)
{
//PIC16F887的flash的操作是以8个字为1个块的写操作,擦除是以16个字为一个1块的操作.
unsigned char i;
for(i=0;i<16;++i)
{
  if(i==(L_addr&0x07)) //指定的单元进行写操作.
  {
   EEADRH=H_addr;
   EEADR=L_addr;
   EEDATA=W_dataL;
   EEDATH=W_dataH;
   EEPGD=1;
  }
  else //非指定的单元进行读操作.(flash中将原有内容读取到EEDATH,EEDATA中,再进行写操作时才不会被破坏).
  {
   EEADRH=H_addr;
   EEADR=(L_addr&0xf0)+i;
   EEPGD=1;
   RD=1;
   NOP();
   NOP();
   while(RD);  //等待读取结束.
  }
  WREN=1;
  //GIE=0;
  EECON2=0x55;
  EECON2=0xAA;
  WR=1;
  NOP();
  NOP();
  while(WR);
  WREN=0;
  //GIE=1;
}
return(1);
}
unsigned int read_flash(unsigned int address)
{
EEADRH=address>>8; //地址高5位.
EEADR=address&0xff; //地址低8位.
EEPGD=1;   //目标存储器为program flash.
RD=1;    //启动读操作.
NOP();    //必须放置两nop.
NOP();
return((((unsigned int)EEDATH)<<8) + EEDATA); //返回数据.
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-12-24 21:27 , Processed in 0.059992 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表