编写一个例程来说明比较好理解,
本例程的功能是将一个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;//返回读取的数据
}