標(biāo)題: 單片機(jī)定時(shí)器/計(jì)數(shù)器原理和相關(guān)寄存器位的定義 [打印本頁]

作者: 51黑科技    時(shí)間: 2016-2-4 04:11
標(biāo)題: 單片機(jī)定時(shí)器/計(jì)數(shù)器原理和相關(guān)寄存器位的定義

相關(guān)工具:單片機(jī)延時(shí)設(shè)計(jì)工具(計(jì)數(shù)器初值計(jì)算)
80C51單片機(jī)內(nèi)部設(shè)有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器?删幊痰囊馑际侵钙涔δ埽ㄈ绻ぷ鞣绞、定時(shí)時(shí)間、量程、啟動(dòng)方式等)均可由指令來確定和改變。在定時(shí)器/計(jì)數(shù)器中除了有兩個(gè)16位的計(jì)數(shù)器之外,還有兩個(gè)特殊功能寄存器(控制寄存器和方式寄存器)。


從上面定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)圖中我們可以看出,16位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位專用寄存器組成,即:T0由TH0和TL0構(gòu)成;T1由TH1和TL1 構(gòu)成。其訪問地址依次為8AH-8DH。每個(gè)寄存器均可單獨(dú)訪問。這些寄存器是用于存放定時(shí)或計(jì)數(shù)初值的。此外,其內(nèi)部還有一個(gè)8位的定時(shí)器方式寄存器 TMOD和一個(gè)8位的定時(shí)控制寄存器TCON。這些寄存器之間是通過內(nèi)部總線和控制邏輯電路連接起來的。TMOD主要是用于選定定時(shí)器的工作方式; TCON主要是用于控制定時(shí)器的啟動(dòng)停止,此外TCON還可以保存T0、T1的溢出和中斷標(biāo)志。當(dāng)定時(shí)器工作在計(jì)數(shù)方式時(shí),外部事件通過引腳T0 (P3.4)和T1(P3.5)輸入。
定時(shí)計(jì)數(shù)器的原理:
當(dāng)定時(shí)器/計(jì)數(shù)器為定時(shí)工作方式時(shí),計(jì)數(shù)器的加1信號(hào)由振蕩器的12分頻信號(hào)產(chǎn)生,即每過一個(gè)機(jī)器周期,計(jì)數(shù)器加1,直至計(jì)滿溢出為止。顯然,定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率有關(guān)。因一個(gè)機(jī)器周期等于12個(gè)振蕩周期,所以計(jì)數(shù)頻率fcount=1/12osc。如果晶振為12MHz,則計(jì)數(shù)周期為:
T=1/(12×106)Hz×1/12=1μs
這是最短的定時(shí)周期。若要延長(zhǎng)定時(shí)時(shí)間,則需要改變定時(shí)器的初值,并要適當(dāng)選擇定時(shí)器的長(zhǎng)度(如8位、13位、16位等)。
當(dāng)定時(shí)器/計(jì)數(shù)器為計(jì)數(shù)工作方式時(shí),通過引腳T0和T1對(duì)外部信號(hào)計(jì)數(shù),外部脈沖的下降沿將觸發(fā)計(jì)數(shù)。計(jì)數(shù)器在每個(gè)機(jī)器周期的S5P2期間采樣引腳輸入電 平。若一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。此后的機(jī)器周期S3P1期間,新的計(jì)數(shù)值裝入計(jì)數(shù)器。所以檢測(cè)一個(gè)由1至0的跳 變需要兩個(gè)機(jī)器周期,故外部事年的最高計(jì)數(shù)頻率為振蕩頻率的1/24。例如,如果選用12MHz晶振,則最高計(jì)數(shù)頻率為0.5MHz。雖然對(duì)外部輸入信號(hào) 的占空比無特殊要求,但為了確保某給定電平在變化前至少被采樣一次,外部計(jì)數(shù)脈沖的高電平與低電平保持時(shí)間均需在一個(gè)機(jī)器周期以上。
當(dāng)CPU用軟件給定時(shí)器設(shè)置了某種工作方式之后,定時(shí)器就會(huì)按設(shè)定的工作方式獨(dú)立運(yùn)行,不再占用CPU的操作時(shí)間,除非定時(shí)器計(jì)滿溢出,才可能中斷CPU 當(dāng)前操作。CPU也可以重新設(shè)置定時(shí)器工作方式,以改變定時(shí)器的操作。由此可見,定時(shí)器是單片機(jī)中效率高而且工作靈活的部件。
綜上所述,我們已知定時(shí)器/計(jì)數(shù)器是一種可編程部件,所以在定時(shí)器/計(jì)數(shù)器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時(shí)/計(jì)數(shù)器。將控制字寫入定時(shí)/計(jì)數(shù)器的過程叫定時(shí)器/計(jì)數(shù)器初始化。在初始化過程中,要將工作方式控制字寫入方式寄存器,工作狀態(tài)字(或相關(guān)位)寫入控制寄存器,賦定時(shí)/計(jì) 數(shù)初值。下面我們就提出的控制字的格式及各位的主要功能與大家詳細(xì)的講解。
控制寄存器 定時(shí)器/計(jì)數(shù)器T0和T1有2個(gè)控制寄存器-TMOD和TCON,它們分別用來設(shè)置各個(gè)定時(shí)器/計(jì)數(shù)器的工作方式,選擇定時(shí)或計(jì)數(shù)功能,控制啟動(dòng)運(yùn)行,以及作為運(yùn)行狀態(tài)的標(biāo)志等。其中,TCON寄存器中另有4位用于中斷系統(tǒng)。
TMOD定時(shí)器/計(jì)數(shù)器方式寄存器單片機(jī)TMOD自動(dòng)設(shè)計(jì)工具
定時(shí)器方式控制寄存器TMOD在特殊功能寄存器中,字節(jié)地址為89H,無位地址。TMOD的格式如下圖所示。



