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