STC12C5204AD的掉电存储问题请教
使用外部中断检测掉电信号,然后保存一个INT的数据,从实际情况看,掉电时LED灭了一瞬间,然后亮了0.5秒左右,证实程序很有时间处理但是现在的问题是,有10%的概率左右会出现再次上电时读出的数据是0XFFFF,各种保护都加了,有碰到过的吗? 为了避免重复中断的问题,我设置了一个BIT,每次开机=1,发生了保存操作时必须=1才操作,然后=0,还有我也设置了ELVD = 1;PLVD = 1;
并在LVD中断中使用了
while(PCON & ~0XDF){
PCON &= 0XDF;
}
在做这些之前,这种现在是很多的,尤其是LVD中断处理之前非常多,几乎每次都这样,开了这个中断,好多了,后来加了那个BIT后,又好了点,现在已经想不出其他办法了,偶尔还会有,即使概率没有10%,也有5%的样子了,唉!
xiaobendan001 发表于 2013-4-26 08:17 static/image/common/back.gif
为了避免重复中断的问题,我设置了一个BIT,每次开机=1,发生了保存操作时必须=1才操作,然后=0,还有我也 ...
还有一个,我打开了REST2低于1.33V复位,也一样。
补充,我用的晶振是6M 上电加500ms以上延时后运行程序 本帖最后由 xiaobendan001 于 2013-4-26 10:27 编辑
toptrying 发表于 2013-4-26 08:38 static/image/common/back.gif
上电加500ms以上延时后运行程序
这个是我用的延时函数,具体时间没有测算过,应该差不多的
void delay_us(int time)
{
do
{
time--;
}
while (time>1);
}
然后我在读EEPROM之前有:
delay_us(10000);
这个也是之前加的了,当时测试有效果的,但是还没有完全根除!
难道是时间太短?
有空改成delay_us(20000);试试看了
xiaobendan001 发表于 2013-4-26 09:25 static/image/common/back.gif
这个是我用的延时函数,具体时间没有测算过,应该差不多的
void delay_us(int time)
延时时间短了 谢谢回复。
实验继续,不断开关电源,当出现0XFFFF时,使用强制复位后仍然显示-0XFFFF,不管复位多少次都是。此点是否可以证明不是因为开机时读取过快造成的,还是掉电时保存的数据是错误的。
然而,根据之前的经验,0XFFFF是擦除了没来得及写入的数据,但是实际上是写入了的。
我在其他地方使用过这个芯片,没有问题,电路都一样的。这个板子之前用的12C5205AD,似乎好很多,这次使用了04的,结果比较严重一些。
继续寻找问题所在…… 唉,有点怀疑是芯片问题了 强制复位和掉电检测一样吗?S T C上电容易自动擦除数据的 实验进展:
将保护BIT延时打开,无效。延时打开后,在写函数中判断无效时直接退出,无效。
开来不是程序跑飞后主动擦除的,因为这个是保存在第二扇区的,然而第一扇区的内容一直都很正常。 继续,把LVD中断的服务程序直接放在了MAIN的最前面,无效
接续,仔细对比了04和05的参数,发现05的低压复位功能是不能开的,于是果断关闭这个功能,果然,这次有效了,很明显的效果。
这个问题解决了,希望对其他使用该芯片的人有所帮助吧。
前后用了半天的时间测试各种方法,唉,原来是这样的。
页:
[1]