找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 867|回复: 2
打印 上一主题 下一主题
收起左侧

用的STC8H1K08的单片机,把IO接收到的几个字节的数据存入内部eeprom,请大家指点

[复制链接]
跳转到指定楼层
楼主
ID:1064268 发表于 2023-5-11 01:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前用的是STC8H1K08单片机,由于板子做的仓促,必须用IO口接收别处的串口发来的数据,也就是把IO当串口来用,目前IO已经可以接收外部USB转TTL工具发来的数据,波特率为19200,接收到几个字节的数据把它们放在了数组中,想把数组中的几个字节的数据存入eeprom中并读出来,最后把这几个字节的数据通过另一个IO发出来。目前的问题是增加了eeprom的擦除,写入和读出函数后主循环while(1)跑不起来(主循环中有LED闪烁的程序),且数据不能从IO发送出去,工程已上传到附件。请各位大佬帮忙看下哪里有问题。非常感谢!

test.zip

113.07 KB, 下载次数: 21

模拟串口,eeprom存储

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2023-5-11 09:10 | 只看该作者
数据存入EEPRPM的主要目的是为了掉电不丢失。所以正常运行时不需要频繁写EEPRPM。当不得以用普通IO口当串口来用要占用不少CPU资源,会使其他程序运行不畅。哪怕只写一个字节也得擦除整个扇区,很耗时间。建议将模拟串口收到的数据放在数组中,可以直接使用。开启掉电中断保存EEPROM的方法,不影响正常工作。关机或掉电时数据保存在EEPROM,供再次得电读取使用。这里有一个技巧:开机初始化后读取保存在EEPROM的数据,随即删除该扇区。掉电中断直接写EEPROM,无需再擦除扇区消耗时间。以IAP15W4K58S4在TX-1C开发板上实验为例,掉电中断写两个字节用时215.25us,板上电源滤波电容100uF,剩余电量从中断开始到MCU停止工作约2.5ms。

评分

参与人数 1黑币 +18 收起 理由
wpppmlah + 18 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:123289 发表于 2023-5-11 14:58 | 只看该作者
沙发解得好。
我的做法如沙发所说,CPU普通运行中,只将数据写入RAM,只在掉电发生时,做一个将RAM中的数据转移存入EEPROM的动作。当然硬件上,加有掉电检测。

如果楼主执意要立即写入EEPROM,要做到:
任何时刻,不要死等某个信号。
假设某个信号(如:擦除)从起动到产生需要10ms,你如果死等它,则在这10ms中,其它程序就得不到运行(如刷新显示,串行数据……),功能必受影响。
做到不死等,问题基本就解决了。不过,这个非常考验逻辑时序规划能力,以及程序功底。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表