找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8G1K08单片机如何实现用一个EEPROM扇区保存一个16位数据

[复制链接]
跳转到指定楼层
楼主
ID:608427 发表于 2023-8-26 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题:现有一个16位统计数据需要利用单片机自带的EEPROM存储以便于重启系统后能继续计数。
单片机型号:STC8G1K08
EEPROM空间:4k
望大佬不吝赐教,感激不尽!

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

使用道具 举报

沙发
ID:712097 发表于 2023-8-26 16:34 | 只看该作者
用两个字节就可以了,一个字节存高8位,另一个字节存低8位,存储和读取时转换一下就好了。
回复

使用道具 举报

板凳
ID:608427 发表于 2023-8-27 02:07 | 只看该作者
chxelc 发表于 2023-8-26 16:34
用两个字节就可以了,一个字节存高8位,另一个字节存低8位,存储和读取时转换一下就好了。

这个方法我会 但是就是不知道怎么把两个字节存储到同一扇区
回复

使用道具 举报

地板
ID:965189 发表于 2023-8-27 09:31 | 只看该作者
IapProgram(0x0000,data_L);
IapProgram(0x0001,data_H);
回复

使用道具 举报

5#
ID:608427 发表于 2023-8-27 13:42 | 只看该作者
君工创 发表于 2023-8-27 09:31
IapProgram(0x0000,data_L);
IapProgram(0x0001,data_H);

额 昨天又仔细研读了下手册 应该能解决了 多谢多谢
回复

使用道具 举报

6#
ID:712097 发表于 2023-8-28 08:08 | 只看该作者
asdfasdfa 发表于 2023-8-27 02:07
这个方法我会 但是就是不知道怎么把两个字节存储到同一扇区

512字节为一个扇区,0-511(0x00-0x1FF),512-1023(0x200-0x3FF)这样。
8G1K08内部有4KEEPROM,上面是1K的2个扇区,后面还有6个扇区,依次推导即可。
回复

使用道具 举报

7#
ID:1034262 发表于 2023-8-28 10:38 | 只看该作者
分两个字节写入即可,32位的数(长整形或浮点数)就要分4个字节写入。
回复

使用道具 举报

8#
ID:123289 发表于 2023-8-28 10:56 | 只看该作者
【有钱】(用N个扇区做这件事)的做法:
起始:清擦N扇区。
1、用3个字节存数据,首字节是标记S,S<>FFH就行,就自定。另两个,按你的想法去做。
2、写入时:从前向后查标记S,从第一个为FF的单元格起(注意查找步进=3个字节),写入S标记和数据。
  如果没有查到FF(扇区已写满了),则清擦N扇区,从0单元起,写入S标记和数据。
3、读取时:从前向后查标记,从第一个为FF的单元格起,向前退两个单元,就是你需要读取的数据。
  如果没有查到FF(扇区恰好写满了),则是最末是数据(注意:步进=3个字节)。
为何要标记S呢?因为擦除后全是FFH,如果你的数据也是FFH,如何区分呢?
当然,你有区分的方案,也可以按自己的想法来。例如,数据不会出现FFH,则标记可以省略不要。

【没有钱】的做法:
写入:
1、将本扇区内所有的数据复制到同样大小的RAM中。
2、在RAM的对应位置上写入数据。
3、擦除本扇区
4、将RAM中数据,复制到本扇区中。
在3、4、过程中不能掉电,否则数据被毁,无法恢复。当然有办法防止,这是另一个题目,不在此啰嗦。
读取:略。


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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