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