标题: 关于STC8A8H64D4单片机eeprom读写问题 [打印本页]

作者: 395164965    时间: 2023-11-16 10:47
标题: 关于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

作者: 395164965    时间: 2023-11-16 11:25
以下是eeprom的程序

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

3.png

作者: wulin    时间: 2023-11-16 15:06
代码不全,猜不出来。单片机本身不会发生这样的问题,只能是楼主的代码有问题。
作者: yzwzfyz    时间: 2023-11-16 15:23
注意以下:
1、表达一个数所用的字节数N,即一个数要分成N个字节读、写。
2、EEPROM只能写0不能写1(1是擦除后自然形成的,例:可以将11110000,改成00110000,不可以改成11110011)。
3、先擦后写,已擦了不用再擦(擦的目的是改0为1)。
4、关注擦除的范围(当心擦到其它数据,擦是按页进行的,即一擦一大片。)
作者: lkc8210    时间: 2023-11-16 17:01
试试
ledld[0] = ispdu(0x0010);ledld[0] = ledld[0] << 8 | ispdu(0x0011);

作者: 395164965    时间: 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

作者: 395164965    时间: 2023-11-16 17:58
lkc8210 发表于 2023-11-16 17:01
试试
ledld[0] = ispdu(0x0010);ledld[0] = ledld[0]

这种形式也试过,也是不行的
作者: wulin    时间: 2023-11-16 19:04
本帖最后由 wulin 于 2023-11-17 06:35 编辑
395164965 发表于 2023-11-16 17:57
以下是算是完整代码,后续会加其它功能,但现在卡在这个eeprom中

读、写、清除EEPROM是在IAP方式操作。试试读、写、清除EEPROM时关闭总中断。EA=0;。完成后再开总中断。
作者: coody_sz    时间: 2023-11-16 20:43
程序问题,EEPROM只能单字节读写。
作者: npn    时间: 2023-11-16 22:01
wulin 发表于 2023-11-16 19:04
读、写、清除EEPROM是在ISP环境操作。试试读、写、清除EEPROM时关闭总中断。EA=0;。完成后再开总中断。

EEPROM可以使用unsigned char/int/long code指针(汇编MOVC指令)读取,无需配置什么ISP寄存器。
作者: 395164965    时间: 2023-11-17 08:44
coody_sz 发表于 2023-11-16 20:43
程序问题,EEPROM只能单字节读写。

那怎么读写16位数据,我现在就是将16位数据分成两个字节读取,不就相当于单字节读取吗?
作者: 395164965    时间: 2023-11-20 16:03
     现在算是解决了这个问题了,改了一下程序,将eeprom读写程序从8位改为16位就可以正确读取数字超过640的。
     至于8位的为什么不可以,后续我再查找一下问题。

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

1.png





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1