根據Holtek _ c _ compiler _ V3 _ FAQ (950)的描述。pdf,v3不保證編譯後的指令符合EEPROM寫入順序。根據BS86的數據表,雷恩和WR必須符合順序。
我的編譯指令是LSET·雷恩和LSET·WR,這是個問題。芯片需要的東西已經設定好了。
解決方法是根據官方的FAQ描述。
“5.5如何使用寫EEPROM有限制的MCU(連續設置wren,wr,flag)?
V3寫EEPROM?"
這是代碼
//參考?去哪?Holtek_C_Compiler_V3_FAQ(950)。可移植文檔格式文件的擴展名(portable document format的縮寫)
typedef?結構{
未簽名?夏爾?bit0?:?1;
未簽名?夏爾?bit1?:?1;
未簽名?夏爾?bit2?:?1;
未簽名?夏爾?bit3?:?1;
未簽名?夏爾?bit4?:?1;
未簽名?夏爾?bit5?:?1;
未簽名?夏爾?bit6?:?1;
} iar _ bits
DEFINE_SFR(iar_bits,?iar1,?0x 02);
#定義?IAR 1 _ 3 IAR 1 . bit 3
#定義?IAR 1 _ 2 IAR 1 . bit 2
#定義?IAR 1 _ 1iar 1 . bit 1
#定義?IAR 1 _ 0ia r1 . bit 0...
uint8_t?bkup
_eea?=?u8Addr
_eed?=?u8NewData
_mp1l?=?0x40
bkup=?_ MP 1h;
_mp1h?=?0x 01;
_emi?=?0;
iar1_3?=?1;
iar1_2?=?1;
_emi?=?1;
while(iar1_2)
{
}
_iar1?=?0;
_mp1h?=?bkup
...官方解決方案生成的代碼與數據手冊中的代碼相同:
;129 IAR 1 _ 3?=?1;
0D0D 3182 set?__iar1[0].3 "這裏曾經是LSET?鷦鷯
;130 IAR 1 _ 2?=?1;
0D0E 3102 set?__iar1[0].2 "這裏曾經是LSET?華氏反應(Wassermann reaction)