找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1351|回复: 6
打印 上一主题 下一主题
收起左侧

STC89C52RC单片机片内EEPROM存储数据问题

[复制链接]
跳转到指定楼层
楼主
ID:913310 发表于 2022-5-18 22:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
设计是将温度和二氧化碳的设定值存到地址(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);
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 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. }
复制代码
回复

使用道具 举报

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

使用道具 举报

地板
ID:624769 发表于 2022-5-19 11:03 来自手机 | 只看该作者
isp_conta需要设置速度,速度不对的话,连续写三个数据,会导致第二个数据写入失败,建议写好后读一下确认数据,或者严格按照手册设置isp_conta。
回复

使用道具 举报

5#
ID:913310 发表于 2022-5-19 12:37 | 只看该作者
wulin 发表于 2022-5-19 06:51
可以将Temp_H、CO2_H的数据和舍弃溢出部分作为验证码。

顶一下一楼,他的方法解决了问题了,赞!
回复

使用道具 举报

6#
ID:230742 发表于 2022-5-19 12:39 | 只看该作者
在本论坛搜索一下例程参考一下。很多的。
时间又不急,擦除和写入多延时一下。等它搞完了,在往下执行。稳住。
回复

使用道具 举报

7#
ID:1040470 发表于 2022-8-13 15:49 | 只看该作者
增加一步验证就可以吧,验证一下读入的数据是否正确
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表