找回密码
 立即注册
查看: 1694|回复: 8

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-17 13:57:41

19

主题

51

回帖

491

积分

中级会员

积分
491
发表于 2023-3-26 09:09:04 | 显示全部楼层 |阅读模式
本帖最后由 代码人生 于 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地址,结果一样,



回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 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[]={"去年今日此门中,人面桃花相映红。人面不知何处去,桃花依旧笑春风。"};

STC8H系列-EEPROM相关程序.rar (81.56 KB, 下载次数: 153)


  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-17 13:57:41

19

主题

51

回帖

491

积分

中级会员

积分
491
发表于 2023-3-26 12:29:41 | 显示全部楼层
梁*** 发表于 2023-3-26 11:25
/*************        本程序功能说明        **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...

谢谢,我再去研究一下,谢谢梁工
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-17 13:57:41

19

主题

51

回帖

491

积分

中级会员

积分
491
发表于 2023-3-26 13:30:26 | 显示全部楼层
梁*** 发表于 2023-3-26 11:25
/*************        本程序功能说明        **************
STC8H STC8C系列EEPROM通用测试程序.
请先别修改程序, 直接 ...

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

点评

说说原因,大家取点经验。  详情 回复 发表于 2023-3-26 13:34
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-3-26 13:34:26 | 显示全部楼层
代码*** 发表于 2023-3-26 13:30
找到原因了,问题已解决!!

说说原因,大家取点经验。
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-17 13:57:41

19

主题

51

回帖

491

积分

中级会员

积分
491
发表于 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 15:26
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-3-26 13:56:18 | 显示全部楼层
u8范围是 0-256=======好像是 [0 : 255]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-01-17 13:57:41

19

主题

51

回帖

491

积分

中级会员

积分
491
发表于 2023-3-26 13:58:23 | 显示全部楼层
神*** 发表于 2023-3-26 13:56
u8范围是 0-256=======好像是 [0 : 255]

对,是255 我打错了:lol,马上改
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-3-26 15:26:39 | 显示全部楼层
代码*** 发表于 2023-3-26 13:47
关键是在127这个数上,我用的都是u8和u16,u8范围是 0-255
驱动里都是int 和 char ,char就是 -128~+127  ...

所以,变量要对齐,函数的实参与形参要对齐。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:32 , Processed in 0.134191 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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