中颖EEPROM 操作

来源:互联网 发布:凯知乐官网 编辑:程序博客网 时间:2024/04/28 02:22
<pre name="code" class="cpp">/*中颖EEPROM,使用比较方便,但有个注意点,就是每次无论你写入什么数据或者在哪个地址写数据,都需要将对 对应的块擦除,擦除后才能写入成功。*/#define SSPWriteFlag  0x5A#define SSPEraseFlag  0xA5//数据区 扇形区1#defineADDR_START1(uint16)0x100 //数据存储区起始地址#defineADDR_START2(uint16)0x200 //数据存储区起始地址//数据区 扇形区2#defineAddr1UserHave(uint16)0x101 //用户地址1#defineAddr2UserHave(uint16)0x102 //用户地址2uint8 Ssp_Flag = 0 ;//*************************************// 函数名称:Ssp_Write// 函数功能:SSP擦除某块的地址// 入口参数:被写数据的地址 数据// 出口参数:无//***************************************void Ssp_EraseBlock(uint16 addr){CY=EA;EA=0;IB_CON1 = 0xE6;IB_CON2 = 0x05;IB_CON3 = 0x0A;IB_CON4 = 0x09;if(Ssp_Flag != SSPEraseFlag){IB_CON2=0;goto Erase_Err;}XPAGE = (addr>>8) & 0x07;   FLASHCON=1;IB_CON5 = 0x06;_nop_();_nop_();_nop_();Erase_Err:Ssp_Flag=0;FLASHCON=0;XPAGE=0;EA = CY;}//**************************************// 函数名称:Ssp_Write// 函数功能:SSP向某地址写一字节数据// 入口参数:被写数据的地址 数据// 出口参数:无//***************************************void Ssp_WriteByte(uint16 addr,uint8 dat){CY=EA;EA=0;IB_DATA = dat;IB_OFFSET = addr&0xff; //取被编程的低8位地址IB_CON1 = 0x6E;IB_CON2 = 0x05;IB_CON3 = 0x0A;IB_CON4 = 0x09;if(Ssp_Flag != SSPWriteFlag){IB_CON2=0;goto Write_Err;}XPAGE = ((addr>>8) & 7); //被编程的扇形区0-3   FLASHCON=1;//对类EPROM编程开始IB_CON5 = 0x06;_nop_();_nop_();_nop_();_nop_();Write_Err:Ssp_Flag=0;FLASHCON=0;XPAGE=0;EA = CY;}//*************************************// 函数名称:Read_Flash// 函数功能:读数据 向FLASH// 入口参数:读数据的地址// 出口参数:无//***************************************uint8 Read_FlashByte(uint16 addr){uint8 temp;FLASHCON=1;temp=*(uint8 code *)(addr);   FLASHCON=0;return(temp);}//应用实例: Ssp_EraseBlock(ADDR_START1);//擦除块1 Ssp_WriteByte(Addr1UserHave,0x88);//在地址Addr1UserHave中写入0x88 R_Data = Read_FlashByte(Addr1UserHave);//读地址Addr1UserHave的值


                                             
13 2
原创粉丝点击