- 單片機原理
- 張志霞 張楠楠 王永剛 楊萍主編
- 3969字
- 2021-10-22 23:53:53
第四節 定時器/計數器
MCS-51系列單片機典型產品8051等有兩個16位定時器/計數器T0、T1;8052等單
片機有三個16位定時器/計數器T0、T1和T2。它們都可以用作定時器或外部事件計數器。
一、定時器/計數器T0和T1
MCS-51系列的單片機內,與16位定時器/計數器T0、T1有關的特殊功能寄存器有
以下幾個:TH0、TL0、TH1、TL1、TMOD、TCON。
TH0、TL0為T0的16位計數器的高8位和低8位,TH1、TL1為T1的16位計數器的高8位和低8位,TMOD為T0、T1的方式寄存器,TCON為T0、T1的狀態和控制
寄存器,存放T0、T1的運行控制位和溢出中斷標志位。
通過對TH0、TL0和TH1、TL1的初始化編程來設置T0、T1計數器初值,通過對
TCON和TMOD的編程來選擇T0、T1的工作方式和控制T0、T1的運行。
1.方式寄存器TMOD
特殊功能寄存器TMOD為T0、T1的工作方式寄存器,其格式如下:
GATE
C/T
M1
M0
GATE
C/T
M1
M0
T1方式控制
T0方式控制
TMOD的低4位為T0的方式字段,高4位為T1的方式字段,它們的含義是完全相同的。
(1)工作方式選擇位M1、M0。定時器工作方式由M1、M0兩位狀態確定,對應關系如表2-8所示。
表2-8
定時器的方式選擇

(2)定時和外部事件計數方式選擇位C/T。C/T=0為定時方式。在定時方式中,以振蕩器輸出時鐘脈沖的十二分頻信號作為計數信號,也就是每一個機器周期定時器加“1”,定時器從初值開始加“1”計數直至定時器溢出所需的時間是固定的。
C/T=1為外部事件計數方式,這種方式采用外部引腳(T0為P3.4,T1為P3.5)上的輸入脈沖作為計數脈沖。內部硬件在每個機器周期的S5P2采樣外部引腳的狀態,當一個機器周期采樣到高電平,接著的下一個機器周期采樣到低電平時計數器加1,也就是外部輸入電平發生負跳變時加1。外部事件計數時最高計數頻率為晶振頻率的二十四分之一,外部輸入脈沖高電平和低電平時間必須在一個機器周期以上。
(3)門控位GATE。GATE=1時,定時器的計數受外部引腳輸入電平的控制(INT0控制T0的運行,INT1 控制T1的運行);GATE=0時,定時器計數不受外部引腳輸入電平的控制。
2.控制寄存器TCON
特殊功能寄存器TCON的高4位存放定時器的運行控制位和溢出標志位,低4位存放外部中斷的觸發方式控制位和鎖存外部中斷請求源(詳見本章第六節“中斷系統”)。
TCON格式如下:TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
(1)定時器運行控制位TR0、TR1。定時器T0運行控制位TR0由軟件置位和清
“0”。門控位GATE為0時,T0的計數僅由TR0控制,TR0為1時允許T0計數,TR0為0時禁止T0計數;門控位GATE為1時,僅當TR0等于1且INT0(P3.2)輸入為高
電平時T0才計數,TR0為0或INT0輸入低電平時都禁止T0計數。
定時器運行控制位TR1功能及操作情況同TR0。
(2)定時器溢出標志位TF0、TF1。TF0為定時器T0溢出標志位。當T0被允許計數以后,T0從初值開始加“1”計數,最高位產生溢出時置“1”TF0。TF0可以由程序查詢和清“0”。TF0也是中斷請求源,當CPU響應T0中斷時由硬件清“0”TF0。
TF1為定時器T1溢出標志位。其功能及操作情況同TF0。3.定時器的工作方式
MCS-51的定時器T0有四種工作方式:方式0、方式1、方式2和方式3;而定時器T1有三種工作方式:方式0、方式1、方式2。下面對各種工作方式的定時器結構和功能加以詳細討論。
(1)方式0。當M1、M0為00時定時器工作于方式0。定時器T0方式0的結構如圖
2-11所示。方式0為13位的計數器,由TL0的低5位和TH0的8位組成,TL0低5位
計數溢出時向TH0進位,TH0計數溢出時置“1”溢出標志TF0。
圖2-11 T0方式0結構
在圖211的T0計數脈沖控制電路中,有一個方式電子開關和計數控制電子開關。C/T=0時,方式電子開關打在上面,以振蕩器的十二分頻信號作為 T0的計數信號;C/T=1時,方式電子開關打在下面,此時以T0(P3.4)引腳上的輸入脈沖作為T0的計數脈沖。當GATE為0時,只要TR0為1,計數控制開關的控制端即為高電平,使開關閉合,計數脈沖加到T0,允許T0計數。當GATE為1時,僅當TR0為1且INT0引腳上輸入高電平時控制端才為高電平,才使控制開關閉合,允許T0計數,TR0為“0”或INT0輸入低電平都使控制開關斷開,禁止T0計數。
若T0工作于方式0定時,計數初值為a,則T0從初值a加1計數至溢出的時間為
t=f1o2sc*(213-a)μs。
(2)方式1。方式1和方式0的差別僅僅在于計數器的位數不同,方式1為16位的定時器/計數器。定時器T0工作于方式1的邏輯結構如圖2-12所示。T0工作于方式1時,由TH0作為高8位,TL0作為低8位,構成一個16位計數器。
圖2-12 T0方式1結構
(3)方式2。M1、M0為10時,定時器/計數器工作于方式2,方式2為自動恢復初值的8位計數器。定時器T0工作于方式2時的邏輯結構如圖2-13所示。T0工作于方式2時,TL0作為8位計數器,TH0作為計數初值寄存器。當TL0計數溢出時,一方面置“1”溢出標志TF0,同時將TH0中的計數初值送至TL0,使TL0從初值開始重新加1計數。
圖2-13 T0方式2結構
上面以T0為例,說明了定時器/計數器方式0、方式1、方式2的工作原理,T1和T0的這三種方式是完全相同的。
(4)方式3。方式3只適用于T0,若T1設置為工作方式3時,則使T1停止計數。定時器T0工作于方式3時的邏輯結構如圖2-14所示,T0分為兩個獨立的8位計數器
TL0和TH0。TL0使用T0的所有狀態控制位GATE、TR0、INT0(P3.2)、T0
(P3.4)、TF0等,TL0可以作為8位定時器或外部事件計數器,TL0計數溢出時置“1”溢出標志TF0,TL0計數初值必須由軟件每次設定。
TH0被固定為一個8位定時器方式,并使用T1的狀態控制位TR1、TF1。一般情況圖2-14 T0方式3結構

