关于STC单片机内部EEPROM问题的解决

关于STC单片机内部EEPROM问题的解决
由于STC单片机的IAP功能比较好用,不需要仿真器就可以下载程序。
在一些简单的业余设计中,采用STC芯片确实比较方便。
STC芯片可以采用内部FLASH做成EEPROM功能来使用。这个功能其实几乎
所有现在出来的芯片都支持。但STC做的有点让人不适应。
我刚开始做的时候,从官网下载了程序源代码,建好了工程。试了一下,
功能可以实现。认为没有问题。这东西也简单。但到了后来,折腾了我两天。
让我头痛了。最后终于解决了。总结一下。
STC内部FLASH分的块挺小的.512Byte一个区。毕竟是FLASH。所以擦除一定
是一片【512Byte】,写也简单,只要调用官网的程序就行了。
官网的程序还用了P1端口做为输出指示。我把这些去掉了。
刚开始只是做了个按键调试一下,显示出来,然后修改完成后,又存进去。
所以没有发现问题。后来,程序量大了。同时,做为EEPROM,我是一上电就
去读取。如果读取的数据不对,我的程序会强行重新刷一次默认值进去。
结果问题出来了。读取出来的数据偶尔会不正确。总是被我给刷成默认值。
电路本身很简单,就一个通讯和显示【速按键调整】。所以,硬件不会有
问题,有问题的一定是软件本身。
STC的烧录中有一项,禁止低压时操作EEPROM。当时,只是认为这个主要管
理掉电的时候不要去写EEPROM。后来才觉得不对。上电时,是否也会有这种
问题?由于有数据码显示,所以,上电后不久,数码管就会被点亮。此时,电
源电压会有所下降。这个时候,写EEPROM肯定有问题。其实,在这个时候,不光
是写,读取也不行。
所以,我在程序中,做了处理,上电200ms以内,不去读取EEPROM的数据,同时
220ms以内,不开启数码管显示。这样有效地保证了电源电压的稳定。
这样,我还不放心,原来读取EEPROM只读取一次。现在改为带校验。每16个数据
后面带一个校验字。如果读取出来以后,校验不通过,则重新读取,三次都不正确
则重新加载默认值,向EEPROM写一次数据。
每次写EEPROM时,程序自动在16字节以后加入一个校验。写完以后,再读取出来
比较一次。三次读取机会,直到读取出来的数据是正确的。否则报错。
到此,EEPROM功能工作正常。

相关文档
最新文档