PIC16F877A单片机的EEPROM读写

2019-04-15 11:47发布

编写一个例程来说明比较好理解, 本例程的功能是将一个0x66的字符放在0x15的EEPROM中,然后在读取,如果读取成功就点亮LED灯 #include //调用头文件,16F877A单片机
__CONFIG(0xFF32);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define L0 RD0 //定义L0为RD0端口 


char buf;//读写数据的储存空间
void WriteEE(char addr,char data);//EEPROM写函数
char ReadEE(char addr);   //EEPROM读函数
//主程序
void main()
{
TRISD=0B00000000; //0X00;
PORTD=0B00000000; //0x00;
    WriteEE(0x15,0x66);//将0x66写入0x15地址的EEROM中     buf = ReadEE(0x15);//将0x15地址中的数据读出,并将他放到BUF中
while(1)
{           //判断buf中的数据是否为写入的数据,如果是0x66,证明读写功能成功
            if(buf == 0x66){
                L0=1;
            }
}


}
//EEPROM写数据函数
void WriteEE(char addr,char 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读数据函数
char ReadEE(char addr)
{
    char num;
    do{}
    while(RD == 1);//等待读完成
    EEADR = addr;//写入要读的址址
    EEPGD = 0;//操作EEPROM
    RD = 1;//执行读操作
    do{}
    while(RD == 1);//等待读完成
    num = EEDATA;
    return num;//返回读取的数据
}