logo资料库

PIC16F1829 DATA EEPROM 读写操作示例.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
PIC16F1829 DATA EEPROM 读写操作示例 读写操作示例 本文给出一个PIC16F1829 DATA EEPROM 读写操作示例,感兴趣的朋友可以看看。 #define ReadRomString_CALL #define WriteRomString_CALL //************************************* // 函数名称:ReadRomByte // 函数功能:从ROM的某一地址读数据 // 入口参数:所读数据的地址 // 出口参数:所读地址的数据 //*************************************** uint8 ReadRomByte(uint8 addr) { uint8 num; while(RD==1);//等待读完成 EEADR=addr;//写入要读的址址 EEPGD=0;//操作EEPROM RD=1;//执行读操作 while(RD==1);//等待读完成 num=EEDATA; return num;//返回读取的数据 } //************************************* // 函数名称:WriteRomByte // 函数功能:从RAM的某一地址写数据 // 入口参数:所写数据的地址及数据 // 出口参数:无 //*************************************** void WriteRomByte(uint8 addr,uint8 data) { uint8 Tmp ; uint8 i ; Tmp = ReadRomByte(addr) ; if(Tmp == data) return ; //如果读出数据与要写的数一样 直接返回 for(i=3;i>0;i--)//最多写三次 { while(WR==1);//等待写完成 EEADR=addr;//写入地址信息 EEDATA=data;//写入数据信息 EEPGD=0;//操作EEPROM WREN=1; //写EEPROM允许 EECON2=0x55;//写入特定时序 EECON2=0xaa; WR=1; //执行写操作 while(WR==1);//等待写完成 WREN=0;//禁止写入EEPROM Tmp = ReadRomByte(addr) ; if(Tmp == data) { break ; } } } //************************************* // 函数名称:ReadRomString // 函数功能:从RAM读一连串的数据 // 入口参数:所读数据的首地址 读得的数据的存放首地址 读数据 长度 // 出口参数:所读地址的数据 /***************************************/ #ifdef ReadRomString_CALL void ReadRomString(uint8 InAddr,uint8 *OutAddr,uint8 DataLong) { uint8 i ; for(i=DataLong;i>0;i--) { while(RD==1);//等待读完成 EEADR = InAddr;//写入要读的址址 EEPGD = 0;//操作EEPROM RD = 1;//执行读操作 while(RD==1);//等待读完成
*OutAddr = EEDATA; InAddr ++ ; //存储地址加1 OutAddr ++ ; //数据地址加1 } } #endif //ReadRomString_CALL //************************************* // 函数名称:WriteRomString // 函数功能:从RAM写一连串的数据 // 入口参数:要写进RAM的首地址 要写的数据 写数据的长度 // 出口参数:无 /***************************************/ #ifdef WriteRomString_CALL void WriteRomString(uint8 InAddr,uint8 *InData,uint8 DataLong) { uint8 i,j; uint8 Tmp ; for(i=DataLong;i>0;i--) { //读出的和要写的数据一致 直接写下一个数据 Tmp = ReadRomByte(InAddr) ; if(Tmp != (*InData)) //读数据与要写数据不一至 进行写 操作 { for(j=3;j>0;j--)//最多写三次 { while(WR==1);//等待写完成 EEADR = InAddr;//写入地址信息 EEDATA = *InData;//写入数据信息 EEPGD = 0;//操作EEPROM WREN = 1; //写EEPROM允许 EECON2 = 0x55;//写入特定时序 EECON2 = 0xaa; WR = 1; //执行写操作 while(WR==1);//等待写完成 WREN = 0;//禁止写入EEPROM Tmp = ReadRomByte(InAddr) ; if(Tmp == (*InData)) { break ; } } } InAddr ++ ; //存储地址加1 InData ++ ; //数据地址加1 } } #endif //WriteRomString_CALL
分享到:
收藏