單片機(jī)的計數(shù)功能應(yīng)用舉例
定時/計數(shù)器實質(zhì)上是一個加1計數(shù)器。它隨著計數(shù)器的輸入脈沖進(jìn)行自加1,也就是每來一個脈沖,計數(shù)器就自動加1,,當(dāng)加到計數(shù)器為全1時,再輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使相應(yīng)的中斷標(biāo)志位置1,向CPU發(fā)出中斷請求(定時/計數(shù)器中斷允許時)。如果定時/計數(shù)器工作于定時模式,則表示定時時間已到;如果工作于計數(shù)模式,則表示計數(shù)值已滿。
可見,由溢出時計數(shù)器的值減去計數(shù)初值才是加1計數(shù)器的計數(shù)值。
定時/計數(shù)器的實質(zhì)是加1計數(shù)器(16位),由高8位和低8位兩個寄存器THx和TLx組成。TMOD是定時/計數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設(shè)置溢出標(biāo)志。
初始化程序應(yīng)完成如下工作:
對TMOD賦值,以確定T0和T1的工作方式。
計算初值,并將其寫入TH0、TL0或TH1、TL1。
中斷方式時,則對EA賦值,開放定時器中斷。
使TR0或TR1置位,啟動定時/計數(shù)器定時或計數(shù)。
計數(shù)器初值的計算:
機(jī)器周期也就是CPU完成一個基本操作所需要的時間。
計數(shù)值N乘以機(jī)器周期Tcy就是定時時間t
當(dāng)你使用12MHZ的外部晶振的時候,晶振周期(振蕩周期)=1/12 ,機(jī)器周期(1個機(jī)器周期等于12個振蕩周期)=(1/12) * 12 =1us。(如果采用方式1即為16位定時/計數(shù)器,那么一次記滿就最多為65536*1us = 65536us)
【例1】利用定時/計數(shù)器對外部事件計數(shù)。要求:檢測定時/計數(shù)器T0引腳上出現(xiàn)的下降沿信號的個數(shù),當(dāng)個數(shù)達(dá)到6時,控制單片機(jī)P1.1引腳由高電平變?yōu)榈碗娖健?
解:
(1)任務(wù)分析
定時/計數(shù)器可以累計其脈沖輸入引腳上的下降沿信號的個數(shù),在本例中要求定時/計數(shù)器T0的計數(shù)個數(shù)Q=6。由式(4-6)可知,在工作方式1和工作方式2下,定時/計數(shù)器可計數(shù)的下降沿的最大個數(shù)分別為216=65536和28=256,所以這兩種工作方式都可以滿足任務(wù)要求。本例僅以方式1為例實現(xiàn)設(shè)計任務(wù)。
(2)T0初值計算
由式(4-4)可知,計數(shù)器個數(shù)Q=6時,定時/計數(shù)器的初值為M=216-6=65530=0FFFAH,即TH0=0FFH和TL0=0FAH。
(3)確定定時/計數(shù)器方式控制字TMOD
因為不進(jìn)行引腳電平的測量,所以GATE=0;使用計數(shù)功能,所以C/T=1;工作于方式1,所以M1M0=01。本程序與T1無關(guān),所以TMOD的高4位可全部為0。因此TMOD=05H。
(4)程序設(shè)計
以下是采用中斷法的參考程序。
【例2】利用定時/計數(shù)器模擬下降沿觸發(fā)的外部中斷。要求:利用定時/計數(shù)器T0模擬下降沿觸發(fā)的外部中斷,每當(dāng)定時/計數(shù)器T0的脈沖輸入引腳(P3.4)出現(xiàn)下降沿時,使單片機(jī)P1.1引腳的電平狀態(tài)發(fā)生反轉(zhuǎn)。
解:
(1)任務(wù)分析
下降沿觸發(fā)的外部中斷(INT0和INT1)在中斷輸入引腳(P3.2和P3.3)上出現(xiàn)下降沿信號時發(fā)出中斷請求。在計數(shù)模式下,定時/計數(shù)器的寄存器將累計其脈沖輸入引腳(P3.4和P3.5)上出現(xiàn)的下降沿個數(shù),當(dāng)達(dá)到預(yù)定個數(shù)時產(chǎn)生中斷請求。對于N位的定時/計數(shù)器,若將其初值M設(shè)置為2N-1,則脈沖輸入引腳出現(xiàn)的下降沿可使定時器發(fā)出中斷請求,這與下降沿觸發(fā)的外部中斷效果一致。因此,可以利用定時/計數(shù)器模擬外部中斷。但需要注意的是,外部中斷可以自動重復(fù)觸發(fā),而定時/計數(shù)器每次產(chǎn)生中斷后要重新賦初值。為了更好地模擬外部中斷的自動重復(fù)觸發(fā),可以將定時器/計數(shù)器設(shè)置為可以自動重新賦初值的工作方式2。
(2)T0初值的計算
根據(jù)任務(wù)分析的結(jié)果可知,需要將T0設(shè)置為工作方式2,位數(shù)N=8,初值M=2N-1=28-
1=255=0FFH。
(3)確定定時/計數(shù)器方式控制字TMOD
對于T0,因為不進(jìn)行引腳電平的測量,所以GATE=0;使用定時功能,所以C/T=1;工作于方式2,所以M1M0=10。因為本程序與T1無關(guān),所以TMOD中與T1有關(guān)的高4位可全部為0。因此TMOD=06H。
(4)程序設(shè)計
以下為采用中斷法的參考程序。