由圖可見,TMOD的高4位用于T1,低4使用于T0,4種符號(hào)的含義如下:
GATE:門控制位。GATE和軟件控制位TR、外部引腳信號(hào)INT的狀態(tài),共同控制定時(shí)器/計(jì)數(shù)器的打開或關(guān)閉。
C/T:定時(shí)器/計(jì)數(shù)器選擇位。C/T=1,為計(jì)數(shù)器方式;C/T=0,為定時(shí)器方式。
M1M0:工作方式選擇位,定時(shí)器/計(jì)數(shù)器的4種工作方式由M1M0設(shè)定。

M1M0工作方式功能描述
00 工作方式013位計(jì)數(shù)器
01工作方式116位計(jì)數(shù)器
10工作方式2自動(dòng)再裝入8位計(jì)數(shù)器
11 工作方式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器;
定時(shí)器1:停止計(jì)數(shù)
定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD不能進(jìn)行位尋址,只能用字節(jié)傳送指令設(shè)置定時(shí)器工作方式,低半字節(jié)定義為定時(shí)器0,高半字節(jié)定義為定時(shí)器1。復(fù)位時(shí),TMOD所有位均為0。
例:設(shè)定定時(shí)器1為定時(shí)工作方式,要求軟件啟動(dòng)定時(shí)器1按方式2工作。定時(shí)器0為計(jì)數(shù)方式,要求由軟件啟動(dòng)定時(shí)器0,按方式1工作。
我們?cè)趺磥韺?shí)現(xiàn)這個(gè)要求呢?
大家先看上面TMOD寄存器各位的分布圖
第一個(gè)問題:控制定時(shí)器1工作在定時(shí)方式或計(jì)數(shù)方式是哪個(gè)位?通過前面的學(xué)習(xí),我們已知道,C/T位(D6)是定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)C/T=0時(shí)定時(shí)/計(jì)數(shù)器就為定時(shí)工作方式。所以要使定時(shí)/計(jì)數(shù)器1工作在定時(shí)器方式就必需使D6為0。
第二個(gè)問題:設(shè)定定時(shí)器1按方式2工作。上表中可以看出,要使定時(shí)/計(jì)數(shù)器1工作在方式2,M0(D4) M1(D5)的值必須是1 0。
第三個(gè)問題:設(shè)定定時(shí)器0為計(jì)數(shù)方式。與第一個(gè)問題一樣,定時(shí)/計(jì)數(shù)器0的工作方式選擇位也是C/T(D2),當(dāng)C/T=1時(shí),就工作在計(jì)數(shù)器方式。
第四個(gè)問題:由軟件啟動(dòng)定時(shí)器0,前面已講過,當(dāng)門控位GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟停就由軟件控制。
第五個(gè)問題:設(shè)定定時(shí)/計(jì)數(shù)器工作在方式1,使定時(shí)/計(jì)數(shù)器0工作在方式1,M0(D0) M1(D1)的值必須是0 1。
從上面的分析我們可以知道,只要將TMOD的各位,按規(guī)定的要求設(shè)置好后,定時(shí)器/計(jì)靈敏器就會(huì)按我們預(yù)定的要求工作。我們分析的這個(gè)例子最后各位的情況如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 0 1 0 1
二進(jìn)制數(shù)00100101=十六進(jìn)制數(shù)25H。所以執(zhí)行MOV TMOD,#25H這條指令就可以實(shí)現(xiàn)上述要求。
TCON定時(shí)器/計(jì)數(shù)器控制寄存器TCON在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低位到高位)為88H一8FH,由于有位地址,十分便于進(jìn)行位操作。
TCON的作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。
TCON的格式如下圖所示。其中,TFl,TRl,TF0和TR0位用于定時(shí)器/計(jì)數(shù)器;IEl,ITl,IE0和IT0位用于中斷系統(tǒng)。


