找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 2330|回复: 11
打印 上一主题 下一主题
收起左侧

关于STC8A8H64D4单片机eeprom读写问题

[复制链接]
跳转到指定楼层
楼主
       问题:现定义  unsigned  int  ledld[4]=0;    使用eeprom读取数据的时候发数组里面的数字大于900,然后发现读取的数据是错误的。后续反复试验发现数字只要大于640的话就无法读取正确的值,低于640可以正常读取。
       想问问有没有遇到这种情况的,帮我解答一下,谢谢。后面又用了STC8H3K64S4这个单片机也是一样的问题

1.png (5.96 KB, 下载次数: 57)

1.png

2.png (4.46 KB, 下载次数: 64)

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

举报

沙发
ID:712072 发表于 2023-11-16 11:25 | 只看该作者
以下是eeprom的程序

3.png (48.36 KB, 下载次数: 53)

3.png
回复

举报

板凳
ID:213173 发表于 2023-11-16 15:06 | 只看该作者
代码不全,猜不出来。单片机本身不会发生这样的问题,只能是楼主的代码有问题。
回复

举报

地板
ID:123289 发表于 2023-11-16 15:23 | 只看该作者
注意以下:
1、表达一个数所用的字节数N,即一个数要分成N个字节读、写。
2、EEPROM只能写0不能写1(1是擦除后自然形成的,例:可以将11110000,改成00110000,不可以改成11110011)。
3、先擦后写,已擦了不用再擦(擦的目的是改0为1)。
4、关注擦除的范围(当心擦到其它数据,擦是按页进行的,即一擦一大片。)
回复

举报

5#
ID:161164 发表于 2023-11-16 17:01 | 只看该作者
试试
ledld[0] = ispdu(0x0010);ledld[0] = ledld[0] << 8 | ispdu(0x0011);
回复

举报

6#
ID:712072 发表于 2023-11-16 17:57 | 只看该作者
wulin 发表于 2023-11-16 15:06
代码不全,猜不出来。单片机本身不会发生这样的问题,只能是楼主的代码有问题。

     以下是算是完整代码,后续会加其它功能,但现在卡在这个eeprom中

1.png (22.09 KB, 下载次数: 66)

1.png

2.png (20.37 KB, 下载次数: 69)

2.png
回复

举报

7#
ID:712072 发表于 2023-11-16 17:58 | 只看该作者
lkc8210 发表于 2023-11-16 17:01
试试
ledld[0] = ispdu(0x0010);ledld[0] = ledld[0]

这种形式也试过,也是不行的
回复

举报

8#
ID:213173 发表于 2023-11-16 19:04 | 只看该作者
本帖最后由 wulin 于 2023-11-17 06:35 编辑
395164965 发表于 2023-11-16 17:57
以下是算是完整代码,后续会加其它功能,但现在卡在这个eeprom中

读、写、清除EEPROM是在IAP方式操作。试试读、写、清除EEPROM时关闭总中断。EA=0;。完成后再开总中断。
回复

举报

9#
ID:1034262 发表于 2023-11-16 20:43 | 只看该作者
程序问题,EEPROM只能单字节读写。
回复

举报

10#
ID:57657 发表于 2023-11-16 22:01 | 只看该作者
wulin 发表于 2023-11-16 19:04
读、写、清除EEPROM是在ISP环境操作。试试读、写、清除EEPROM时关闭总中断。EA=0;。完成后再开总中断。

EEPROM可以使用unsigned char/int/long code指针(汇编MOVC指令)读取,无需配置什么ISP寄存器。
回复

举报

11#
ID:712072 发表于 2023-11-17 08:44 | 只看该作者
coody_sz 发表于 2023-11-16 20:43
程序问题,EEPROM只能单字节读写。

那怎么读写16位数据,我现在就是将16位数据分成两个字节读取,不就相当于单字节读取吗?
回复

举报

12#
ID:712072 发表于 2023-11-20 16:03 | 只看该作者
     现在算是解决了这个问题了,改了一下程序,将eeprom读写程序从8位改为16位就可以正确读取数字超过640的。
     至于8位的为什么不可以,后续我再查找一下问题。

1.png (59.37 KB, 下载次数: 50)

1.png
回复

举报

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

本版积分规则

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

Powered by 单片机教程网

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