- void tim0_isr()interrupt 1 using 1//定時器0中斷服務函數
- {
- irtime++;
- }
- void ex0_isr()interrupt 0 using 0//外部中斷0服務函數
- {
- static unsigned char i;
- static bit startflag;
- if(startflag)
- {
- if(irtime<63&&irtime>=33)//引導碼TC9012的頭碼
- i=0;
- irdata=irtime;
- irtime=0;
- i++;
- if(i==33)
- {
- irok=1;
- i=0;
- }
- }
- else{irtime=0;startflag=1;}
- }
- void TIM0init()//定時器0初始化
- {
- TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
- TH0=0x00;//reload value
- TL0=0x00;//initial value
- ET0=1;//開總中斷
- TR0=1;
- }
- void EX0init()
- {
- IT0=1;//Configure interrupt 0 for falling edge on/INT0(P3.2)
- EX0=1;//Enable EX0 Interrupt
- EA=1;
- }////////////////////////////////////////////////////////////////////////
- void lrcordpro()//紅外碼值處理函數(關鍵函數)
- {
- unsigned char i,j,k=1;
- unsigned char cord,value;
- for(i=0;i<4;i++)
- {/////////////////////處理4個字節
- for(j=1;j<=8;j++)
- {//////////////////處理1個字節8位
- cord=irdata[k];
- value=value>>1;
- if(cord>7)value=value|0x80;//大于某值為1
- k++;
- }
- IRcord=value;
- value=0;
- }
- irpro_ok=1;//處理完畢標志位置1
- }
- void lcd_delay(uchar ms)/*LCD1602延時*/
- {
- uchar j;
- while(ms--)
- {
- for(j=0;j<250;j++)
- {;}
- }
- }
- 我想問一下這個定時器0在什么時候中斷,以及中斷的時間并且引導碼那部分能幫我解答一下嗎
|