#include "..\Lib\8000a.h" #include "smmi_com.h" #define _EEP_Block_System 8 #define _ModbusRTU_Slave 3 #define _StepNormal 0 #define _StepReset 1 int iSMMI_Current_Step=0; unsigned long sw_SMMI_Enter; int iSMMI_Timeout=3000; int iOldKey; int iNewKey; int b=1; typedef struct COM_DATA { unsigned long baud; char databit; char parity; char stopbit; unsigned char sum; } *pCOM_DATA,COM_DATA; COM_DATA ComData_Temp; int SMMI_Com_CheckIn() { int i, iValue; unsigned char sum; char *ptr; if((GetTimeTicks()-sw_SMMI_Enter)>iSMMI_Timeout) { switch(iSMMI_Current_Step) { case _StepNormal: iOldKey=*KeyStatus; if(iOldKey==0x09) { Show5DigitLedSeg(1,0x77); //R Show5DigitLed(2,0xe); //E Show5DigitLed(3,5); //S Show5DigitLed(4,0xe); //E Show5DigitLedSeg(5,0x70); //T iSMMI_Current_Step++; } break; case _StepReset: if(iOldKey==*KeyStatus) { for(i=0;i<10;i++) { if(b) { Show5DigitLed(1,16); Show5DigitLed(2,16); Show5DigitLed(3,16); Show5DigitLed(4,16); Show5DigitLed(5,16); b=0; } else { Show5DigitLedSeg(1,0x77); //R Show5DigitLed(2,0xe); //E Show5DigitLed(3,5); //S Show5DigitLed(4,0xe); //E Show5DigitLedSeg(5,0x70); //T b=1; } RefreshWDT(); Delay(200); } if(*KeyStatus==0x09) { ComData_Temp.baud=115200L; ComData_Temp.databit=8; ComData_Temp.parity=0; ComData_Temp.stopbit=1; sum=0; ptr=(char *)&ComData_Temp; for(i=0;i<7;i++) sum+=*ptr++; ComData_Temp.sum=sum; iValue=200;//timeout RefreshWDT(); EE_WriteEnable(); for(i=1;i<=4;i++) { EE_MultiWrite(0,(i-1)<<4,sizeof(COM_DATA),(char *)&ComData_Temp); EE_MultiWrite(_EEP_Block_System,(i-1)*4+0x11,2,(char*)&iValue); EE_RandomWrite(_EEP_Block_System,(i-1)*4+0x10,_ModbusRTU_Slave); } EE_WriteProtect(); Show5DigitLed(1,16); // Show5DigitLed(2,0xb); //b Show5DigitLed(3,0); //o Show5DigitLed(4,0); //o Show5DigitLedSeg(5,0x70); //T for(;;) {} } else { printCom1("Reset abort\n\r"); Show5DigitLed(1,0xa); //A Show5DigitLed(2,0xb); //b Show5DigitLed(3,0); //o Show5DigitLedSeg(4,0x77); //R Show5DigitLedSeg(5,0x70); //T iOldKey=0; iSMMI_Current_Step=0; } } else { iOldKey=0; iSMMI_Current_Step=0; } break; } sw_SMMI_Enter=GetTimeTicks(); } return iSMMI_Current_Step; }