【PIC学习第18例】PIC16F877A 内部EEPROM读写实验

it2022-05-08  12

 

代码 /* ***********************************************PIC16F877A 内部EEPROM读写实验*******Author:hnrainDate:2010-12-25Version:V0.1Email:hnrain1004@gmail.comForum:http://bbs.cepark.com_______________________________实验现象:先给内部EEPROM的0~7字节写数据1~8,再读出第0字节的内容,并判断读出来的数据是不是1,如果是1则点亮RD0口的LED。重点内容:内部EEPROM的操作主要通过4个寄存器EECON1,EECON2,EEDATA,EEADREEDATA寄存器存放8位读写数据EEADR存放EEPROM被访问过的地址EECON1寄存器定义:bit7:5 未用;读为0bit4 EEIF:EEPROM写操作中断标志位 1 = 写操作完成(必须软件清零) 0 = 写操作未完成或还未开始bit3 WRERR:EEPROM错误标志位 1 = 写操作过早终止 0 = 写操作已完成bit2 WREN:EEPROM写使能位 1 = 允许写入 0 = 禁止写入EEPROMbit1 WR:写操作控制位 1 = 启动写周期,一旦写入完成,该位将被硬件清零 写操作控制位只能用软件置"1" 0 = EEPROM的写周期已完成bit0 RD:读控制位 1 = 启动EEPROM读操作。读需要一个周期,RD由硬件清零 RD只能用软件置“1” 0 = 未启动EEPROM读操作写入EEPROM有一个特定的过程:将55H写入EECON2,将AAH写入EECON2然后将WR位置1****************************************** */ #include < pic.h > #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; // 返回读取的数据 }

 

 

转载于:https://www.cnblogs.com/hnrainll/archive/2010/12/25/1916439.html

相关资源:PIC16F1829 DATA EEPROM 读写操作示例

最新回复(0)