各位定義如下:
TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)字時(shí)器1計(jì)滿溢出時(shí),由硬件使TF1置“1”,并且申請(qǐng)中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清“0”,在查詢方式下用軟件清“0”。
TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且INT1為高電平時(shí),TR1置“1”啟動(dòng)定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動(dòng)定時(shí)器1。
TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。
TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。
IE1:外部中斷1請(qǐng)求標(biāo)志。
IT1:外部中斷1觸發(fā)方式選擇位。
IE0:外部中斷0請(qǐng)求標(biāo)志。
IT0:外部中斷0觸發(fā)方式選擇位。
TCON中低4位與中斷有關(guān),我們將在下節(jié)課講中斷時(shí)再給予講解。由于TCON是可以位尋址的,因而如果只清溢出或啟動(dòng)定時(shí)器工作,可以用位操作命令。例 如:執(zhí)行“CLR TF0”后則清定時(shí)器0的溢出;執(zhí)行“SETB TR1”后可啟動(dòng)定時(shí)器1開始工作(當(dāng)然前面還要設(shè)置方式定)。
定時(shí)器/計(jì)數(shù)器的初始化由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以一般在使用定時(shí)/計(jì)數(shù)器前都要對(duì)其進(jìn)行初始化,使其按設(shè)定的功能工作。初始貨的步驟一般如下:
1、確定工作方式(即對(duì)TMOD賦值);
2、預(yù)置定時(shí)或計(jì)數(shù)的初值(可直接將初值寫入TH0、TL0或TH1、TL1);
3、根據(jù)需要開放定時(shí)器/計(jì)數(shù)器的中斷(直接對(duì)IE位賦值);
4、啟動(dòng)定時(shí)器/計(jì)數(shù)器(若已規(guī)定用軟件啟動(dòng),則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動(dòng),則需給外引腳步加啟動(dòng)電平。當(dāng)實(shí)現(xiàn)了啟動(dòng)要求后,定時(shí)器即按規(guī)定的工作方式和初值開始計(jì)數(shù)或定時(shí))。
下面介紹一下確定時(shí)時(shí)/計(jì)數(shù)器初值的具體方法。
因?yàn)樵诓煌ぷ鞣绞较掠?jì)數(shù)器位數(shù)不同,因而最大計(jì)數(shù)值也不同。
現(xiàn)假設(shè)最大計(jì)數(shù)值為M,那么各方式下的
最大值M值如下:
方式0:M=213=8 192
方式1:M=216=65 536
方式2:M=28=256
方式3:定時(shí)器0分成兩個(gè)8位計(jì)數(shù)器,所以兩個(gè)M均為256。
因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作“加1”計(jì)數(shù),并在計(jì)數(shù)滿溢出時(shí)產(chǎn)生中斷,因此初值X可以這樣計(jì)算:
X=M-計(jì)數(shù)值
下面舉例說明初值的確定方法。
例1、選擇T1方式0用于定時(shí),在P1.1輸出周期為1ms方波,晶振fosc=6MHz。
解:根據(jù)題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時(shí)時(shí)間為500us,因定時(shí)時(shí)間不長(zhǎng),取方式0即可。則M1 M0=0;因是定時(shí)器方式,所以C/T=0;在此用軟件啟動(dòng)T1,所以GATE=0。T0不用,方式字可任意設(shè)置,只要不使其進(jìn)入方式3即可,一般取0, 故TMOD=00H。系統(tǒng)復(fù)位后TMOD為0,可不對(duì)TMOD重新清0。
下面計(jì)算500us定時(shí)T1初始值:
機(jī)器周期T=12/fosc=12/(6×106)Hz=2μs
設(shè)初值為X,則:
(1013-X)×2×10-6s=500×10-6s
X=7942D=1111100000110B=1F06H
因?yàn)樵谧?3位計(jì)數(shù)器用時(shí),TL1的高3位未用,應(yīng)填寫0,TH1占用高8位,所以X的實(shí)際填寫應(yīng)為:
X=111100000000110B=F806H
結(jié)果:TH1=F8H,TL1=06H
源程序如下:
ORG 2000H
MOV TL1,#06H ;給TL1置初值
MOV TH1,#0F8H ;給TH1置初值
SETB TR1 ;啟動(dòng)T1
LP1:JBC TF1,LP2 ;查詢計(jì)數(shù)溢出否?
AJMP LP1
LP2:MOV TL1,#06H ;重新設(shè)置計(jì)數(shù)初值
MOV TH1,#0F8H
CPL P1.1 ;輸出取反
AJMP LP1 ;重復(fù)循環(huán)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1