關鍵字:單片機定時器
8052單片機T2定時器用法詳解,定時器案例:
1、要精確定時,必須使用定時器的自動裝載方式。本實驗使用T2定時器,讓它工作在16bit自動
裝載方式,這時,有另一個位置專門裝著16位預裝載值,當T2溢出時,預裝載值立即被裝入,
這就保證了精確定時。
2、T2定時器是一個16位定時器,最長的溢出時間也就幾十毫秒,要定時1秒,就需要用一個變量
來保存溢出的次數,積累到了一定的次數后,才執行一次操作。這樣就可以累加到1秒或者更
長的時間才做一次操作。
3、當T2定時器發生溢出中斷時,需要用戶自己清除溢出標記,而51的其他定時器是自動清除的。
4、T2定時器預裝載值的計算:
設晶振為12MHz,每秒鐘可以執行1000000(12000000/12)個機器周期。而T2每次溢出時最多
經過了65536個機器周期。我們應該盡量讓T2定時器的溢出中斷的次數最少,這樣對主程序的干擾
也就最小。
選擇每秒中斷14次,每次溢出1000000/14=71428.57個機器周期,不為整數且超出65536個機器周期,有效。
選擇每秒中斷16次,每次溢出1000000/16=62500個機器周期,小于65536個機器周期,有效。
選擇每秒中斷20次,每次溢出1000000/20=50000個機器周期,小于65536個機器周期,有效。
通過上面的計算,我們可以發現,我們可以選擇的方式有很多,但是最佳的是每秒中斷16次,每次
溢出62500個機器周期,那么賦給T2定時器的初值應為65536-62500=3036,轉換成十六進制值為
0x0BDC。
********************************************************************************************************/
/*********定時2中斷服務子函數**************/
void Timer2_Server(void) interrupt 5
{
TF2=0;
deda++; //計數
if(deda<8){flag1=1;}else{flag1=0;}
if(deda==16){sec++;deda=0;}
if(sec==60){min++;sec=0;}
if(min==60){hor++;min=0;}
if(hor==24){hor=0;}
}