找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

STC15的内部EEPROM奇怪问题

查看数: 9390 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-2-23 21:53

正文摘要:

STC15的内部EEPROM奇怪问题 思路如下:   清除地址0x00的内容;   地址0x00 写入 0x22数据;   地址0x01 写入 0x44数据;   地址0x02 写入 0x66数据;  & ...

回复

ID:624769 发表于 2021-9-17 21:45
2017 年的时候,楼主自问自答 连奖励 都拿走了,可以封贴了吧?
ID:57657 发表于 2021-9-17 20:52
STC内置的EEPROM,不是真正的EEPROM,而是Flash闪存。
没有字节擦除,只有扇区擦除,二进制1写0不可逆,擦除后才可以全部恢复为1(0xFF),一次擦一个扇区(512字节)。
擦除扇区 IapEraseSector(i); 其中i可以取0、512、1024、1536等,其他都是错误的。
问题已经遇到无数次了,很多新人操作EEPROM都会犯相同的错误。

评分

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

查看全部评分

ID:907814 发表于 2021-9-17 17:41
我也遇到这鬼问题了
ID:146949 发表于 2017-4-5 23:10
jackenli 发表于 2017-4-5 22:06
IAP_ADDRH = (unsigned char)(addr>>8);    //设置目标单元地址的高8 位地址
        IAP_ADDRL = (unsigned cha ...

STC单片机不像24C02那样写EEPROM,24C02的操作是写器件址->写寄存器地址->写数据
STC操作是写扇区清除(会自动把扇区0x0000~0x01ff 512个填满FF)->然后再把数据从0位开始放入至511位置。每次操作都要重新刷新扇区内的512个数据。

这是我研究了3个星期的成果,还有一种办法是每个扇区写一个数据,(写扇区地址1->写数据 , 写扇区地址2->写数据)

评分

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

查看全部评分

ID:143209 发表于 2017-4-5 22:06
        IAP_ADDRH = (unsigned char)(addr>>8);    //设置目标单元地址的高8 位地址
        IAP_ADDRL = (unsigned char)(addr&0x00ff);    //设置目标单元地址的低8 位地址
楼主可以改成这样试试。我的没问题了。

评分

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

查看全部评分

ID:143209 发表于 2017-4-5 17:01
请问楼主解决这个问题了吗?我也遇到了,然后有一段时间是可以的,后来又不行。
ID:146949 发表于 2017-2-23 23:57
关键点就是:
num=0xEE;
IapEraseSector(0);//清除数据
IapProgramByte(0,num);//写入数据
执行完后只有EEPROM地址的0是正确,其它地址1、2、3变成了FF
ID:123289 发表于 2017-2-23 23:09
太长,写出关键点,或用红色圈出来。

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

Powered by 单片机教程网

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