下,只有當T1用于串行口的波特率發生器或不需要中斷的場合,T0才在需要時選工作方式3,以增加一個計數器。這時T1的運行由方式來控制,方式3停止計數,方式0~2允許計數,計數溢出時并不置“1”標志TF1。
二、定時器/計數器T2
80C52中有一個功能較強的定時器/計數器T2,T2和T1、T0一樣,可用于定時或外部事件計數。它具有三種工作方式:捕捉方式、常數自動再裝入方式和串行口的波特率發生器方式。
1.T2的特殊功能寄存器
8052中與T2相關的特殊功能寄存器有以下五個:TH2、TL2、RCAP2H、RCAP2L、T2CON。TH2、TL2組成16位計數器,RCAP2H、RCAP2L組成一個16位寄存器。在捕捉
方式中,當外部輸入T2EX(P1.1)發生負跳變時,將TH2、TL2的當前計數值鎖存到
RCAP2H、RCAP2L中,在常數自動再裝入方式中,RCAP2H、RCAP2L作為16位計數初值
常數寄存器。
T2CON為T2的狀態控制寄存器,其格式如下:
D7
D6
D5
D4
D3
D2
D1
D0
TF2
EXF2
RCLK
TCLK EXEN2
TR2
C/T2 CP/RL2
定時器/計數器的工作方式由T2CON的D0、D2、D4、D5位控制,對應關系如表2
-9所示。
表2-9
定時器T2方式選擇

