官术网_书友最值得收藏!

第四節 定時器/計數器

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的串行口波特率發生器方式將在串行接口一節詳細討論。

主站蜘蛛池模板: 吴忠市| 通州市| 方正县| 永靖县| 宜兰市| 江安县| 翁源县| 建瓯市| 玉屏| 滦平县| 太仆寺旗| 普格县| 永新县| 多伦县| 玉树县| 思南县| 淮安市| 平昌县| 扶余县| 砚山县| 交城县| 五莲县| 芷江| 南召县| 阜新市| 沅陵县| 扶绥县| 兰西县| 紫金县| 清河县| 盱眙县| 乐昌市| 衡阳县| 芮城县| 太康县| 余庆县| 泽库县| 桐乡市| 上林县| 洪江市| 崇阳县|