新人求教!!! STC89C52单片机掉电数据保存程序

Stenph 2017-10-21 10:08:24
求STC89C52单片机关掉电源之后能把程序中的某个变量(比如说a)保存下来,下次启动之后还是变成上次的数据。比如第一次用的时候a=100而关电源时是a=200,;那么下次开机时a=200....一次类推。希望要纯软件,不希望用到硬件功能。希望大佬能给完整的代码。
...全文
3303 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
of123 2017-10-25
  • 打赏
  • 举报
回复
STC89C52 中有 4KB 称为 EEPROM 的非易失性存储空间,实质上也是 Flash。分开称呼是为了和程序存储所用的 Flash 加以区分。 你可以将掉电不丢的数据写入其中。因为也是 Flash 介质,也需要先擦后写。它的页长是 512 字节。
of123 2017-10-23
  • 打赏
  • 举报
回复
无论什么芯片,掉电保护的原理,就是将数据写入非易失性存储器。 现在的芯片,一般集成的非易失性存储器是 NOR Flash。它的特点是页擦后才能字节写或字写。 因此,你的保存策略要适当改变。假设你只保存一个变量,占用 4 字节,你的 Flash 页长是 512 字节。那么你需要 2 页来缓存它,才能保证任何情况下不会丢失所有(上一次和当前)数据。 开始时,你向第一页陆续写入。开机读取则是逆向的,读到的第一个不为 FFFFFFFF 的单元就是你上次的数据。你同时记下地址,下次就写入下一个单元地址。当第一页写满时,你先写第二页的起始单元,然后擦除第一页。这样,无论哪一个瞬间掉电,你都不会失去所有数据。第二页写满的处理方法类似。 很显然,你上电读的规则是,首先读第二页起始单元,如果为空,从第一页最后单元逆向搜索;否则从第二页最后单元逆向搜索。 更精致的防止写操作中途掉电的方案是,用 8 字节来表示你的变量,4 字节变量加上 4 字节 00000000 完成标志。如果逆向搜索到最后非空单元不是全 0,则再向前搜索。(其实,如果你用 3 字节足以容纳变量的话,对于 51 系列以字节为单位写入的芯片,后面加 1 字节完成标志就够了。) 如果你要保存的变量不止 1 个,你就将所有要保留的数据组成固定格式的串,以完成标志结尾。你的串长最好是能被页长整除的。否则,页尾空闲区不足串长时,就要从下一页开始写整个串。也就是串不跨页。
The sleeping lion 2017-10-23
  • 打赏
  • 举报
回复
我的开发板烧进程序之后就会自动保存,比如烧进蜂鸣器响的程序断电以后再开了还是会响直到你重新烧一个新的程序
tianxj001 2017-10-22
  • 打赏
  • 举报
回复 1
可以采用内部EEPROM ,其实是用FLASH模拟的。有专门的操作命令,具体的看 http://blog.sina.com.cn/s/blog_72359bde0101975q.html

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