51單片機定時器/計數器的結構和原理
定時器/計數器簡稱定時器,其作用主要包括產生各種時標間隔、記錄外部事件的數量等,是微機中最常用、最基本的部件之一。803l單片機有2個16位的定時器/計數器:定時器0(T0)和定時器1(T1)。T0由2個定時寄存器TH0和TL0構成,T1則由TH1和TL1構成,它們都分別映射在特殊功能寄存器中,從而可以通過對特殊功能寄存器中這些寄存器的讀寫來實現對這兩個定時器的操作。作定時器時,每一個機器周期定時寄存器自動加l,所以定時器也可看作是計量機器周期的計數器。由于每個機器周期為12個時鐘振蕩周期,所以定時的分辨率是時鐘振蕩頻率的1/12。作計數器時,只要在單片機外部引腳T0(或T1)有從1到0電平的負跳變,計數器就自動加1。計數的最高頻率一般為振蕩頻率的l/24。
工作方式:
T0或T1無論用作定時器或計數器都有4種工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作狀態(tài)。下面以T1為例,分述各種工作方式的特點和用法。
1、工作方式0:
13位方式由TL1的低5位和TH1的8位構成13位計數器(TL1的高3位無效)。工作方式0的結構見下圖:
圖中,C/T為定時/計數選擇:C/T=0,T1為定時器,定時信號為振蕩周期12分頻后的脈沖;C/T=l,T1為計數器,計數信號來自引腳T1的外部信號。
定時器T1能否啟動工作,還受到了R1、GATE和引腳信號INT1的控制。由圖中的邏輯電路可知,當GATE=0時,只要TR1=1就可打開控制門,使定時器工作;當GATE=1時,只有TR1=1且INT1=1,才可打開控制門。GATE,TR1,C/T的狀態(tài)選擇由定時器的控制寄存器TMOD,TCON中相應位狀態(tài)確定,INT1則是外部引腳上的信號。
在一般的應用中,通常使GATE=0,從而由TRl的狀態(tài)控制Tl的開閉:TRl=1,打開T1;TRl=0,關閉T1。在特殊的應用場合,例如利用定時器測量接于INT1引腳上的外部脈沖高電平的寬度時,可使GATE=1,TRl=1。當外部脈沖出現上升沿,亦即INT1由0變1電平時,啟動T1定時,測量開始;一旦外部脈沖出現下降沿,亦即INT1由l變O時就關閉了T1。
定時器啟動后,定時或計數脈沖加到TLl的低5位,從預先設置的初值(時間常數)開始不斷增1。TL1計滿后,向THl進位。當TL1和THl都計滿之后,置位T1的定時器回零標志TFl,以此表明定時時間或計數次數已到,以供查詢或在打開中斷的條件下,可向CPU請求中斷。如需進一步定時/計數,需用指令重置時間常數。
2、工作方式1:
16位方式。與工作方式0基本相同,區(qū)別僅在于工作方式1的計數器TL1和TH1組成16位計數器,從而比工作方式0有更寬的定時/計數范圍。工作方式1的結構見下圖。

3、工作方式2
8位自動裝入時間常數方式。由TLl構成8位計數器,THl僅用來存放時間常數。啟動T1前,TLl和THl裝入相同的時間常數,當TL1計滿后,除定時器回零標志TFl置位,具有向CPU請求中斷的條件外,THl中的時間常數還會自動地裝入TLl,并重新開始定時或計數。所以,工作方式2是一種自動裝入時間常數的8位計數器方式。由于這種方式不需要指令重裝時間常數,因而操作方便,在允許的條件下,應盡量使用這種工作方式。當然,這種方式的定時/計數范圍要小于方式0和方式1。工作方式2的結構見下圖.
4、工作方式3
2個8位方式。工作方式3只適用于定時器0。如果使定時器1為工作方式3,則定時器1將處于關閉狀態(tài)。
當T0為工作方式3時,THo和TL0分成2個獨立的8位計數器。其中,TL0既可用作定時器,又可用作計數器,并使用原T0的所有控制位及其定時器回零標志和中斷源。TH0只能用作定時器,并使用T1的控制位TRl、回零標志TFl和中斷源,見下圖。
通常情況下,T0不運行于工作方式3,只有在T1處于工作方式2,并不要求中斷的條件下才可能使用。這時,T1往往用作串行口波特率發(fā)生器(見1.4),TH0用作定時器,TL0作為定時器或計數器。所以,方式3是為了使單片機有1個獨立的定時器/計數器、1個定時器以及1個串行口波特率發(fā)生器的應用場合而特地提供的。這時,可把定時器l用于工作方式2,把定時器0用于工作方式3。

