标题:
用的STC8H1K08的单片机,把IO接收到的几个字节的数据存入内部eeprom,请大家指点
[打印本页]
作者:
xrzszhang
时间:
2023-5-11 01:10
标题:
用的STC8H1K08的单片机,把IO接收到的几个字节的数据存入内部eeprom,请大家指点
目前用的是STC8H1K08单片机,由于板子做的仓促,必须用IO口接收别处的串口发来的数据,也就是把IO当串口来用,目前IO已经可以接收外部USB转TTL工具发来的数据,波特率为19200,接收到几个字节的数据把它们放在了数组中,想把数组中的几个字节的数据存入eeprom中并读出来,最后把这几个字节的数据通过另一个IO发出来。目前的问题是增加了eeprom的擦除,写入和读出函数后主循环while(1)跑不起来(主循环中有LED闪烁的程序),且数据不能从IO发送出去,工程已上传到附件。请各位大佬帮忙看下哪里有问题。非常感谢!
test.zip
2023-5-11 01:09 上传
点击文件名下载附件
113.07 KB, 下载次数: 21
模拟串口,eeprom存储
作者:
wulin
时间:
2023-5-11 09:10
数据存入EEPRPM的主要目的是为了掉电不丢失。所以正常运行时不需要频繁写EEPRPM。当不得以用普通IO口当串口来用要占用不少CPU资源,会使其他程序运行不畅。哪怕只写一个字节也得擦除整个扇区,很耗时间。建议将模拟串口收到的数据放在数组中,可以直接使用。开启掉电中断保存EEPROM的方法,不影响正常工作。关机或掉电时数据保存在EEPROM,供再次得电读取使用。这里有一个技巧:开机初始化后读取保存在EEPROM的数据,随即删除该扇区。掉电中断直接写EEPROM,无需再擦除扇区消耗时间。以IAP15W4K58S4在TX-1C开发板上实验为例,掉电中断写两个字节用时215.25us,板上电源滤波电容100uF,剩余电量从中断开始到MCU停止工作约2.5ms。
作者:
yzwzfyz
时间:
2023-5-11 14:58
沙发解得好。
我的做法如沙发所说,CPU普通运行中,只将数据写入RAM,只在掉电发生时,做一个将RAM中的数据转移存入EEPROM的动作。当然硬件上,加有掉电检测。
如果楼主执意要立即写入EEPROM,要做到:
任何时刻,不要死等某个信号。
假设某个信号(如:擦除)从起动到产生需要10ms,你如果死等它,则在这10ms中,其它程序就得不到运行(如刷新显示,串行数据……),功能必受影响。
做到不死等,问题基本就解决了。不过,这个非常考验逻辑时序规划能力,以及程序功底。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1