PIC單片機(jī)16F84的內(nèi)部硬件資源(五)
7 延時(shí)和定時(shí)
在設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)時(shí),經(jīng)常會(huì)遇到需要使某一過(guò)程(如加溫、加壓等)持續(xù)一段時(shí)間的情況,如連續(xù)加壓1分鐘,通電2分鐘等。單片機(jī)如何正確確定這段時(shí)間呢?這里可通過(guò)兩種方式,即延時(shí)和定時(shí)來(lái)實(shí)現(xiàn)。試看下例。
在應(yīng)用系統(tǒng)中要求PIC16F84的RAO端控制一個(gè)發(fā)光二極管按一定頻率閃亮,可通過(guò)右圖的電路來(lái)實(shí)現(xiàn)。同時(shí)還必須為16F84編制一個(gè)程序。由電路圖可知,要使發(fā)光二極管LED按一定的頻率閃亮,只要使RAO端輸出一個(gè)變化的高→低→高……電平即可。由此設(shè)計(jì)出如下的源程序(清單1):
list P=16F84,F(xiàn)=INHX8M;……
ORG 0
MOVLW 0 ;主程序開始
TRIS 5 ;置RA口為輸出
BCF 5,0 ;RA口0位清零
LOOP:CALL DELAY;閃動(dòng)延時(shí)
COMF 5 ;RA口求反,亮—滅交替
GOTO LOOP ;循環(huán)
;……
DELAY ;以下為延時(shí)子程序
MOVLW D′50
MOVWF 8
LOOP1:MOVWF 9
LOOP2:DECFSZ 9,F(xiàn)
GOTO LOOP2
DECFSZ 8,F(xiàn)
GOTO LOOP1
RETLW 0
由清單1可知,當(dāng)主程序開始時(shí),首先將工作寄存器W清零,然后將W寄存器的內(nèi)容送TRISA寄存器,使其清零,以設(shè)置RA口為輸出。接著又將RA口的第5位清零,使LED開始時(shí)處于熄滅狀態(tài)。隨之持續(xù)一段時(shí)間,即執(zhí)行延時(shí)子程序,再將RA口取反,變?yōu)楦唠娖捷敵觯琇ED發(fā)光,再延時(shí),又使RA口取反,LED熄滅……。這樣,LED就一暗一亮,持續(xù)交替進(jìn)行。
在這里,使LED亮、暗持續(xù)一段時(shí)間是通過(guò)單片機(jī)執(zhí)行延時(shí)子程序DELAY來(lái)實(shí)現(xiàn)的。此延時(shí)程序的核心就是讓單片機(jī)的CPU反復(fù)執(zhí)行使寄存器內(nèi)容減1的指令DECFSZ。即將十進(jìn)制數(shù)50分別裝入通用寄存器F8、F9,以進(jìn)行50×50=2500次的減1操作。如果執(zhí)行一次DECFSZ指令需1個(gè)指令周期(跳轉(zhuǎn)時(shí)需2個(gè)周期),若設(shè)振蕩頻率為100kHz,即指令周期為40μs,則延時(shí)時(shí)間為2500×40=100000μs=100ms,即01秒。實(shí)際上還略為大些。此延時(shí)時(shí)間已超過(guò)人眼的視覺(jué)保留時(shí)間。因而能看清LED的明、暗交替變化。
如果我們需要更長(zhǎng)的延時(shí)時(shí)間,可仿照上例,裝入更大的數(shù)或引入多重循環(huán)。因此,在原則上,延時(shí)時(shí)間可根據(jù)需要任意延長(zhǎng)。
不過(guò),采用延時(shí)程序來(lái)持續(xù)某一過(guò)程的方式有缺陷。延時(shí)就是使CPU在某幾條指令上“轉(zhuǎn)圈”,延時(shí)越長(zhǎng),“轉(zhuǎn)圈”數(shù)越多,這時(shí),CPU不能再去執(zhí)行其它操作,如監(jiān)視溫度、濕度等。這在某些實(shí)時(shí)控制系統(tǒng)中,不允許這樣做。為此,在單片機(jī)16F84中,專門設(shè)置了一個(gè)“鬧鐘”——定時(shí)器TMR0。需要某過(guò)程延續(xù)多長(zhǎng)時(shí)間,可將其“撥入”TMR0,到時(shí)它會(huì)發(fā)生“中斷”,告訴CPU定時(shí)時(shí)間到。要CPU暫停其它工作,轉(zhuǎn)過(guò)來(lái)執(zhí)行“中斷子程序”,完成輸出開、關(guān)信號(hào)之類的任務(wù)后,再回去執(zhí)行其中斷的工作。這樣,就使CPU的工作效率提高。因而,延時(shí)的使用有局限性,采用定時(shí)器TMR0則可用于各種場(chǎng)合中。
在設(shè)計(jì)單片機(jī)應(yīng)用系統(tǒng)時(shí),經(jīng)常會(huì)遇到需要使某一過(guò)程(如加溫、加壓等)持續(xù)一段時(shí)間的情況,如連續(xù)加壓1分鐘,通電2分鐘等。單片機(jī)如何正確確定這段時(shí)間呢?這里可通過(guò)兩種方式,即延時(shí)和定時(shí)來(lái)實(shí)現(xiàn)。試看下例。
在應(yīng)用系統(tǒng)中要求PIC16F84的RAO端控制一個(gè)發(fā)光二極管按一定頻率閃亮,可通過(guò)右圖的電路來(lái)實(shí)現(xiàn)。同時(shí)還必須為16F84編制一個(gè)程序。由電路圖可知,要使發(fā)光二極管LED按一定的頻率閃亮,只要使RAO端輸出一個(gè)變化的高→低→高……電平即可。由此設(shè)計(jì)出如下的源程序(清單1):
list P=16F84,F(xiàn)=INHX8M;……
ORG 0
MOVLW 0 ;主程序開始
TRIS 5 ;置RA口為輸出
BCF 5,0 ;RA口0位清零
LOOP:CALL DELAY;閃動(dòng)延時(shí)
COMF 5 ;RA口求反,亮—滅交替
GOTO LOOP ;循環(huán)
;……
DELAY ;以下為延時(shí)子程序
MOVLW D′50
MOVWF 8
LOOP1:MOVWF 9
LOOP2:DECFSZ 9,F(xiàn)
GOTO LOOP2
DECFSZ 8,F(xiàn)
GOTO LOOP1
RETLW 0
由清單1可知,當(dāng)主程序開始時(shí),首先將工作寄存器W清零,然后將W寄存器的內(nèi)容送TRISA寄存器,使其清零,以設(shè)置RA口為輸出。接著又將RA口的第5位清零,使LED開始時(shí)處于熄滅狀態(tài)。隨之持續(xù)一段時(shí)間,即執(zhí)行延時(shí)子程序,再將RA口取反,變?yōu)楦唠娖捷敵觯琇ED發(fā)光,再延時(shí),又使RA口取反,LED熄滅……。這樣,LED就一暗一亮,持續(xù)交替進(jìn)行。
在這里,使LED亮、暗持續(xù)一段時(shí)間是通過(guò)單片機(jī)執(zhí)行延時(shí)子程序DELAY來(lái)實(shí)現(xiàn)的。此延時(shí)程序的核心就是讓單片機(jī)的CPU反復(fù)執(zhí)行使寄存器內(nèi)容減1的指令DECFSZ。即將十進(jìn)制數(shù)50分別裝入通用寄存器F8、F9,以進(jìn)行50×50=2500次的減1操作。如果執(zhí)行一次DECFSZ指令需1個(gè)指令周期(跳轉(zhuǎn)時(shí)需2個(gè)周期),若設(shè)振蕩頻率為100kHz,即指令周期為40μs,則延時(shí)時(shí)間為2500×40=100000μs=100ms,即01秒。實(shí)際上還略為大些。此延時(shí)時(shí)間已超過(guò)人眼的視覺(jué)保留時(shí)間。因而能看清LED的明、暗交替變化。
如果我們需要更長(zhǎng)的延時(shí)時(shí)間,可仿照上例,裝入更大的數(shù)或引入多重循環(huán)。因此,在原則上,延時(shí)時(shí)間可根據(jù)需要任意延長(zhǎng)。
不過(guò),采用延時(shí)程序來(lái)持續(xù)某一過(guò)程的方式有缺陷。延時(shí)就是使CPU在某幾條指令上“轉(zhuǎn)圈”,延時(shí)越長(zhǎng),“轉(zhuǎn)圈”數(shù)越多,這時(shí),CPU不能再去執(zhí)行其它操作,如監(jiān)視溫度、濕度等。這在某些實(shí)時(shí)控制系統(tǒng)中,不允許這樣做。為此,在單片機(jī)16F84中,專門設(shè)置了一個(gè)“鬧鐘”——定時(shí)器TMR0。需要某過(guò)程延續(xù)多長(zhǎng)時(shí)間,可將其“撥入”TMR0,到時(shí)它會(huì)發(fā)生“中斷”,告訴CPU定時(shí)時(shí)間到。要CPU暫停其它工作,轉(zhuǎn)過(guò)來(lái)執(zhí)行“中斷子程序”,完成輸出開、關(guān)信號(hào)之類的任務(wù)后,再回去執(zhí)行其中斷的工作。這樣,就使CPU的工作效率提高。因而,延時(shí)的使用有局限性,采用定時(shí)器TMR0則可用于各種場(chǎng)合中。
成都 衛(wèi)東
知識(shí)競(jìng)賽試題:
22以本版上文電路為準(zhǔn),在A1口上接一LED,要使該LED閃亮的延時(shí)間隔約為04秒,請(qǐng)寫出其源程序清單。
本文標(biāo)簽:PIC單片機(jī)16F84的內(nèi)部硬件資源(五)
* 由于無(wú)法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《PIC單片機(jī)16F84的內(nèi)部硬件資源(五)》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。
關(guān)于“PIC單片機(jī)16F84的內(nèi)部硬件資源(五)”的更多資訊
個(gè)人求購(gòu)










