标题:
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的数据和舍弃溢出部分作为验证码。
void Read_e2()
{
uchar Check = 0;
uchar i,a[3];
for(i=0;i<3,i++)
a[i]=EEPROM_Read(0x2001+i);
if(a[0]!=(a[1]+a[2]))
{
Temp_H= 默认值;
CO2_H = 默认值;
}
else
{
Temp_H= a[1];
CO2_H = a[2];
}
}
//将数据保存在芯片中
void Write_e2()
{
Sector_Erase(0x2000); // 擦除单片机内部EEPROM的数据
EEPROM_Write(0x2000, Temp_H+CO2_H);
EEPROM_Write(0x2001, Temp_H);
EEPROM_Write(0x2002, CO2_H);
}
复制代码
作者:
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