求助!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地址,结果一样,
/************* 本程序功能说明 **************
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 11:25
/************* 本程序功能说明 **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...
谢谢,我再去研究一下,谢谢梁工 梁工 发表于 2023-3-26 11:25
/************* 本程序功能说明 **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...
找到原因了,问题已解决!!:handshake:handshake 代码人生 发表于 2023-3-26 13:30
找到原因了,问题已解决!!
说说原因,大家取点经验。 本帖最后由 代码人生 于 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,问题解决:)
u8范围是 0-256=======好像是 神农鼎 发表于 2023-3-26 13:56
u8范围是 0-256=======好像是
对,是255 我打错了:lol,马上改 代码人生 发表于 2023-3-26 13:47
关键是在127这个数上,我用的都是u8和u16,u8范围是 0-255
驱动里都是int 和 char ,char就是 -128~+127...
所以,变量要对齐,函数的实参与形参要对齐。
页:
[1]