- 打卡等级:初来乍到
- 打卡总天数:1
- 最近打卡:2026-04-13 10:33:27
中级会员
- 积分
- 215
|
各位,请教一下。
我现在负责一个程序,使用的芯片是STC8G2K64S4,主频是24MHz。需要将一些数据写入芯片内部的EPROM。
IapErase(200);
IapProgram(200,77);
IapProgram(201,88);
TestArrC[0]=IapRead(200);
TestArrC[1]=IapRead(201);
MacChannel=12345;
以上是测试代码。此时代码工作正常,第4,5行读出的数据是正常的。
但如果把前面三行屏蔽掉,代码如下
// IapErase(200);
// IapProgram(200,77);
// IapProgram(201,88);
TestArrC[0]=IapRead(200);
TestArrC[1]=IapRead(201);
MacChannel=12345;
则读出的两个数据都是0xFF。按我的理解,数据写入EPROM后,重新加电,读出的数据应该是之前写入的。
请问这是哪里的问题,谢谢。
以下是我的代码,基本都是复制你们的例程。
void IapIdle(){
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
}
u8 IapRead(int addr){
u8 dat;
IAP_CONTR = 0x80; //使能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 = 0x80; //使能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 = 0x80; //使能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功能
}
|
|