1、要精確定時(shí),必須使用定時(shí)器的自動(dòng)裝載方式。本實(shí)驗(yàn)使用T2定時(shí)器,讓它工作在16bit自動(dòng)
裝載方式,這時(shí),有另一個(gè)位置專門裝著16位預(yù)裝載值,當(dāng)T2溢出時(shí),預(yù)裝載值立即被裝入,
這就保證了精確定時(shí)。
2、T2定時(shí)器是一個(gè)16位定時(shí)器,最長(zhǎng)的溢出時(shí)間也就幾十毫秒,要定時(shí)1秒,就需要用一個(gè)變量
來(lái)保存溢出的次數(shù),積累到了一定的次數(shù)后,才執(zhí)行一次操作。這樣就可以累加到1秒或者更
長(zhǎng)的時(shí)間才做一次操作。
3、當(dāng)T2定時(shí)器發(fā)生溢出中斷時(shí),需要用戶自己清除溢出標(biāo)記,而51的其他定時(shí)器是自動(dòng)清除的。
4、T2定時(shí)器預(yù)裝載值的計(jì)算:
設(shè)晶振為12MHz,每秒鐘可以執(zhí)行1000000(12000000/12)個(gè)機(jī)器周期。而T2每次溢出時(shí)最多
經(jīng)過(guò)了65536個(gè)機(jī)器周期。我們應(yīng)該盡量讓T2定時(shí)器的溢出中斷的次數(shù)最少,這樣對(duì)主程序的干擾
也就最小。
選擇每秒中斷14次,每次溢出1000000/14=71428.57個(gè)機(jī)器周期,不為整數(shù)且超出65536個(gè)機(jī)器周期,有效。
選擇每秒中斷16次,每次溢出1000000/16=62500個(gè)機(jī)器周期,小于65536個(gè)機(jī)器周期,有效。
選擇每秒中斷20次,每次溢出1000000/20=50000個(gè)機(jī)器周期,小于65536個(gè)機(jī)器周期,有效。
通過(guò)上面的計(jì)算,我們可以發(fā)現(xiàn),我們可以選擇的方式有很多,但是最佳的是每秒中斷16次,每次
溢出62500個(gè)機(jī)器周期,那么賦給T2定時(shí)器的初值應(yīng)為65536-62500=3036,轉(zhuǎn)換成十六進(jìn)制值為
0x0BDC。
********************************************************************************************************/
/*********定時(shí)2中斷服務(wù)子函數(shù)**************/
void Timer2_Server(void) interrupt 5
{
TF2=0;
deda++; //計(jì)數(shù)
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;}
}