汪曉晨
摘要:定時器/計數(shù)器在日常生活和工業(yè)控制中,使用非常頻繁。其通過引腳輸出方波、矩形波等常見波形,多用于控制系統(tǒng)中,以實時時鐘來進(jìn)行定時檢查,或作為串行數(shù)據(jù)通信的波特率發(fā)生器使用。本文分析了定時器與計數(shù)器的異同,并概況了3種定時的常用方法,利用AT89S51定時器來編寫程序的步驟和技巧,進(jìn)行了重點歸納總結(jié),希望對初學(xué)者有所幫助。
關(guān)鍵詞:AT89S51 定時器/計數(shù)器 方法
中圖分類號:TP368.1 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2014)11-0104-01
定時/計數(shù)器是AT89S51單片機(jī)中重要的組成部分,在很多應(yīng)用系統(tǒng)中都會使用。定時/計數(shù)器可以通過引腳輸出方波、矩形波等常見波形,這是非常普遍的一個用途;可以在控制系統(tǒng)中作為實時時鐘來進(jìn)行定時檢查;還可以利用定時器T1作為串行數(shù)據(jù)通信的波特率發(fā)生器使用。
1 定時器與計數(shù)器的異同
AT89S51單片機(jī)的定時器、計數(shù)器T0、T1,在本質(zhì)上都是屬于加1計數(shù)器,在作為定時器使用時,預(yù)先要通過公式定時器初值=得出,其中i與定時器所在的工作方式有關(guān),方式0:i=13;方式1:i=16;方式2:i=8;方式3:i=8。t表示定時時間,T表示一個機(jī)器周期時間。在作為計數(shù)器使用時,也需要預(yù)先通過公式計算計數(shù)器初值=,其中i的含義和定時器的表示一致,L為計數(shù)器的長度。不同之處主要體現(xiàn)在加1計數(shù)時,計數(shù)脈沖的來源不同,作為定時器使用時,是對片內(nèi)的機(jī)器周期進(jìn)行加1計數(shù),即經(jīng)過一個機(jī)器周期的時間,定時器的初值要自動加1;作為計數(shù)器使用時,是對外部脈沖的個數(shù)進(jìn)行計數(shù),即采集到P3.4引腳、P3.5引腳的下降沿信號,采集到引腳的一個下降沿信號,計數(shù)器初值自動加1。在概況兩者的區(qū)別時,可以簡要說為“片內(nèi)定時片外計數(shù),定時是時間,計數(shù)是個數(shù)”,這樣方便記憶。
2 常用定時方法探討
2.1 軟件定時法
軟件定時的方法是通過編寫一段延時子程序來實現(xiàn),通常我們使用英文的DELAY來作為一段延時子程序的標(biāo)號。延時子程序里的指令通常由賦值指令MOV和循環(huán)轉(zhuǎn)移指令DJNZ組成,這兩類指令的出現(xiàn)次數(shù)要相同,賦值指令的作用是給循環(huán)轉(zhuǎn)移指令的循環(huán)次數(shù)賦值,循環(huán)轉(zhuǎn)移指令一般出現(xiàn)1-3次。這種方法是一種短時間的定時方法,定時時間需要拼湊得到,需要占用CPU的時間。軟件定時法主要使用在發(fā)光二極管輪流點亮?xí)r,相鄰兩個二極管點亮中間的時間間隔可以調(diào)用延時子程序?qū)崿F(xiàn)。
2.2 可編程定時器8253
可編程定時器8253是8086微機(jī)系統(tǒng)常用的定時器/計數(shù)器芯片,每個芯片內(nèi)有3個相互獨立的16位計數(shù)器通道;技術(shù)速率可以高達(dá)2MHz;每個通道有6種工作方式,可以通過軟件設(shè)置和修改;所有的輸入、輸出都與TTL兼容,這一性能覺得8253芯片既可以與8086連接,也可以與單片機(jī)AT89S51連接。
2.3 AT89S51的T0、T1
T0、T1都具有定時器和計數(shù)器的功能,兩者的主要區(qū)別在于:(1)T0有4種方式,方式0-方式3;T1有3種方式,方式0-方式2;(2)引腳不同T0(P3.4)、T1(P3.5);(3)中斷入口地址不同,T0(000BH)、T1(001BH);(4)中斷控制位不同T0(TF0、TR0)、T1(TF1、TR1)。
利用AT89S51單片機(jī)的T0或T1編寫定時器/計數(shù)器程序時,雖然應(yīng)用情況多種多樣,但有一個整體的規(guī)律可循。首先在編寫程序前的準(zhǔn)備工作是看清題目要求,常用的編程方法有兩種,一種是中斷法,另一種是查詢法。中斷法是指利用T0或T1定時時間到或計數(shù)滿溢出時產(chǎn)生一次中斷請求,進(jìn)入中斷服務(wù)程序的方法,如果題目要求輸出方波或矩形波等規(guī)律波形時,隱含的定時時間要實現(xiàn)多次,為此,在進(jìn)入中斷服務(wù)程序中,要重新給定時器賦初始值,為第2次、第3次等定時作準(zhǔn)備。中斷法必須在程序進(jìn)入中斷服務(wù)程序執(zhí)行前,先把中斷入口地址在程序中給出。查詢法是指T0或T1定時時間到或計數(shù)滿溢出,是通過查詢中斷請求標(biāo)志位的高低電平來判斷任務(wù)是否完成。具體T0的請求標(biāo)志位TF0,T1的請求標(biāo)志位TF1,可以通過指令JB、JNB或JBC來實現(xiàn),選擇一個合適的方法來編寫程序。
主程序的初始化工作的基本步驟如下:(1)確定定時器/計數(shù)器的工作方式,通過對TMOD寄存器寫入控制字實現(xiàn);(2)給定時器/計數(shù)器的高8位寄存器(TH0、TH1)和低8位寄存器(TL0、TL1)賦初值,這一步驟需要代入定時器初值計算公式、計數(shù)器初值計算公式得到。注意的是代入公式計算的值是十進(jìn)制數(shù),需要將十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù),分別送給高8位和低8位寄存器中;(3)對中斷允許控制寄存器IE和中斷優(yōu)先級控制寄存器賦初值,這一步驟在中斷法中必須設(shè)定,在查詢法中可以省略;(4)對定時器控制寄存器賦初值,用來開啟定時器工作。
3 結(jié)語
定時器/計數(shù)器與我們的日常工作和生活息息相關(guān),本文主要概況了單片機(jī)教材中常用的幾種定時方法,特別是用內(nèi)部T0和T1定時或計數(shù),把兩者的區(qū)別和定時程序的初始化操作步驟進(jìn)行總結(jié),希望對初學(xué)者有思想上的啟發(fā)作用。
參考文獻(xiàn)
[1]沈威羽.單片機(jī)定時器的應(yīng)用與誤差糾正[J].經(jīng)營管理者,2009,(1):20.
[2]鄧興成.單片機(jī)原理與實踐指導(dǎo)[M].機(jī)械工業(yè)出版社,2009:186-195.
[3]龐新法.定時器與計數(shù)器淺析[J].價值工程,2014,(20):191-192.
數(shù)字技術(shù)與應(yīng)用2014年11期