这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 探讨一下STC8G2K64S4EEPROM读写的异常问题

共1条 1/1 1 跳转至

探讨一下STC8G2K64S4EEPROM读写的异常问题

工程师
2021-06-10 22:06:59     打赏

大家晚上,哪位大侠帮我看下代码,搞不懂 STC8G2K64S4 (主频:24Mhz)这个芯片的eeprom起始地址如何确定,是从0000开始吗。我设置0000也没成功。。


下载器里面设置eeprom为4K。


我的源码如下:


void IapIdle()

{

        IAP_CONTR = 0; //关闭 IAP 功能

        IAP_CMD = 0; //清除命令寄存器

        IAP_TRIG = 0; //清除触发寄存器

        IAP_ADDRH = 0x80; //将地址设置到非 IAP 区域

        IAP_ADDRL = 0;

}


char IapRead(int addr)

{

        char dat;

        IAP_CONTR = 0x81; //使能 IAP

        IAP_TPS = 24; //设置擦除等待参数 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;

}


void IapProgram(int addr, char dat)

{

        IAP_CONTR = 0x81; //使能 IAP

        IAP_TPS = 24; //设置擦除等待参数 12MHz

        IAP_CMD = 2; //设置 IAP 写命令

        IAP_ADDRL = addr; //设置 IAP 低地址

        IAP_ADDRH = addr >> 8; //设置 IAP 高地址

        IAP_DATA = dat; //写 IAP 数据

        IAP_TRIG = 0x5a; //写触发命令(0x5a)

        IAP_TRIG = 0xa5; //写触发命令(0xa5)

        _nop_();

        IapIdle(); //关闭 IAP 功能

}

void IapErase(int addr)

{

        IAP_CONTR = 0x81; //使能 IAP

        IAP_TPS = 24; //设置擦除等待参数 12MHz

        IAP_CMD = 3; //设置 IAP 擦除命令

        IAP_ADDRL = addr; //设置 IAP 低地址

        IAP_ADDRH = addr >> 8; //设置 IAP 高地址

        IAP_TRIG = 0x5a; //写触发命令(0x5a)

        IAP_TRIG = 0xa5; //写触发命令(0xa5)

        _nop_(); //

        IapIdle(); //关闭 IAP 功能

}

void main()

{

...............................................

        nz_shi = IapRead(0X0200); //P1=0x12

while()

{

        IapErase(0X0200);

        apProgram(0X0200, nz_shi);

}

}






关键词: STC8G2K64S4     EEPROM    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]