代码人生 发表于 2023-3-26 09:09:04

求助!STC8H1K16 eeprom写入和读出数据不一致

本帖最后由 代码人生 于 2023-3-26 10:00 编辑

STC8H1K16 eeprom写入和读出,数值超过127就不一致,高8位全是0xff,低8位正常,不管是通过串口改写,还是按键改写,都是这样
不知道是哪里出了问题

例如:写入u16   0x00f0 读出是 0xfff0
eeprom驱动是直接用的官网例程
主频 :12M
//=============================================
u16 AOdat[];
#define MaxAO 150
//=============================================
//写入程序:
//扇区擦除 IAP_ADDRESS=0
    IapErase(IAP_ADDRESS);   
//写入所有数据
    for(i=0;i<MaxAO;i++)
    {      
      IapProgram(i*2+0 , (u8)(AOdat【i】/256));    //H
      IapProgram(i*2+1 , (u8)(AOdat【i】%256)); //L      
    }
//=============================================
//读出程序:
u16 i;
    //读出EEPROM全部数据
       for(i=0;i<MaxAO;i++)
    {   
      AOdat【i】=IapRead(2*i)*256+IapRead(2*i+1);       
    }
//=============================================
更改IAP_ADDRESS地址,结果一样,



梁工 发表于 2023-3-26 11:25:52

/*************        本程序功能说明        **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接下载里面的"UART-EEPROM.hex"测试. 下载时选择主频11.0592MHZ.
PC串口设置: 波特率115200,8,n,1.
对EEPROM做扇区擦除、写入64字节、读出64字节的操作。
命令例子:
E 0
   对EEPROM进行扇区擦除操作,E表示擦除, 数字0为0扇区(十进制, 0~126, 看具体IC).
W 0
   对EEPROM进行写入操作,W表示写入, 数字0为0扇区(十进制, 0~126, 看具体IC). 从扇区的开始地址连续写64字节.
R 0
   对EEPROM进行IAP读出操作,R表示读出, 数字0为0扇区(十进制, 0~126, 看具体IC). 从扇区的开始地址连续读64字节.
M 0
   对EEPROM进行MOVC读出操作(操作地址为扇区*512+偏移地址),数字0为0扇区(十进制, 0~126, 看具体IC). 从扇区的开始地址连续读64字节.

注意:为了通用,程序不识别扇区是否有效,用户自己根据具体的型号来决定。

工程文件:
EEPROM.c
main.c
日期: 2018-6-10

******************************************/
//写入的数据:
u8        code        T_Strings[]={"去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。"};




代码人生 发表于 2023-3-26 12:29:41

梁工 发表于 2023-3-26 11:25
/*************        本程序功能说明        **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...

谢谢,我再去研究一下,谢谢梁工

代码人生 发表于 2023-3-26 13:30:26

梁工 发表于 2023-3-26 11:25
/*************        本程序功能说明        **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...

找到原因了,问题已解决!!:handshake:handshake

梁工 发表于 2023-3-26 13:34:26

代码人生 发表于 2023-3-26 13:30
找到原因了,问题已解决!!

说说原因,大家取点经验。

代码人生 发表于 2023-3-26 13:47:49

本帖最后由 代码人生 于 2023-3-26 13:58 编辑

梁工 发表于 2023-3-26 13:34
说说原因,大家取点经验。
关键是在127这个数上,我用的都是u8和u16,u8范围是 0-255
驱动里都是int 和 char ,char就是 -128~+127 。
大于127会被驱动认为是负数 0x00 就变成0xff了
折腾了一晚上,加一上午,终于找到问题所在了,驱动里全部换成u8和u16,问题解决:)

神农鼎 发表于 2023-3-26 13:56:18

u8范围是 0-256=======好像是

代码人生 发表于 2023-3-26 13:58:23

神农鼎 发表于 2023-3-26 13:56
u8范围是 0-256=======好像是

对,是255 我打错了:lol,马上改

梁工 发表于 2023-3-26 15:26:39

代码人生 发表于 2023-3-26 13:47
关键是在127这个数上,我用的都是u8和u16,u8范围是 0-255
驱动里都是int 和 char ,char就是 -128~+127...

所以,变量要对齐,函数的实参与形参要对齐。
页: [1]
查看完整版本: 求助!STC8H1K16 eeprom写入和读出数据不一致