51單片機:定時器

定時器:單條指令時間(us) = 1/單片機頻率*單條指令時鐘週期   ide

TH0和TL0共16位,最多隻能表示65535,因此要設定一個Base值,再利用循環多計數幾回函數

好比0.002s:0.02 = (1/11.0592M * 12)*指令個數,指令個數 = 0.02(1/11.0592M * 12) = 0.018432it

由於頻率用的是M,因此結果0.018432*1000000 = 18432class

使用16位寄存器的狀況下,TH0和TL初始值:65536 - 18432 = 47104 = 0xB8 00軟件

編寫定時器延時函數:
循環

#include sbit LED = P0^0;

void Delay(unsigned int sec)
{
		unsigned int second_base;    
		unsigned int conter;             //計數次數

		second_base = 2;                //Base,2ms*100 = 2s
		conter = sec*100 / second_base; //轉換成秒
   
		TL0 = 0x00;                    //16位計數器低8位,設置
		TH0 = 0xB8;		       //高8位	

		while (conter)
		{
			if (1 == TF0)           //當高8位溢的時候,TF0標誌位被置1
				{
					TF0 = 0;            //軟件清0TF位,並給定時器賦基值
					TL0 = 0xE0;
					TH0 = 0xB1;
					conter = conter - 1;
				}
		 }
	}

void main()
{
	TR0 = 1;        //定時器0啓動控制位,1表明計時器0啓動
	TMOD = 0x01;    //指定計數器爲16位模式

	LED = 0;
	while(1)
	{
		Delay(2);    //延時2S
		LED = ~LED;	
	}
}


 



8位:255硬件

16位:65535定時器

SFR地址:若是頭文件沒有定義TH0,須要自已定義TH0=0x8Cdi

TH0:高8位。文件

TL0:低8位,若是是16位,則TL0溢出後,TH0+1


定時器0打開:TR0 = 1;

TF0:溢出後,硬件自動置1,經過軟件或硬件清0



GATE:爲1時,定時器開始計時,能夠用來計測脈衝寬度,C/T:爲1時使用定時器



定時器經常使用兩種模式:

TMOD M1/M0模式爲10時,自動重裝:TL0溢出後,TL0重裝TH0的值,而且TF0置1

TMOD M1/M0模式爲01時,16位定時器:TL0溢出後,TH0加1

相關文章
相關標籤/搜索