1、定時計數(shù)器概述
定時/計數(shù)器,其具有定時和計數(shù)的功能。計數(shù)是指對外部脈沖信號進(jìn)行比較,每來一個脈沖,計數(shù)值加1;當(dāng)產(chǎn)生的信號脈沖很有規(guī)律時,比如1秒鐘來一個,那么計數(shù)多少個脈沖就知道過了多少秒,從而計數(shù)功能可以演化為定時功能。時功能需要用到某個基準(zhǔn)時鐘,通過對基準(zhǔn)時鐘的計數(shù)來完成定時功能。
定時/計數(shù)器的種類比較多,但一般可歸為兩類:
(1)專用的定時/計數(shù)器器件(如8253);
(2)處理器中集成定時器/計數(shù)器(如8051單片機(jī)自帶2個16位定時/計數(shù)器)。這些定時器一般都有一個輸入時鐘,即基準(zhǔn)時鐘。
定時/計數(shù)器有如下一些用途:
(1)產(chǎn)生所需頻率的脈沖。如產(chǎn)生頻率1000hz,占空比1:1的脈沖波。
(2)在累加計數(shù)中的應(yīng)用。計數(shù)器可在一段時間內(nèi)記錄信號A經(jīng)整形后的脈沖個數(shù)。
(3)在頻率測量中的應(yīng)用。通過測量脈沖寬度或在一定時間內(nèi)測量脈沖的個數(shù),從而推算出脈沖的頻率。
(4)定時/計數(shù)器在計時中的應(yīng)用。定時/計數(shù)器可對時鐘信號,如秒信號進(jìn)行計數(shù),也可用來倒計時,秒表計,時間循環(huán)等。
1、8051定時計數(shù)器
8051單片機(jī)內(nèi)部有2個16位的定時/計數(shù)器:T1和T0。
T0定時/計數(shù)器詳解: 寄存器位C/T控制開關(guān),往上是振蕩器,即CPU晶振產(chǎn)生的脈沖,往下是P3.4的引腳,即從外部得到的脈沖信號。進(jìn)來之后首先送到TL0寄存器中,當(dāng)TL0寄存器計數(shù)滿了之后,就會進(jìn)位到TH0寄存器,當(dāng)TH0寄存器計數(shù)滿了之后,就會產(chǎn)生溢出信號,TCON寄存器就會設(shè)置一個相應(yīng)的標(biāo)志,標(biāo)志會引發(fā)CPU的中斷,即51單片機(jī)的內(nèi)核處理單元處理。整個定時器是受到TMOD和TCON這兩個寄存器的控制,分別控制工作模式與工作狀態(tài)。
1、計數(shù)功能與定時功能
計數(shù)功能就是對外部脈沖進(jìn)行計數(shù);
計時就是針對內(nèi)部振蕩器,一般12MHz,除以12 ,就是1MHz,相當(dāng)于一個脈沖就是1us,數(shù)多少個脈沖就知道多少us,就是定時功能;
2、T0相關(guān)寄存器4個
寄存器描述6個相關(guān)的寄存器:TMOD、TCON、TH0、TL0、TH1、TL1
其中TMOD用于控制和確定各定時/計數(shù)器的功能和工作方式,TCON用于控制各定時/計數(shù)器的啟動和停止計數(shù),同事 包含定時/計數(shù)器的狀態(tài),TH0、TL0用于T0的計數(shù),TH1、TL1用于T1的計數(shù)。系統(tǒng)復(fù)位時,這些寄存器的所有為都被清零。
#TMOD方式寄存器描述
圖片5.png (69.62 KB, 下載次數(shù): 100)
下載附件
2021-7-23 16:13 上傳
圖片6.png (126.69 KB, 下載次數(shù): 73)
下載附件
2021-7-23 16:13 上傳
C/T:選擇計數(shù)器或定時器功能,C/T=1位外部脈沖計數(shù)器功能,C/T=0為內(nèi)部脈沖計數(shù)器功能(可做定時器)
GATE:選通控制,GATE=0,由軟件控制TR0或TR1位啟動定時器:GATE=1,由外部中斷引腳INT0(P3.2)和INT1(P3.3)輸入電平分別控制T0和T1的運行。
方式1
方式0和方式1工作過程差不多,只不過方式0為13位計數(shù)方式,最大計數(shù)值只能達(dá)到213=8192;而方式1為16位計數(shù)方式,最大計數(shù)值為216=65536。
當(dāng)工作在計數(shù)方式時,最大計數(shù)值為2^16=65536。
當(dāng)為定時工作方式時,定時時間計算公式為:
T=(216-計數(shù)初值)×晶振周期×12=(216-計數(shù)初值)×12÷晶振頻率
假設(shè)晶振頻率為12MHz,則方式1下最大定時時間T=(2^16-0)×12÷12MHz=65536x1us=65.536ms。
方式2
方式2為8位計數(shù)方式,最大計數(shù)值為2^8,能夠自動重裝計數(shù)值。
方式2特別適合于把定時/計數(shù)器用作串口波特率發(fā)生器。
定時時間T=(2^8-計數(shù)初值)×晶振周期×12 =(2^8-計數(shù)初值)×12÷晶振頻率。
| |
圖片7.png (37.49 KB, 下載次數(shù): 66)
下載附件
2021-7-23 16:13 上傳
|
圖片8.png (42.68 KB, 下載次數(shù): 58)
下載附件
2021-7-23 16:13 上傳
|
方式1詳解: C/T開關(guān)控制脈沖的來源,不管哪種脈沖,都會送到K往后計數(shù),其中K的狀態(tài)受下方邏輯控制。當(dāng)GATE=0,A處輸出1,此時B處的狀態(tài)只受TR0控制,當(dāng)TR0=1,K處開關(guān)閉合,當(dāng)TR0=0,K處開關(guān)斷開,即只通過TR0(軟件控制位)來控制定時器。當(dāng)GATE=1,A處輸出值受INT0引腳控制,當(dāng)TR0=1,此時K狀態(tài)只受INT0控制,當(dāng)INT0=1,K處開關(guān)閉合,當(dāng)INT0=0,K處開關(guān)斷開,即只通過引腳的電平來控制定時器。開關(guān)閉合后,開始計數(shù),TL0計數(shù)滿進(jìn)位到TH0,TH0計數(shù)滿進(jìn)位到TF0(中斷標(biāo)志),即產(chǎn)生中斷給了51。
方式2詳解: 方式2與方式1的前面大部分原理相同,不同的是8位計數(shù)方式,TL0計數(shù)滿直接進(jìn)位給TF0產(chǎn)生中斷,同時通過選通控制將TH0(已設(shè)置好)的值覆蓋到TH0(自動重裝計數(shù)值),重新計數(shù)。
TCON寄存器描述
其中高4位控制定時/計數(shù)器T0和T1的運行,低4位控制外部中斷INT1和INT0的運行。
TF1: T1計數(shù)溢出標(biāo)志位,計數(shù)寄存器產(chǎn)生溢出時由硬件自動置位,置位后向CPU申請中斷,中斷響應(yīng)后硬件自動復(fù)位,若采用程序查詢方式,必須軟件清除該位。
TR1: T1運行控制位,由軟件置位和復(fù)位。當(dāng)GATE(TMOD.7)為0時,由軟件設(shè)置為“1”時立即啟動T1計數(shù)寄存器開始計數(shù),清除為“0”時立即停止T1計數(shù)器寄存器計數(shù)。當(dāng)GATE為1時,置位TR1為“1”時還必須INT1輸入為高電平時,才啟動T1計數(shù),清除為“0”時或INT1輸入為低電平時均可停止T1計數(shù)。
TF0: 定時器T0溢出標(biāo)志位,其含義與TF1類似。
TR0: 定時器T0的運行控制位,其含義與TR1類似。
#使用步驟
1、定時/計數(shù)功能的確定,從而確定C/T位的值;以及T0、T1的選用。
2、計數(shù)值的確定。 如果選擇為定時功能,則需要計算計數(shù)值,公式如下:
(注:一個機(jī)器周期等于12個時鐘周期,時鐘周期是晶振振蕩頻率的倒數(shù))
計數(shù)值 = 定時時間/機(jī)器周期 = 定時時間×12/晶振頻率。比如單片機(jī)系統(tǒng)的晶振頻率為12MHz,現(xiàn)需要定時1ms,則計數(shù)值 = 1ms × 12/12MHz = 1000。
3、確定定時/計數(shù)器的工作方式,一般選用方式1和方式2,當(dāng)需要計數(shù)值比較大時(計數(shù)值>256),選用方式1工作,此時最大計數(shù)范圍為2^16。
4、計數(shù)初值的確定,即THn和TLn的確定。因為51單片機(jī)的定時/計數(shù)器是采用計滿溢出的,所以:計數(shù)初值=(計數(shù)最大值-計數(shù)值),從而確定計數(shù)初值。比如計數(shù)值為1000,選用方式2(16位寄存器),則:計數(shù)初值 = 2^16-1000 = 64536 = 0xFC18,所以THn = 0xFC,TLn = 0x18。
5、溢出標(biāo)志位TFn(n=0或1)清0。
6、運行控制位TRn置1,定時/計數(shù)器開始計數(shù)。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)