TF2:T2的溢出中斷標志。在捕捉方式和常數自動再裝入方式中,T2加1計數溢出時,置“1”中斷標志TF2,CPU響應中斷轉向T2中斷入口(002BH)時,并不清“0”TF2,
TF2必須由用戶程序清“0”。當T2作為串行口波特率發生器時,TF2不會被置“1”。
EXF2:定時器T2外部中斷標志。EXEN2為1時,當T2EX(P1.1)發生負跳變時置“1”中斷標志EXF2,CPU響應中斷轉T2中斷入口(002BH)時,并不清“0”EXF2,EXF2必須由用戶程序清“0”。
TCLK:串行接口的發送時鐘選擇標志。TCLK=1時,T2工作于波特率發生器方式,使定時器T2的溢出脈沖作為串行口方式1、方式3時的發送時鐘。TCLK=0時,定時器T1的溢出脈沖作為串行口方式1、方式3時的發送時鐘。
RCLK:串行接口的接收時鐘選擇標志位。RCLK=1時,T2工作于波特率發生器方式,使定時器T2的溢出脈沖作為串行口方式1、方式3時的接收時鐘,RCLK=0時,定時器T1的溢出脈沖作為串行口方式1、方式3時的接收時鐘。
EXEN2:T2的外部允許標志。T2工作于捕捉方式,EXEN2為1時,T2EX(P1.1)
輸入端發生高到低的跳變時,TL2和TH2的當前值自動地捕捉到RCAP2L和RCAP2H中,同時還置“1”中斷標志EXF2;T2工作于常數自動裝入方式時,EXEN2為1時,當
T2EX(P1.1)輸入端發生高到低的跳變時,常數寄存器RCAP2L,RCAP2H的值自動裝入TL2、TH2,同時置“1”中斷標志EXF2,向CPU申請中斷。EXEN2=0時,T2EX
輸入電平的變化對定時器T2沒有影響。
C/T2:外部事件計數器/定時器選擇位。C/T2=1時,T2為外部事件計數器,計數脈沖來自T2(P1.0);C/T2=0時,T2為定時器,振蕩脈沖的十二分頻信號作為計數信號。
TR2:T2的計數控制位。TR2為1時允許計數,為0時禁止計數。
CP/RL2:捕捉和常數自動再裝入方式選擇位。CP/RL2為1時工作于捕捉方式,CP/
RL2為0時T2工作于常數自動再裝入方式。當TCLK或RCLK為1時CP/RL2被忽略,
T2總是工作于常數自動恢復的方式,常用來做波特率發生器。
2.T2的工作方式
(1)常數自動再裝入方式。T2的16位常數自動再裝入方式的邏輯結構如圖2-15所示,這種方式主要用于定時。C/T2為0時為定時方式,以振蕩器的十二分頻信號作為T2的計數信號;C/T2為1時為外部事件計數方式,外部引腳T2(P1.0)上的輸入脈沖作為T2的計數信號。

圖2-15 T2常數自動再裝入方式結構
TR2置“1”后,T2從初值開始加1計數,計數溢出時將RCAP2H、RCAP2L中的
計數初值常數自動再裝入TH2、TL2,使T2從該初值開始重新加1計數,同時置“1”溢出標志TF2,向CPU請求中斷(TF2也可以由程序查詢)。
當EXEN2為1時,除上述功能外,還有一個附加的功能。當T2EX(P1.1)引腳輸
入電平發生“1”~“0”跳變時,也將RCAP2H、RCAP2L中常數重新裝入到TH2、
TL2,使T2重新從初值開始計數,同時置“1”標志EXF2,向CPU請求中斷。
T2的16位常數自動再裝入方式是一種高精度的16位定時器/計數器工作方式,計數初值由初始化程序一次設定后,在計數過程中不需要由軟件再設定。若計數初值為a,則
定時時間等于f1o2sc*(216-a)μs。
(2)16位捕捉方式。T2的16位捕捉方式的邏輯結構如圖2-16所示。16位捕捉方式的計數脈沖也由C/T2選擇,C/T2為0時以振蕩器的十二分頻信號作為T2的計數信號,
C/T2為1時以T2(P1.0)引腳上的輸入脈沖作為T2的計數信號。置“1”TR2后,T2
從初值開始加1計數,計數溢出時僅置“1”溢出標志TF2,而RCAP2H、RCAP2L的內
容并不送至TH2和TL2,T2的計數初值必須由軟件每次設定。
EXEN2為1時除上述功能外,另外有一個附加的功能:當T2EX(P1.1)輸入電平
發生負跳變時,將TH2、TL2的當前計數值鎖存到RCAP2H、RCAP2L,并置“1”中斷標志EXF2,向CPU請求中斷。
T2的16位捕捉方式主要用于測試外部事件的發生時間,如可用于測試兩路脈沖之間的頻率關系或輸入脈沖的頻率、周期等。
圖2-16 T2捕捉方式結構
(3)串行口的波特率發生器方式。T2的串行口波特率發生器方式將在串行接口一節詳細討論。