关于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功能工作正常。