转:关于对中颖EEPROM 的操作解析

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <pre name="code" class="cpp">/* 
  2.     中颖EEPROM,使用比较方便,但有个注意点,就是每次无论你写入 
  3.     什么数据或者在哪个地址写数据,都需要将对 对应的块擦除,擦 
  4.     除后才能写入成功。 
  5. */  
  6. #define  SSPWriteFlag     0x5A  
  7. #define  SSPEraseFlag     0xA5    
  8.   
  9. //数据区 扇形区1  
  10. #define     ADDR_START1             (uint16)0x100 //数据存储区起始地址  
  11.   
  12. #define     ADDR_START2             (uint16)0x200 //数据存储区起始地址  
  13. //数据区 扇形区2  
  14. #define     Addr1UserHave           (uint16)0x101 //用户地址1  
  15. #define     Addr2UserHave           (uint16)0x102 //用户地址2  
  16.   
  17. uint8 Ssp_Flag = 0 ;  
  18.   
  19. //*************************************  
  20. // 函数名称:Ssp_Write  
  21. // 函数功能:SSP擦除某块的地址  
  22. // 入口参数:被写数据的地址 数据  
  23. // 出口参数:无  
  24. //***************************************  
  25. void Ssp_EraseBlock(uint16 addr)  
  26. {  
  27.     CY=EA;  
  28.     EA=0;  
  29.     IB_CON1 = 0xE6;  
  30.     IB_CON2 = 0x05;  
  31.     IB_CON3 = 0x0A;  
  32.     IB_CON4 = 0x09;  
  33.     if(Ssp_Flag != SSPEraseFlag)  
  34.         {  
  35.             IB_CON2=0;  
  36.             goto Erase_Err;  
  37.         }  
  38.     XPAGE = (addr>>8) & 0x07;      
  39.     FLASHCON=1;  
  40.     IB_CON5 = 0x06;  
  41.     _nop_();  
  42.     _nop_();  
  43.     _nop_();  
  44. Erase_Err:  
  45.     Ssp_Flag=0;   
  46.     FLASHCON=0;  
  47.     XPAGE=0;  
  48.     EA = CY;  
  49. }  
  50.   
  51. //**************************************  
  52. // 函数名称:Ssp_Write  
  53. // 函数功能:SSP向某地址写一字节数据  
  54. // 入口参数:被写数据的地址 数据  
  55. // 出口参数:无  
  56. //***************************************  
  57. void Ssp_WriteByte(uint16 addr,uint8 dat)  
  58. {  
  59.     CY=EA;  
  60.     EA=0;  
  61.     IB_DATA = dat;  
  62.     IB_OFFSET = addr&0xff; //取被编程的低8位地址  
  63.     IB_CON1 = 0x6E;  
  64.     IB_CON2 = 0x05;  
  65.     IB_CON3 = 0x0A;  
  66.     IB_CON4 = 0x09;  
  67.     if(Ssp_Flag != SSPWriteFlag)  
  68.     {  
  69.         IB_CON2=0;  
  70.         goto Write_Err;  
  71.     }  
  72.     XPAGE = ((addr>>8) & 7); //被编程的扇形区0-3      
  73.     FLASHCON=1; //对类EPROM编程开始  
  74.     IB_CON5 = 0x06;  
  75.     _nop_();  
  76.     _nop_();  
  77.     _nop_();  
  78.     _nop_();  
  79. Write_Err:  
  80.     Ssp_Flag=0;  
  81.     FLASHCON=0;  
  82.     XPAGE=0;  
  83.     EA = CY;  
  84. }  
  85. //*************************************  
  86. // 函数名称:Read_Flash  
  87. // 函数功能:读数据 向FLASH  
  88. // 入口参数:读数据的地址  
  89. // 出口参数:无  
  90. //***************************************  
  91. uint8 Read_FlashByte(uint16 addr)  
  92. {  
  93.     uint8 temp;  
  94.     FLASHCON=1;  
  95.     temp=*(uint8 code *)(addr);  
  96.     FLASHCON=0;  
  97.     return(temp);  
  98. }  
  99.   
  100.   
  101. //应用实例:  
  102.  Ssp_EraseBlock(ADDR_START1);//擦除块1  
  103.  Ssp_WriteByte(Addr1UserHave,0x88);//在地址Addr1UserHave中写入0x88  
  104.  R_Data = Read_FlashByte(Addr1UserHave);//读地址Addr1UserHave的值  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值