mcs51單片機(jī)計(jì)數(shù)器工作方式0 定時(shí)時(shí)間的計(jì)算與編程舉例
掃描二維碼
隨時(shí)隨地手機(jī)看文章
定T0或T1無(wú)論用作定時(shí)器或計(jì)數(shù)器都有4種工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作狀態(tài)。下面以T1為例,分述各種工作方式的特點(diǎn)和用法。
工作方式0:13位方式由TL1的低5位和TH1的8位構(gòu)成13位計(jì)數(shù)器(TL1的高3位無(wú)效)。工作方式0的結(jié)構(gòu)見下圖:
圖中,C/T為定時(shí)/計(jì)數(shù)選擇:C/T=0,T1為定時(shí)器,定時(shí)信號(hào)為振蕩周期12分頻后的脈沖;C/T=l,T1為計(jì)數(shù)器,計(jì)數(shù)信號(hào)來(lái)自引腳T1的外部信號(hào)。
定時(shí)器T1能否啟動(dòng)工作,還受到了R1、GATE和引腳信號(hào)INT1的控制。由圖中的邏輯電路可知,當(dāng)GATE=0時(shí),只要TR1=1就可打開控制門,使定時(shí)器工作;當(dāng)GATE=1時(shí),只有TR1=1且INT1=1,才可打開控制門。GATE,TR1,C/T的狀態(tài)選擇由定時(shí)器的控制寄存器TMOD,TCON中相應(yīng)位狀態(tài)確定,INT1則是外部引腳上的信號(hào)。
在一般的應(yīng)用中,通常使GATE=0,從而由TRl的狀態(tài)控制Tl的開閉:TRl=1,打開T1;TRl=0,關(guān)閉T1。在特殊的應(yīng)用場(chǎng)合,例如利用定時(shí)器測(cè)量接于INT1引腳上的外部脈沖高電平的寬度時(shí),可使GATE=1,TRl=1。當(dāng)外部脈沖出現(xiàn)上升沿,亦即INT1由0變1電平時(shí),啟動(dòng)T1定時(shí),測(cè)量開始;一旦外部脈沖出現(xiàn)下降沿,亦即INT1由l變O時(shí)就關(guān)閉了T1。
定時(shí)器啟動(dòng)后,定時(shí)或計(jì)數(shù)脈沖加到TLl的低5位,從預(yù)先設(shè)置的初值(時(shí)間常數(shù))開始不斷增1。TL1計(jì)滿后,向THl進(jìn)位。當(dāng)TL1和THl都計(jì)滿之后,置位T1的定時(shí)器回零標(biāo)志TFl,以此表明定時(shí)時(shí)間或計(jì)數(shù)次數(shù)已到,以供查詢或在打開中斷的條件下,可向CPU請(qǐng)求中斷。如需進(jìn)一步定時(shí)/計(jì)數(shù),需用指令重置時(shí)間常數(shù)。
方式0是13位計(jì)數(shù)結(jié)構(gòu)的工作方式,其計(jì)數(shù)器由TH0全部8位和TL0的低5位構(gòu)成。當(dāng)TL0的低5
位計(jì)數(shù)溢出時(shí),向TH0進(jìn)位,而全部13位計(jì)數(shù)溢出時(shí),則向計(jì)數(shù)溢出標(biāo)志位TF0進(jìn)位。
在方式0下,當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是:1~8192(213)
當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:
(213-計(jì)數(shù)初值)×晶振周期×12或(213-計(jì)數(shù)初值)×機(jī)器周期
其時(shí)間單位與晶振周期或機(jī)器周期相同(ms)。
例題1:當(dāng)某單片機(jī)系統(tǒng)的外接晶振頻率為6MHz,該系統(tǒng)的最小定時(shí)時(shí)間為:
[213-(213-1)]×[1/(6×106)]×12=2×10-6=2(ms)
最大定時(shí)時(shí)間為:內(nèi)容來(lái)自單片機(jī)之家www.dpj100.com
(213-0)×[1/(6×106)]×12=16384×10-6=16384(ms)
或:最小定時(shí)單位×1013=16384(ms)
例題2:設(shè)某單片機(jī)系統(tǒng)的外接晶振頻率為6MHz,使用定時(shí)器1以方式0產(chǎn)生周期為500ms的等寬正方波連續(xù)脈沖,并由P1.0輸出。
以查詢方式完成。
⑴計(jì)算計(jì)數(shù)初值
欲產(chǎn)生500ms的等寬正方波脈沖,只需在P1.0端以250ms為周期交替輸出高低電平即可實(shí)現(xiàn),為此定時(shí)時(shí)間應(yīng)為250ms。使用6MHz晶振,根據(jù)上例的計(jì)算,可知一個(gè)機(jī)器周期為2ms。方式0為13位計(jì)數(shù)結(jié)構(gòu)。設(shè)待求的計(jì)數(shù)初值為X,則:
(213-X)×2×10-6=250×10-6
求解得:
X=213-(250÷2)=8067。
二進(jìn)制數(shù)表示為1111110000011。十六進(jìn)制表示,高8位為FCH,放入TH1,即TH1=FCH;低5位為03H。放入TL1,即TL1=03H。
⑵TMOD寄存器初始化
為把定時(shí)器/計(jì)數(shù)器1設(shè)定為方式0,則M1M0=00;為實(shí)現(xiàn)定時(shí)功能,應(yīng)使C/T=0;為實(shí)現(xiàn)定時(shí)器/計(jì)數(shù)器1的運(yùn)行控制,則GATE=0。定時(shí)器/計(jì)數(shù)器0不用,有關(guān)位設(shè)定為0。因此TMOD寄存器應(yīng)初始化為00H。
⑶由定時(shí)器控制寄存器TCON中的TR1位控制定時(shí)的啟動(dòng)和停止TR1=1啟動(dòng),TR1=0停止。
⑷程序設(shè)計(jì):
MOV TMOD,#00H;設(shè)置T1為工作方式0
MOV TH1,#OFCH;設(shè)置計(jì)數(shù)初值
MOV TL1,#03H
MOV IE,#00H;禁止中斷
LOOP:SETB TR1;啟動(dòng)定時(shí)
JBC TF1,LOOP1;查詢計(jì)數(shù)溢出
AJMPLOOP
LOOP1:MOV TH1,#FCH;重新設(shè)置計(jì)數(shù)初值
MOV TL1,#03H
CLR TF1;計(jì)數(shù)溢出標(biāo)志位清0
CPL P1.0;輸出取反
AJMP LOOP;重復(fù)循環(huán)