最近寫一個需要保存參數的程序,IC用STC15W408AS,10個扇區都用到了,實測時經常出現數據丟失的現象,請問有沒有什么辦法可以保證數據的準確性
void key_handle()
{
uchar t,e1,e2,limit;
e1 = dcx(0x0020);
e2 = dcx(0x0220);
while(1)
{
if(KEY_1 == 0)
{
Delay(2);
if(KEY_1 == 0)
{
while(KEY_1 == 0);
if(limit<++e1) e1 = 0;
}
}
if(KEY_2 == 0)
{
Delay(2);
if(KEY_2 == 0)
{
while(KEY_2 == 0);
if(limit<--e1) e1 = limit;
}
}
display1(e1);
}
uchar dcx(uint addr)
{
uchar dat;
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_READ;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
_nop_();
dat = IAP_DATA;
Q0();
return dat;
}
void cc(uint addr)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_ERASE;
IAP_ADDRL = addr;
IAP_ADDRH = addr>>8;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
_nop_();
Q0();
}
void xcx(uint addr,uchar dat)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_PROGRAM;
IAP_ADDRL = addr;
IAP_ADDRH = addr>>8;
IAP_DATA = dat;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
_nop_();
Q0();
}
void Q0()
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0x80;
IAP_ADDRL = 0;
}
大概就是按鍵設置參數然后保存這樣,連續對多個參數進行調整后保存會出現數據丟失或者數據錯誤 的情況,網上說在每次寫入后都校驗一次,不過在實際使用中不同參數的讀寫保存之間的操作間隔非常小,11.059的晶振不知道能不能在這樣極短的間隔內跑完這一系列的語句,不知道大佬們有沒有什么好的EEPROM讀寫過程可以分享分享,虛心請教,謝謝
|