找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2205|回复: 7
收起左侧

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

[复制链接]
ID:608427 发表于 2023-8-26 15:47 | 显示全部楼层 |阅读模式
如题:现有一个16位统计数据需要利用单片机自带的EEPROM存储以便于重启系统后能继续计数。
单片机型号:STC8G1K08
EEPROM空间:4k
望大佬不吝赐教,感激不尽!

回复

使用道具 举报

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);
回复

使用道具 举报

ID:608427 发表于 2023-8-27 13:42 | 显示全部楼层
君工创 发表于 2023-8-27 09:31
IapProgram(0x0000,data_L);
IapProgram(0x0001,data_H);

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

使用道具 举报

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个扇区,依次推导即可。
回复

使用道具 举报

ID:1034262 发表于 2023-8-28 10:38 | 显示全部楼层
分两个字节写入即可,32位的数(长整形或浮点数)就要分4个字节写入。
回复

使用道具 举报

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 单片机教程网

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