下才可能使用。這時,T1往往用作串行口波特率發(fā)生器,TH0用作定時器,TL0作為定時器或計數器。所以,方式3是為了使單片機有1個獨立的定時器/計數器、1個定時器以及1個串行口波特率發(fā)生器的應用場合而特地提供的。這時,可把定時器l用于工作方式2,把定時器0用于工作方式3。
控制寄存器
定時器/計數器T0和T1有2個控制寄存器-TMOD和TCON,它們分別用來設置各個定時器/計數器的工作方式,選擇定時或計數功能,控制啟動運行,以及作為運行狀態(tài)的標志等。其中,TCON寄存器中另有4位用于中斷系統(tǒng)。
1、定時器方式控制寄存器TMOD
TMOD在特殊功能寄存器中,字節(jié)地址為89H,無位地址。TMOD的格式如下圖年示。
由圖可見,TMOD的高4位用于T1,低4使用于T0,4種符號的含義如下:
GATE:門控制位。其作用見圖1.6。GATE和軟件控制位TR、外部引腳信號INT的狀態(tài),共同控制定時器/計數器的打開或關閉。
C/T:定時器/計數器選擇位。C/T=1,為計數器方式;C/T=0,為定時器方式。
M1M0:工作方式選擇位,定時器/計數器的4種工作方式由M1M0設定。
M1M0=00:工作方式0(13位方式)。
M1M0=01:工作方式1(16位方式)。
M1M0=10:工作方式2(8位自動裝入時間常數方式)。
MlM0=11:工作方式3(2個8位方式--僅對T0)。
2.定時器控制寄存器--TCON
TCON在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低位到高位)為88H一8FH,由于有位地址,十分便于進行位操作。
TCON的格式如下圖所示。其中,TFl,TRl,TF0和TR0位用于定時器/計數器;IEl,ITl,IEo和IT0位用于中斷系統(tǒng)。

TFl,TRl用于定時器T1;TF0,TR0用于定時器T0。兩組符號有相同的含義。
TF:定時器/計數器中斷請求標志位。當定時器計滿回零時,TF=1,并可申請中斷;當CPU響應中斷并進入中斷服務程序后,TF自動清零。如對TF查詢,定時器回零后,要用指令將TF清零。
TR:定時器/計數器開閉控制位。
IEl,ITl用于外部中斷1(1NTl);IE0,IT0用于外部中斷0(1NT0)。兩組符號的含義相同。
IT:下跳沿/低電平引起外部中斷請求的選擇位。IT=1,由下跳沿引起;IT=0,由低電平引起。
IE:外部中斷的中斷申請標志。IE=0,表明無外部中斷請求;IE=1,表明有外部中斷請求。當有外部中斷請求時,IE自動為1,單片機CPU響應此中斷后,IE自動清零。
定時/計數初值的求取方法
8031單片機的定時器/計數器采用增量式計數。也就是說,當運行于定時器方式時,每隔一個機器周期定時器自動加1;當運行于計數器方式時,每當引腳出現下跳沿,計數器自動加1。無論是作定時用還是計數用,當T0或Tl加滿回零后,定時器回零標志置1。而當允許中斷時,TF可以申請中斷進而在中斷服務程序中作相應的操作;TF也可用程序判斷定時到或計數滿的標志位。
那么,怎樣確定定時或計數初值(又稱為時間常數),以便達到要求的定時時間或計數值呢?下面作簡要介紹,并舉兩個例子加以說明。
設T0(或T1)運行于計數器方式,要求計數X個外部脈沖后T0(或T1)回零,則計數初值C的求取方法如下:
因為回零的含義是指加滿到計數器的模值,即
x十C=模
所以 C=模一x=模十(一x)=(x)求補
由此可見,計數初值的大小等于需要計數的個數x求補運算后的結果。
又若T0(或T1)運行于定時器方式,需定時tvs,則計數脈沖數為。其中,MC為機器周期(單片為us)同理可知,定時初值為。
值的指出的是,對于定時器/計數器的4種不同工作方式,T0或T1的位數不同,模值也因而不同,求補運算要按相應位數的長度來求。
例1:T0運行于計數器狀態(tài),工作于方式1(16位方式),要求外部引腳出現3個脈沖后,TH0,TL0全回零(以便申請中斷)。求計數初值C。
解:C=(0003H)求補=FFFDH
例2:T0運行于定時器狀態(tài),時鐘振蕩周期為12MHZ,要求定時100us。求不同工作方式時的定時初值。
解:因為機器周期MC=12/12MHZ=1us
所以要計數的賈器周期個數為64H。
應注意定時器在工作方式0時的初值裝入方法。由于方式0是13位定時/計數方式,對于T0而言,高8位初值裝入TH0,低5位初值裝入TL0的低5位(TL0的高3位無效)。所以對于上例,要裝入1F9CH初值時,可安排成:
在具體裝入初值時,必須把11111100B裝入TH0,而把***11100B裝入TL0。用指令表示即:
MOV TH0,#0FCH ;#FCHTH0
MOV TL0,#1CH ;#1CHTL0
通過上面求定時/計數初值的分析可見,不同工作方式的最大計數值或定時機器周期數分
別為;
方式0--213
方式l--216
方式2,3--28
例如,當晶振(外部振蕩時鐘)fosc=6MHz時,方式1的最長定時時間tmax=216×12÷6MHZ=131.072ms。這在操作上,只需把TH和TL都預置成00H初值即可。

編輯:admin 最后修改時間:2018-05-08