51單片機(jī)定時(shí)器量程的硬件擴(kuò)展方式
升個(gè)級,精準(zhǔn)性不要了,使定時(shí)器工作在模式1,16位定時(shí)器:當(dāng)晶振為12MHz時(shí)已經(jīng)能定時(shí)到65.56ms,略微牛逼不少。如果還要定時(shí)更長的數(shù),可能會用軟件方式
本文引用地址:http://m.butianyuan.cn/article/201611/318668.htm來擴(kuò)展計(jì)數(shù)范圍。軟件方式擴(kuò)展的大概思路是:在定時(shí)器中斷服務(wù)程序中對定時(shí)器中斷請求進(jìn)行計(jì)數(shù),當(dāng)中斷請求的次數(shù)達(dá)到要求的值時(shí)才進(jìn)行相應(yīng)的處理。例如,某事件的處理周期為1s,但由于受到最大定時(shí)時(shí)間的限制,無法一次完成定時(shí),此時(shí)可以將定時(shí)器的定時(shí)時(shí)間設(shè)為以10ms為一個(gè)單位,啟動定時(shí)器后的每一次定時(shí)器溢出中斷產(chǎn)生10ms的定時(shí),進(jìn)入中斷服務(wù)程序后,對定時(shí)器的中斷次數(shù)進(jìn)行統(tǒng)計(jì),每100次定時(shí)器溢出中斷進(jìn)行一次事件的處理。
這篇文章的標(biāo)題是硬件擴(kuò)展,所以軟件擴(kuò)展的具體實(shí)現(xiàn)這里就省略了。以下主要圍繞硬件方式展開。
硬件方式擴(kuò)展的思路是:
1)T0設(shè)置為16位定時(shí)器方式,當(dāng)T0溢出時(shí),執(zhí)行T0的中斷服務(wù)程序。在T0的中斷服務(wù)程序中將P1.0取反。這樣在P1.0將輸出一個(gè)方波,其周期為T0定時(shí)時(shí)間的2倍。設(shè)T0的定時(shí)時(shí)間為TIME,則由P1.0輸出的方波的周期為2×TIME。
2)T1設(shè)置為16位計(jì)數(shù)器方式,將P1.0輸出的方波接到T1的定時(shí)器外部輸入端T1(P3.5),作為定時(shí)/計(jì)數(shù)器1的外部計(jì)數(shù)脈沖,其每個(gè)周期的下降沿使T1加1。設(shè)計(jì)數(shù)器T1的計(jì)數(shù)脈沖數(shù)為COUNT,則當(dāng)T1溢出時(shí),總定時(shí)時(shí)間T為:T = 2×TIME×COUNT。
下面羅列代碼,定時(shí)器T0 T1全都工作在模式2
#include#include sbit P1_0 = P1^0;sbit P1_1 = P1^1;#define MakeByte(target, Hi,Lo) do{ target |= (((Hi)<<4)|(Lo)); }while(0); #define SetTH(n,val) do{ TH##n = val; }while(0); #define SetTL(n,val) do{ TL##n = val; }while(0); #define EnableET(n) do{ ET##n = 0x01; IE |= 0x80; }while(0); #define StartTn(n) do{ TR##n = 0x01; }while(0); unsigned char FetchData=0;unsigned int OnePeriod=0;int main(){//T0定時(shí)器 方式2 自動裝載 //T1計(jì)數(shù)器 方式2 自動裝載 MakeByte(TMOD, 0x06,0x02);//T0 0.2ms中斷一次,P1.0翻轉(zhuǎn)周期0.4msSetTH(0,0x38);SetTL(0,0x38); EnableET(0);EnableET(1);//計(jì)滿50次產(chǎn)生中斷//50*0.4ms=20msSetTH(1,0xCE);SetTL(1,0xCE);StartTn(0);StartTn(1);while(1){while(!FetchData); FetchData = 0;}}void IsrT0() interrupt 1{P1_0 = ~P1_0;}void IsrT1() interrupt 3{ //20MS elapsedOnePeriod++;//這個(gè)用于軟件定時(shí)//每經(jīng)過20Ms,OnePeriod加一,//然后在main函數(shù)里經(jīng)行統(tǒng)計(jì)P1_1 = ~P1_1;}
下面上圖:P1.0的輸出接P3.5
最后上仿真結(jié)果:
第一張示波器的時(shí)基為2MS,第二張示波器的時(shí)基為0.2MS
評論