51单片机内部EEPROM应用求教!
本人写一程序,数据存储于内部EEPROM中,同时程序有数码管显示功能!
问题来了,每当数据写入内部EEPROM中时,数码管就闪烁一下!说明擦写内部EEPROM所花时间太长了!数据手册上也说需要很长的时间!!!虽然内部EEPROM比外部的快,但是MCU在擦写内部EEPROM时却不能做别的事,反而让人觉得比外部EEPROM更慢!
请问大家有遇到过同样的问题吗!?大家时如何解决的呢!?
[解决办法]
擦写一次也就20多ms
应该不会闪烁的吧!
以前写着玩的时候写,试过空等待50MS的间隔都不会有闪烁!
是不是你的程序哪里出问题了,
或者选择数码管余晖时间较长的类型
或者数码管带控制器的.
[解决办法]
"数码管动态显示"靠的是扫描,如果数码管能改成静态显示也可以解决。
一般键盘控制都带数码管显示控制,如周立功的芯片。
[解决办法]
应该是你程序的问题,我用AVR做的,没发现有闪烁的现象出现。还有你可以试试在擦鞋eeprom时把数码管位选关掉,应该就不闪了
[解决办法]
数据手册上写明了.
大建议:
1 . 同一次修改的数据放在同一扇区中,不是同一次修改的数据放在另外的扇区, 就不须读出保护。
2.如果一个扇区只用一个字节,那就是真正的EEPROM,STC 单片机的Data Flash 比外部EEPROM 要快很多,
读一个字节/ 编程一个字节大概是0.2uS/60uS。
3. 如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分字节时,则另外的不
需要修改的数据须先读出放在STC 单片机的RAM 中,然后擦除整个扇区,再将需要保留的数据和需修改的
数据一并写回该扇区中。这时每个扇区使用的字节数是使用的越少越方便(不需读出一大堆需保留数据)。
大约估算下
就算是改写整个扇区,也就 不到 40-50MS
如果需要改写少量数据,那也就 20多MS
你先写一个确保
空闲时间50MS以上的测试程序,
确保这测试程序不闪烁再说吧!
八成是你的显示程序子模块出问题!
[解决办法]
那你是否方便把相关的显示模块贴出来看看!
最好连相关的引脚电气定义标识一下!
你看看这样行不行:
main(){
while(1)
等待50MS();
}
display() int
{
显示();//每位3-20MS时间,时间越长,相对越亮.
}
////////////////////////////////
不闪烁就是根据视觉暂留,余晖效应处理的.
你也可以把擦除,和改写分开处理,减少EEPROM擦写连续占用CPU时间.
但这样,程序稍微复杂点.!