MCS-51單片機的定時器/計數(shù)器概念
一、MCS-51單片機的定時器/計數(shù)器概念
單片機中,脈沖計數(shù)與時間之間的關(guān)系十分密切,每輸入一個脈沖,計數(shù)器的值就會自動累加1,而花費的時間恰好是1微秒;只要相鄰兩個計數(shù)脈沖之間的時間間隔相等,則計數(shù)值就代表了時間的流逝;
因此,單片機中的定時器和計數(shù)器其實是同一個物理的電子元件,只不過計數(shù)器記錄的是單片機外部發(fā)生的事情(接受的是外部脈沖),而定時器則是由單片機自身提供的一個非常穩(wěn)定的計數(shù)器,這個穩(wěn)定的計數(shù)器就是單片機上連接的晶振部件;MCS-51單片機的晶振經(jīng)過12分頻之后提供給單片機的只有1MHZ的穩(wěn)定脈沖;晶振的頻率是非常準確的,所以單片機的計數(shù)脈沖之間的時間間隔也是非常準確的,這個準確的時間間隔是1微秒;
MCS-51單片機外接的是12MHZ的晶振(實際上是11.0592MHZ),所以,MCS-51單片機內(nèi)部的工作頻率(時鐘脈沖頻率)是12MHZ/12=1MHZ=1000000次/秒=1000000條指令/秒=1000000次/1000000微秒=1次/微秒=1條指令/微秒;也就是說,晶振振蕩一次,就會給單片機提供一個時鐘脈沖,花費的時間是1微秒,此時,CPU會執(zhí)行一條指令,經(jīng)歷一個機器周期;即:1個時鐘脈沖=1個機器周期=1微秒=1條指令;
注:個人PC機上的CPU主頻是晶振經(jīng)過倍頻之后的頻率,這一點恰好與MCS-51單片機的相反,MCS-51單片機的主頻是晶振經(jīng)過分頻之后的頻率;
總之:MCS-51單片機中的時間概念就是通過計數(shù)脈沖的個數(shù)來測量出來的;1個脈沖=1微秒=1條指令=1個機器周期;
MCS-51單片機定時器/計數(shù)器的簡單結(jié)構(gòu)圖:
8051系列單片機有兩個定時器:T0和T1,分別稱為定時器和定時器T1,這兩個定時器都是16位的定時器/計數(shù)器;8052系列單片機增加了第三個定時器/計數(shù)器T2;它們都有定時或事件計數(shù)功能,常用于時間控制、延時、對外部時間計數(shù)和檢測等場合;
二、定時器/計數(shù)器的結(jié)構(gòu)
8051單片機的兩個定時器T0和T1分別都由兩個特殊功能寄存器組成;T0由特殊功能寄存器TH0和TL0構(gòu)成,而T1則是由TH1和TL1構(gòu)成;
作為定時器使用時,定時器計數(shù)8051單片機片內(nèi)振蕩器輸出經(jīng)過12分頻后的脈沖個數(shù),即:每個機器周期使定時器T0/T1的寄存器值自動累加1,直到溢出,溢出后繼續(xù)從0開始循環(huán)計數(shù);所以,定時器的分辨率是時鐘振蕩頻率的1/12;
作為計數(shù)器使用時,通過引腳T0(P3.4)或T1(P3.5)對外部脈沖信號進行計數(shù),當(dāng)輸入的外部脈沖信號發(fā)生從1到0的負跳變時,計數(shù)器的值就自動加1;計數(shù)器的最高頻率一般是時鐘振蕩頻率的1/24;
由此可知,不論是定時器還是計數(shù)器工作方式,定時器T0和T1均不占用CPU的時間,除非定時器/計數(shù)器T0和T1溢出,才可能引起CPU中斷,轉(zhuǎn)而去執(zhí)行中斷處理程序;所以說,定時器/計數(shù)器是單片機中效率高而工作靈活的部件;
三、定時器/計數(shù)器的工作模式
除了可選擇定時器和計數(shù)器的這兩種工作方式外,每個定時器/計數(shù)器都有4種工作模式;
在模式0、1和2時,T0和T1的工作模式相同;在模式3時,兩個定時器/計數(shù)器的工作模式不同;
工作模式0:
由TL0的低5位和TH0的全部8位共同構(gòu)成一個13位的定時器/計數(shù)器;定時器/計數(shù)器啟動后,定時或計數(shù)脈沖個數(shù)加到TL0上,從預(yù)先設(shè)置的初值(時間常數(shù))開始累加,不斷遞增1;當(dāng) TL0計滿后,向TH0進位,直到13位寄存器計滿溢出;溢出時,定時器/計數(shù)器硬件會自動地把13位的寄存器值清0,中斷標(biāo)記TF0置1;如果需要進一步定時/計數(shù),需要使用相關(guān)指令重置時間常數(shù),并把定時器/計數(shù)器的中斷標(biāo)記TF0置0;工作模式0的結(jié)構(gòu)如下圖:
工作模式1:
模式1與模式0幾乎完全相同,唯一的區(qū)別就是,模式1中的寄存器TH0和TL0共同構(gòu)成的是一個16位定時器/計數(shù)器來參與操作,因此比模式0中的定時/計數(shù)范圍更大;工作模式1的結(jié)構(gòu)如下圖:
工作模式2:
這種模式又稱為自動再裝入預(yù)置數(shù)模式;當(dāng)定時器/計數(shù)器的寄存器TH0/TL0的值溢出時,定時器/計數(shù)器硬件設(shè)備會自動把寄存器TH0/TL0的值清0,以重新開始操作;但是有時候,我們的定時/計數(shù)操作是需要多次重復(fù)定時/計數(shù)的,如果溢出時不做任何處理,那么,在第二輪定時/計數(shù)時就是從0開始定時/計數(shù)了,而這并不是我們想要的;所以,要保證每次溢出之后,在重新開始定時/計數(shù)的操作是我們想要的,那就要把預(yù)置數(shù)(時間常數(shù))重新裝入某個地方;而重新裝入預(yù)置數(shù)的操作是硬件設(shè)備自動完成的,不需要人工干預(yù)所以,這種工作模式就叫自動再裝入預(yù)置數(shù)方式;既然需要重新裝入預(yù)置數(shù),那么預(yù)置數(shù)就必須要存放在某個地方,才能保證重裝操作成功;在工作模式2中,把自動重裝入的預(yù)置數(shù)存放在定時器/計數(shù)器的寄存器的高8位中,也就是存放在TH0中,而只留下TL0參與定時/計數(shù)操作;顯然,定時/計數(shù)的方位小了很多;
注:這個工作模式常用于波特率發(fā)生器(串口通訊),T1工作在串口模式2;用于這種方式時,定時器就是為了提供一個時間基準;計數(shù)溢出之后,不需要做太多的事情,只做一件事就可以,就是重新裝入預(yù)置數(shù),再開始重新計數(shù),而且中間不需要任何延時;工作模式2的結(jié)構(gòu)如下圖:
工作模式3:
由于定時器/計數(shù)器T1沒有工作模式3,如果把定時器/計數(shù)器T0設(shè)置為工作模式3,那么TL0和TH0將被分割成兩個相互獨立的8位定時器/計數(shù)器;工作模式3的結(jié)構(gòu)如下圖:
四、定時器/計數(shù)器的定時/計數(shù)范圍
工作方式0:13位定時器/計數(shù)器工作模式,最多可計數(shù)2的13次方次,即:8192次,[0,8191];
工作方式1:16位定時器/計數(shù)器工作模式,最多可計數(shù)2的16次方次,即:65536次,[0,65535];
工作方式2:8位定時器/計數(shù)器工作模式,最多可計數(shù)2的8次方次,即:256次,[0,255];
工作方式3:8位定時器/計數(shù)器工作模式,最多可計數(shù)2的8次方次,即:256次,[0,255];
預(yù)置數(shù)的計算公式:預(yù)置數(shù)=最大值-需要計數(shù)的次數(shù);
五、定時器/計數(shù)器的控制寄存器
8051單片機設(shè)計了兩個8位的特殊功能寄存器來控制定時器/計數(shù)器的工作狀態(tài);這兩個特殊功能寄存器分別是TMOD和TCON;它倆都在特殊功能寄存器區(qū);
1、工作模式控制寄存器TMOD(89h):
2、工作狀態(tài)控制寄存器TCON(88H):
六、定時器/計數(shù)器的初始化
1、設(shè)置定時器/計數(shù)器的工作模式TMOD(常用的是模式1:TMOD=0x01);
2、裝入預(yù)置數(shù)到THx和TLx中(THx=TLx=MAX(8192/65536/256)-計數(shù)次數(shù));
3、如果工作在中斷方式,則需要開定時器/計數(shù)器的中斷TCON中的標(biāo)志位:TF0/TF1=0/1;
4、啟動定時器/計數(shù)器:TR0/TR1=1;
注:由于8051單片機的定時器/計數(shù)器使用的時鐘脈沖是外部晶振(12MHZ)經(jīng)過12分頻(12MHZ/12=1MHZ)之后的頻率,所以,一個時鐘脈沖就是1微秒;所以,8192個脈沖=8192微秒=8.192毫秒; 65536個脈沖=65536微秒=65.536毫秒; 256個脈沖=256微秒=0.256毫秒;