manzunzu 发表于 2024-3-25 10:19:34

STC8H2K17和STC8H1K28的EEPROM不一样吗

本帖最后由 国学芯用 于 2024-3-25 11:43 编辑

之前用STC8H1K28一直好好的,搞了几片STC8H2K17U-45I-TSSOP20,EEPROM读出来的就不对了,
反复测试发现Memory Model里面选择DATA读取正常,使用XDATA时STC8H2K17U-45I-TSSOP20就不正常了。



manzunzu 发表于 2024-3-25 10:23:09

unsigned char IapRead(int addr)//读
{
    unsigned char xdata dat;

    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = FOSC / 1000000;                               //设置等待参数12MHz
    IAP_CMD = 1;                              //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
    dat = IAP_DATA;                           //读IAP数据
    IapIdle();                                  //关闭IAP功能

    return dat;
}

manzunzu 发表于 2024-3-25 10:28:44

void IapIdle()//关闭IAP功能
{
    IAP_CONTR = 0;                              //关闭IAP功能
    IAP_CMD = 0;                              //清除命令寄存器
    IAP_TRIG = 0;                               //清除触发寄存器
    IAP_ADDRH = 0x80;                           //将地址设置到非IAP区域
    IAP_ADDRL = 0;
}

manzunzu 发表于 2024-3-25 10:33:29

Program Size: data=152.6 xdata=111 code=10571

21cnsound 发表于 2024-3-25 11:38:45

EEPROM读函数中强制使用的XDATA,所以keil选small模式还是large模式对这个函数没影响。

manzunzu 发表于 2024-3-25 16:21:22

21cnsound 发表于 2024-3-25 11:38
EEPROM读函数中强制使用的XDATA,所以keil选small模式还是large模式对这个函数没影响。 ...

8H1K28怎么选都没事,8H2K17就不行了,一样的程序

21cnsound 发表于 2024-3-25 16:54:03

keil中用small模式,所用代码中定义的变量逐个改为XDATA,看问题出在哪里?

manzunzu 发表于 2024-3-25 18:01:51

我是用官方提供的modbus源码和上面那两个函数组合到一起测试的,估计芯片的问题,毕竟stc8H1K28一点问题没有

小飞侠 发表于 2024-3-25 19:37:49

可以硬件仿真一下看看,估计芯片的问题不大

manzunzu 发表于 2024-3-26 08:11:14

{:4_167:},我小白,不会仿真,写代码基本上ctrl+c,ctrl+v,还是官方看到测试一下吧{:4_167:}
页: [1] 2 3
查看完整版本: STC8H2K17和STC8H1K28的EEPROM不一样吗