标题: STC89C52RC单片机片内EEPROM存储数据问题 [打印本页]

作者: shankmorder    时间: 2022-5-18 22:55
标题: STC89C52RC单片机片内EEPROM存储数据问题
设计是将温度和二氧化碳的设定值存到地址(0x2001和0x2002),然后掉电或者GSM初始化就会出现温度丢失原始设定值,二氧化碳数据保持不变;然后温度丢失后会随机变化,变化到几度。我怀疑是代码这里有问题void Read_e2(){
        uchar Check = 0;
        Check = EEPROM_Read(0x2000);                     // 从EEPROM中读取报警值
        if(Check == 18)//检测上次是否有写入数据,如果没有则使用默认数据
        {
                Temp_H         = EEPROM_Read(0x2001);
                CO2_H         = EEPROM_Read(0x2002);
        }
}
//将数据保存在芯片中
void Write_e2()
{
        Sector_Erase(0x2000);                                       // 擦除单片机内部EEPROM的数据
        EEPROM_Write(0x2000, 18);
        EEPROM_Write(0x2001, Temp_H);
        EEPROM_Write(0x2002, CO2_H);
}






作者: wulin    时间: 2022-5-19 06:51
可以将Temp_H、CO2_H的数据和舍弃溢出部分作为验证码。

  1. void Read_e2()
  2. {
  3.         uchar Check = 0;
  4.         uchar i,a[3];
  5.         for(i=0;i<3,i++)
  6.                 a[i]=EEPROM_Read(0x2001+i);
  7.         if(a[0]!=(a[1]+a[2]))
  8.         {
  9.                 Temp_H= 默认值;
  10.                 CO2_H = 默认值;               
  11.         }
  12.         else
  13.         {
  14.                 Temp_H= a[1];
  15.                 CO2_H = a[2];       
  16.         }
  17. }
  18. //将数据保存在芯片中
  19. void Write_e2()
  20. {
  21.         Sector_Erase(0x2000);   // 擦除单片机内部EEPROM的数据
  22.         EEPROM_Write(0x2000, Temp_H+CO2_H);
  23.         EEPROM_Write(0x2001, Temp_H);
  24.         EEPROM_Write(0x2002, CO2_H);
  25. }
复制代码

作者: yzwzfyz    时间: 2022-5-19 11:02
如果你怀疑它,就查一下用到的函数。
提示点:
擦除需要时间,如果刚下了擦除命令,紧接着就发出写命令,则倒发生,还未探险干净,就写了。
写也需要时间。
建议:将标记写入,放在最后执行。不要先写标记,再写数据。

作者: 188610329    时间: 2022-5-19 11:03
isp_conta需要设置速度,速度不对的话,连续写三个数据,会导致第二个数据写入失败,建议写好后读一下确认数据,或者严格按照手册设置isp_conta。
作者: shankmorder    时间: 2022-5-19 12:37
wulin 发表于 2022-5-19 06:51
可以将Temp_H、CO2_H的数据和舍弃溢出部分作为验证码。

顶一下一楼,他的方法解决了问题了,赞!
作者: 啤酒瓶子老大    时间: 2022-5-19 12:39
在本论坛搜索一下例程参考一下。很多的。
时间又不急,擦除和写入多延时一下。等它搞完了,在往下执行。稳住。
作者: wuwuwuwuwukk    时间: 2022-8-13 15:49
增加一步验证就可以吧,验证一下读入的数据是否正确




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1