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