單片機學習之十七:計數(shù)器的應(yīng)用
每次按下k0按鍵2次后,在P0.0輸出一個周期是100ms的方波信號。
二、實驗目的
掌握內(nèi)部定時/計數(shù)器作計數(shù)功能的應(yīng)用
三、實驗任務(wù)分析
在前面的3個試驗里面,我們都是讓T0工作于定時方式,從而產(chǎn)生一段固定的時間。但是T0和T1除了可以用于定時外,還可以用于對外部輸入的脈沖進行計數(shù)。在這個試驗里面,我們學習T0工作于計數(shù)方式時的編程方法。
在本試驗中,我們用T0對外部按鍵的動作進行計數(shù)。看一下定時/計數(shù)器的邏輯圖如下圖所示:
我們發(fā)現(xiàn)當C/T=1的時候,定時/計數(shù)器T0可對T0(P3.4)端計數(shù),每當T0端產(chǎn)生一個負跳變的時候,計數(shù)器執(zhí)行一次加1的運算。為了讓k0按鍵按下的時候,在p3.4端產(chǎn)生一個負跳變,我們首先要做的是把p1.1和p3.4用導線短路,如下圖13-2所示,這樣才能滿足試驗要求。
這個試驗的思路如下:讓T0在計數(shù)2次時,產(chǎn)生溢出中斷,在T0的中斷服務(wù)程序我們啟動T1開始計數(shù),然后在T1的溢出中斷里面把P0.0取反,這樣就可以產(chǎn)生符合我們實驗要求的信號
為了讓k0按下2次后T0產(chǎn)生溢出中斷,我們可以讓T0工作于計數(shù)方式,并選擇可重新置入計數(shù)初值的8位計數(shù)器模式2;為了產(chǎn)生100ms的方波信號,我們讓T1工作于定時方式,選擇16位計數(shù)器模式。所以tmod的初值應(yīng)該是:0001 0110,即16h。
四、實驗程序
org 0000h
ajmp main
org 000bh ;T0溢出中斷入口地址
ajmp time0
org 001bh
ajmp time1 ;T1溢出中斷入口地址
org 0020h
main: clr p1.5
setb p0.0
mov sp,#70h ;設(shè)置堆棧
mov tmod,#16h ;T0、T1初始化,T0工作在計數(shù)方式,T1工作在定時方式
mov tl0,#0feh ;T0置計數(shù)初值,計數(shù)2次后產(chǎn)生溢出中斷
mov th0,#0feh ;計數(shù)初值置入常數(shù)緩沖區(qū)
mov th1,#3ch ;T1置入計數(shù)初值,產(chǎn)生50ms定時
mov tl1,#0b0h
setb et0 ;允許T0溢出中斷
setb et1 ;允許T1溢出中斷
setb tr0 ;啟動T0計數(shù)
setb ea cpu開中斷
ajmp $
time0: setb tr1 ;啟動T1計數(shù)
reti
time1: mov th1,#3ch ;T1重裝計數(shù)初值
mov tl1,#0b0h
cpl p0.0 ;P0.0取反
reti
end
五、幾點說明
在運行該程序時,有時可能會發(fā)現(xiàn)并不是按鍵按下兩次后產(chǎn)生信號,這是因為手動按鍵的時候可能會發(fā)生抖動情況,導致計數(shù)器計數(shù)的緣故。
評論