×
单片机 > 单片机程序设计 > 详情

PIC内部EEPROM读写操作

发布时间:2020-05-16 发布时间:
|

EPROM操作:


如果要读取一个字节,
用户首先必须向EEADRL寄存器写入地址,然后清除EEPGD控制位,以及EECON1的CFGS位,
然后再将RD位置高。需要的数据经过一次指令周期马上就出现在EEDATL里面了,下一个指令
就可以读取出来,当然为了稳定可以加noop。EEDATL寄存器将会保留该读取的值,直到下一次读取操作
或者是用户写入操作。


代码:
EEADRL=DATA_EE_Address;
nop();
EEPGD=0;
CFGS=0;
RD=1;
nop();
nop();
result_byte=EEDATL;


如果要写入一个字节;
先设置地址EEADRL,并写入数据Byte的EEDATL,然后在遵循如下时序操作:


EEADRL=DATA_EE_Address;
EEDATL=Data_Byte;
EEPGD=0;
CFGS=0;
//危险操作,允许写入
WREN=1;
//严格按照如下顺序初始化,
GIE=0;  //关闭中断
EECON2=0x55;
EECON2=0xaa;
WR=1;
GIE=1;  //恢复中断
WREN=0; //恢复


while(WR){
nop();
}
while(!EEIF){   //poll中断标志位
nop();
}
EEIF=0;  //必须软件清除标志位


写EEPROM要花费2ms到8ms的时间,故在检测WR状态位要花费相当长时间,会进入中断(时间间隔为1ms的T0中断)。


写入EEPROM有一个特定的过程:将55H写入EECON2,将AAH写入EECON2

然后将WR位置1

*******************************************/

#include

#include "../head/config.h"

 

__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);    

//HS振荡,禁止看门狗,低压编程关闭,启动延时定时器

 

 

void WriteEE(uint8 addr,uint8 data);//EEPROM写函数

uint8 ReadEE(uint8 addr);   //EEPROM读函数

 

uint8 cydata;   //定义全局变量

 

void main(void) //主函数

{

    uint8 k;

    PORTD = 0xff; //PORTD赋FF

    TRISD = 0x00;//PORTD为输出

        

    for(k = 0;k < 7; k++)

    {

     WriteEE(k,k+1); //循环调用EEPROM写函数,向地址为0~7的写入1~8

    } 

 while(1)

 {

    

    cydata = ReadEE(0);//读取EEPROM的地址0数据

    

    if(cydata == 1)

    {

       RD0 = 0; //判断EEPROM地址0里的数据是不是为1,为1则点亮LED0

    }

 }

}

 

//EEPROM写数据函数

void WriteEE(uint8 addr,uint8 data)

{

    do{}

    while(WR == 1);//等待写完成

    

    

    EEADR = addr;//写入地址信息

    EEDATA = data;//写入数据信息

    EEPGD = 0;//操作EEPROM

     WREN = 1; //写EEPROM允许

    EECON2 = 0x55;//写入特定时序

    EECON2 = 0xaa;

    WR = 1; //执行写操作

    do{}

    while(WR == 1);//等待写完成

    WREN = 0;//禁止写入EEPROM

}

 

//EEPROM读数据函数

uint8 ReadEE(uint8 addr)

{

    uint8 num;

    do{}

    while(RD == 1);//等待读完成

    EEADR = addr;//写入要读的址址

    EEPGD = 0;//操作EEPROM

    RD = 1;//执行读操作

    do{}

    while(RD == 1);//等待读完成

    num = EEDATA;

    return num;//返回读取的数据

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 TIMER2的使用