这是我的EEPROM设置,招贴后看了大神们说尝试了增加TRIG,并且再执行IAP_TRIG前关闭总中断,都尝试了之后还是在重新插拔usb后值丢失
- //清除寄存器指令
- void Iapclearcommand()
- {
- IAP_CONTR = 0;
- IAP_CMD = 0;
- IAP_TRIG = 0;
- IAP_ADDRH = 0X80;
- IAP_ADDRL = 0;
- }
-
- //读操作
- char Iapread(int address)
- {
- char dat = 0;
- IAP_CONTR = 0x80;
- IAP_TPS = 24;
- IAP_CMD = 1;
- IAP_ADDRL = address;
- IAP_ADDRH = address >> 8;
- //EA = 0;
- IAP_TRIG = 0X5A;
- IAP_TRIG = 0XA5;
- IAP_TRIG = 0X5A;
- IAP_TRIG = 0XA5;
- //EA = 1;
- dat = IAP_DATA;
- Iapclearcommand();
-
- return dat;
- }
-
- //写操作
- void Iapwrite(int addr , char dat)
- {
-
- IAP_CONTR = 0X80;
- IAP_TPS = 24;
- IAP_CMD = 2;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- IAP_DATA = dat;
- //EA = 0;
- IAP_TRIG = 0X5A;
- IAP_TRIG = 0XA5;
- IAP_TRIG = 0X5A;
- IAP_TRIG = 0XA5;
- //EA = 1;
- Iapclearcommand();
- }
-
- //擦除操作
- void IapErase(int addr)
- {
- IAP_CONTR = 0X80;
- IAP_TPS = 24;
- IAP_CMD = 3;
- IAP_ADDRL = addr;
- IAP_ADDRH = addr >> 8;
- EA = 0;
- IAP_TRIG = 0X5A;
- IAP_TRIG = 0XA5;
-
- EA = 1;
- Iapclearcommand();
- }
复制代码
下面的是我用usb hound捕捉的输入报告
上面的后两位是对应不同扇区的两个eeprom地址的值,再官方的上位机我设置的是FF
在我自己做的上位机可以改变对应存储的eeprom地址的值,再usb hound中也会显示出来
这是我的stc8h下位机部分代码,是在收到对应上位机的按钮时执行的 操作,通过bus hound可以看到已经更改了对应的值,为什么在重新上电之后,对应eeprom地址的值就回到默认的0xff了呢?
- switch (command)
- {
- case 0x31 :
- usb_write_reg(OUTCSR1, 0);
- eepmin = UsbOutBuffer[1];
- //mindrive = (float)eepmin / 100 ;
- IapErase(0x20);
- Iapwrite(0x20 ,eepmin);
-
- break;
-
- case 0x32:
- usb_write_reg(OUTCSR1, 0);
- eepmax = UsbOutBuffer[1];
- //
- IapErase(0x02C8);
- Iapwrite(0x02C8 ,eepmax);
- //maxdrive = (float)UsbOutBuffer[1] / 100;
-
- break;
-
- default:
- break;
- }
复制代码
求各位大神指点小弟! 
|