00001 /************************************************** 00002 *Function: main service 00003 * 00004 * File: main.c 00005 * Author: Book Chen 00006 * 2008.08.08 00007 **************************************************** 00008 */ 00009 #include "..\inc\includes.h" 00010 00011 void F_SysPowerOnInit() LargeReentrant; 00012 00013 void main(void){ 00014 INT16U i; 00015 00016 for(i=0;i<=10000;i++); // delay for power stable 00017 // hardware and driver initial 00018 F_SysPowerOnInit(); // 8051 sfr initial 00019 F_TimePowerOnInit(); // set 8051 timer0,1,2 00020 F_UartPowerOnInit(); // set 8051 uart function 00021 F_IrdaPowerOnInit(); // set irda function 00022 F_ShellPowerOnInit(); 00023 F_LcmPowerOnInit(); 00024 F_LedPowerOnInit(); 00025 F_MotorPowerOnInit(); 00026 F_RtcPowerOnInit(); 00027 00028 EA=1; 00029 while(1){ 00030 F_ShellSvc(); 00031 F_RtcSvc(); 00032 F_LcmSvc(); 00033 F_MotorSvc(); 00034 F_LedSvc(); 00035 //F_IrdaSvc(); 00036 } 00037 } 00038 void F_SysPowerOnInit(void) LargeReentrant{ 00039 P0=0xff; // 8051 initial all this sfrs as power on 00040 P2=0xff; // I prefer to initial them myself,again. 00041 //SP=0x00; 00042 //DPL=0x00; 00043 //DPH=0x00; 00044 PCON=0x00; 00045 TCON=0x00; 00046 T2CON=0x00; 00047 TMOD=0x00; 00048 TL0=0x00; 00049 TL1=0x00; 00050 TH0=0x00; 00051 TH1=0x00; 00052 //P1=0x00; 00053 SCON=0x00; 00054 //SBUF=0x00; 00055 //P2=0x00; 00056 IE=0x00; 00057 //P3=00 ; 00058 IP=0x00; 00059 //PSW=0x00; 00060 //ACC=0x00; 00061 //B=0x00; 00062 } 00063 //============= 00064 // isr routines...6 interrupt source 00065 // external int 0,1 00066 // timer 0,1,2 00067 // serial 00068 //============= 00069 void IsrExternalInt0(void) interrupt 0 00070 { 00071 // restart timer 0 for irda 00072 TR1=0; // Stop timer0 00073 ET1=0; // Disable timer0 interrupt 00074 IrdaCtrl.unTime.uc[0]=TH1; // Save timer0 00075 IrdaCtrl.unTime.uc[1]=TL1; // Save timer0 00076 TH1=0; // Initial timer0 00077 TL1=10; // Initial timer0...for time start from neg_edge 00078 TR1=1; // Restart timer0 00079 ET1=1; // Enable timer0 interrupt 00080 // handle irda signal 00081 if(IrdaCtrl.Status&cIrdaSignalDetect){ // Check if irda signal in coming 00082 F_IrdaGetSignalType(); // Translate time value to bit type 00083 IrdaCtrl.Status|=cIrdaSignalinput; // flag of irda has signal 00084 F_IrdaBitProc(); // Process ir bit signal 00085 } 00086 else IrdaCtrl.Status|=cIrdaSignalDetect; // Irda signal coming flag 00087 } 00088 void IsrTimer0(void) interrupt 1 00089 { 00090 TR0=0; // Stop timer0 00091 //TH0=(65536-9216)/256; // 10ms=(12/11.0592M)*clock...clock=9216 00092 //TL0=(65536-9216)%256; // 10ms=(12/11.0592M)*clock...clock=9216 00093 TH0=(65536-921)/256; // 1ms=(12/11.0592M)*clock...clock=921 00094 TL0=(65536-921)%256; // 1ms=(12/11.0592M)*clock...clock=921 00095 //TH0=(65536-4000)/256; // 10ms=(12/11.0592M)*clock...clock=9216 00096 //TL0=(65536-4000)%256; // 10ms=(12/11.0592M)*clock...clock=9216 00097 TR0=1; // Start timer0 00098 if(StepMotorCtrl.Timer!=0) StepMotorCtrl.Timer--; 00099 if(ShellCtrl.Timer!=0) ShellCtrl.Timer--; 00100 if(LedCtrl.Timer!=0) LedCtrl.Timer--; 00101 if(RtcCtrl.Timer!=0) RtcCtrl.Timer--; 00102 if(LcmCtrl.Timer!=0) LcmCtrl.Timer--; 00103 } 00104 void IsrExternalInt1(void) interrupt 2 // Not use,yet. 00105 { 00106 } 00107 void IsrTimer1(void) interrupt 3 00108 { 00109 TR1=0; // stop timer1 00110 ET1=0; // Disable timer1 interrupt 00111 IrdaCtrl.Status&=~cIrdaSignalDetect; // Ir signal is too long to be a signal 00112 } 00113 void IsrSerialint(void) interrupt 4 00114 { 00115 if(RI==1){ 00116 RI=0; // Clear uart rx interrupt flag 00117 F_UartKeyInPut(SBUF); // Put receive byte to uart rx buffer 00118 } 00119 if(TI==1){ 00120 TI=0; // Clear uart tx interrupt flag 00121 bUartTransfer=0; // Clear uart tx f/w flag 00122 } 00123 } 00124 void IsrTimer2(void) interrupt 5 // Not use,yet. 00125 { 00126 TF2=0; // TF2 is f/w clear 00127 } 00128 00129