天天看點

51單片機(二十二)—— 定時器2功能測試

        在本文中,我們對51單片機的定時器2的功能進行測試。包含兩個實驗,一個是定時器2遞增計數功能的測試,另一個是定時器2遞減計數功能的測試。

實驗1:遞增計數

        這個實驗使用了定時器2的16位自動重裝模式的遞增計數功能。RCAP2H和RCAP2L寄存器内的值是重新加載的值。當TH2和TL2的計數值溢出時,将RCAP2H和RCAP2L寄存器内的值裝載到TH2和TL2中重新計數。定時器2的初始化代碼如下所示

void init_T2(void)
{
	T2MOD= 0x00;	  //定時器2遞增計數,禁止輸出		     
	CP_RL2=0;         //16位自動重裝模式
	RCAP2H=(65536-50000)/256;	  //給RCAP2H和RCAP2L賦初值,
	                              //計數器由15536開始計數,到65535溢出
	RCAP2L=(65536-50000)%256;    //外部晶振為12MHz,對應的延時時間為50ms
	EA=1;            //總中斷打開
	ET2=1;           //定時器中斷打開
	TR2=1;           //定時器開關打開
}
           

計時周期為50000個周期,每個周期為1us,是以溢出周期為50ms,中斷處理函數如下所示。

void T2_ISR(void) interrupt 5 
{
	TF2=0;    //清除标志位
	i+=1;
	if(i>=10)  //計時10次改變一次燈的狀态,燈閃的頻率為1Hz
	{
		i=0;
		LED=~LED;        //LED的值取反,改變燈的狀态。
	}
}
           

        在中斷中,清除TF2中斷标志位,并使用i來計數,每10次中斷改變一次LED狀态。

        将程式燒寫到單片機中,看到實驗現象,LED1以1秒一次的頻率閃爍。

實驗2:遞減計數

         這個實驗使用了定時器2的16位自動重裝模式的遞減計數功能。定時器2的T2EX引腳與P1.1引腳複用。将T2MOD寄存器中的DCEN位置1,并且将T2EX引腳接地,則定時器2為遞減計數功能。定時器2由0xffff計數,當與計數器TH2和TL2與RCAP2H和RCAP2L的值相同是,産生中斷。定時器2初始化代碼如下所示

void init_T2(void)
{
	T2MOD= 0x01;	  //定時器2遞減計數,禁止輸出		     
	CP_RL2=0;         //16位自動重裝模式
	RCAP2H=(65535-50000)/256;	  //給RCAP2H和RCAP2L賦初值,
	                              //計數器由65535開始遞減計數,到15535産生中斷
	RCAP2L=(65535-50000)%256;    //外部晶振為12MHz,對應的延時時間為50ms
	EA=1;            //總中斷打開
	ET2=1;           //定時器中斷打開
	TR2=1;           //定時器開關打開
}
           

        中斷處理代碼與實驗1是相同的,将程式燒寫到單片機中,看到實驗現象,LED1以1秒一次的頻率閃爍。

繼續閱讀