第07章 定時(shí)與計(jì)數(shù)_第1頁(yè)
第07章 定時(shí)與計(jì)數(shù)_第2頁(yè)
第07章 定時(shí)與計(jì)數(shù)_第3頁(yè)
第07章 定時(shí)與計(jì)數(shù)_第4頁(yè)
第07章 定時(shí)與計(jì)數(shù)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1秒表計(jì)時(shí)秒表計(jì)時(shí)2秒表通常有6位數(shù)字,前兩位數(shù)字代表分鐘,中間兩位代表秒鐘,最后兩位則是更小的計(jì)時(shí)單位1/100秒。當(dāng)計(jì)時(shí)啟動(dòng)后,1/100秒位的兩位數(shù)字在1秒內(nèi)飛快的由00增加到99。秒表內(nèi)部的電路需要有較高的精度才能準(zhǔn)確地以1/100秒為間隔更新顯示數(shù)字。雖說(shuō)如此,這個(gè)任務(wù)對(duì)于單片機(jī)來(lái)說(shuō)卻是小菜一碟。7.1 定時(shí)與計(jì)數(shù)定時(shí)與計(jì)數(shù)7.1.1 什么是定時(shí)?什么是定時(shí)?3設(shè)定加熱一只雞的時(shí)間為15分鐘(900s),啟動(dòng)后微波爐開始倒計(jì)時(shí),并在顯示屏上顯示剩余時(shí)間。圖示當(dāng)前剩余時(shí)間為5分45秒(345s)。單片機(jī)只需要每過(guò)1s 更新一次顯示時(shí)間,當(dāng)更新顯示900次(900s)后就讓微波爐停止加熱

2、即可。所以定時(shí)過(guò)程可視為單片機(jī)計(jì)算單位時(shí)間(可以是1s、1ms、1s)的個(gè)數(shù),當(dāng)計(jì)時(shí)完成后,把單位時(shí)間乘以個(gè)數(shù)就得到了定時(shí)的時(shí)間長(zhǎng)度。7.1.2 什么是計(jì)數(shù)?什么是計(jì)數(shù)?4計(jì)數(shù)就是計(jì)算事件的發(fā)生次數(shù)。霍爾開關(guān)每當(dāng)車輪轉(zhuǎn)過(guò)一圈時(shí)磁鐵接近一次霍爾開關(guān),于是就會(huì)輸出一個(gè)脈沖。如果把這個(gè)脈沖輸入單片機(jī),單片機(jī)可以在每次脈沖到來(lái)時(shí)計(jì)一個(gè)數(shù),假設(shè)60秒內(nèi)單片機(jī)的計(jì)數(shù)值為n,于是車輪每轉(zhuǎn)過(guò)一圈的時(shí)間,即脈沖的周期為:60Tn如果車輪的半徑為r,于是車輪的周長(zhǎng)為C=2r,得自行車的行駛速度為:226060CrrnVTn7.1.3 單片機(jī)的單片機(jī)的Timer5AT89S51單片機(jī)有兩個(gè)TimerTimer 0和

3、Timer 1。當(dāng)Timer工作于定時(shí)功能下時(shí),模擬開關(guān)打到T位置上,Timer計(jì)數(shù)電路計(jì)算的是單位時(shí)間脈沖。單位時(shí)間脈沖的周期與單片機(jī)的機(jī)器周期相等,如果晶振的頻率是12MHz,則1個(gè)機(jī)器周期=1s,于是單位時(shí)間脈沖的周期為1s。也就是說(shuō),晶振頻率=12MHz,Timer計(jì)數(shù)電路每過(guò)1s計(jì)數(shù)值增加1。所以,在定時(shí)結(jié)束時(shí)Timer計(jì)數(shù)電路的計(jì)數(shù)值乘以1s就能知道流逝了多少時(shí)間,從而起到定時(shí)的功能。7.1.3 單片機(jī)的單片機(jī)的Timer6如果圖中模擬開關(guān)打到C位置上,進(jìn)入Timer計(jì)數(shù)電路的則是外部事件脈沖。這樣Timer計(jì)數(shù)電路的計(jì)數(shù)值就是外部事件脈沖的個(gè)數(shù),這也就是單片機(jī)Timer的計(jì)數(shù)功能

4、。7.2 與與Timer有關(guān)的寄存器有關(guān)的寄存器7.2.1 Timer實(shí)現(xiàn)的延時(shí)實(shí)現(xiàn)的延時(shí)7感受Timer的作延時(shí)用。如果晶振頻率為12MHz,則程序?qū)崿F(xiàn)50ms的延時(shí)。7.2.2 Timer模式控制寄存器模式控制寄存器TMOD8TMOD是“timer mode”的縮寫,用于設(shè)置Timer的工作模式。TMOD在特殊功能寄存器的地址89H上,如圖11-5所示。7.2.2 Timer模式控制寄存器模式控制寄存器TMOD9AT89S51單片機(jī)有兩個(gè)TimerTimer 0和Timer 1,它們的工作模式由TMOD中的對(duì)應(yīng)位來(lái)分別設(shè)置。TMOD的長(zhǎng)度為1個(gè)字節(jié)(8位),高4位和低4位分別控制Timer

5、 1和Timer 0。其中由M11、M01控制Timer 1的工作模式,M10、M00控制Timer 0的工作模式。舉個(gè)例子,我們想令Timer 0工作在定時(shí)器的模式0下(軟件啟動(dòng)),而Timer 1工作在計(jì)數(shù)器的模式1下(軟件啟動(dòng)),則設(shè)置Timer的指令為“MOV TMOD, #01010000B”。7.2.3 Timer寄存器寄存器10Timer寄存器里保存的是計(jì)數(shù)值,當(dāng)Timer啟動(dòng)后每過(guò)一個(gè)機(jī)器周期(定時(shí)模式)或輸入一個(gè)外部事件脈沖(計(jì)數(shù)模式),計(jì)數(shù)值會(huì)自動(dòng)增加1。通過(guò)計(jì)數(shù)值我們可知道Timer啟動(dòng)之后流逝了多少時(shí)間(定時(shí)模式)或收到多少個(gè)外部事件脈沖。AT89S51單片機(jī)有兩個(gè)Ti

6、mer,它們有各自的Timer寄存器,且每個(gè)Timer寄存器由高位字節(jié)寄存器THx和低位字節(jié)寄存器TLx組成。即Timer 0寄存器由TH0和TL0組成,Timer 1寄存器由TH1和TL1組成。這4個(gè)寄存器位于特殊功能寄存器的8AH8DH上。7.2.3 Timer寄存器寄存器11Timer寄存器TL0、TH0、TL1、TH1可以像累加器A一樣進(jìn)行數(shù)據(jù)的裝載和讀取。假如需要向Timer 0寄存器載入計(jì)數(shù)初始值B35AH,可通過(guò)指令“MOV TL0, #5AH”和“MOV TH0, #0B3H”實(shí)現(xiàn)。另外,指令“MOV R2, TH1”則把Timer 1寄存器的高位字節(jié)TH1的值讀到工作寄存器R

7、2中。7.2.4 Timer控制寄存器控制寄存器TCON12TCON是“timer control”的縮寫,用于控制Timer的啟動(dòng)或停止,并指示Timer是否溢出。TCON在特殊功能寄存器的地址88H上。TCON的高4位的名稱及功能描述:7.2.4 Timer控制寄存器控制寄存器TCON13TCON寄存器中,TFx是溢出標(biāo)志位,當(dāng)Timer寄存器計(jì)數(shù)達(dá)最大值之后再增加1時(shí)產(chǎn)生溢出,TFx位被硬件置1。于是可通過(guò)指令“JBC TFx, rel”或“JB TFx, rel”來(lái)判斷TFx位是否為1,從而判斷定時(shí)/計(jì)數(shù)是否完成。另外,TCON寄存器的TRx位控制Timer啟動(dòng)或關(guān)閉。7.2.5 Ti

8、mer用作定時(shí)用作定時(shí)/計(jì)數(shù)器小結(jié)計(jì)數(shù)器小結(jié)14AT89S51單片機(jī)中提供了2個(gè)通用的16位 Timer,分別為Timer 0和Timer 1,它們可以被獨(dú)立配置成定時(shí)或計(jì)數(shù)器并工作于不同模式下。當(dāng)作為定時(shí)器時(shí),Timer將在設(shè)定好的時(shí)間下工作并在計(jì)時(shí)完成后產(chǎn)生溢出。當(dāng)作為計(jì)數(shù)器時(shí),Timer將計(jì)算輸入T0或T1管腳的脈沖個(gè)數(shù),當(dāng)計(jì)數(shù)達(dá)到預(yù)設(shè)的值時(shí)Timer同樣可以產(chǎn)生溢出。7.3 Timer的工作模式的工作模式17.3.1模式模式1的特點(diǎn)的特點(diǎn)15工作模式1下的Timer是一個(gè)16位的定時(shí)器或計(jì)數(shù)器,Timer寄存器TLx和THx共16位全部用來(lái)裝計(jì)數(shù)值。當(dāng)指令“SETB TRx”啟動(dòng)Tim

9、er x后,Timer寄存器將從計(jì)數(shù)初始值開始,每過(guò)一個(gè)機(jī)器周期計(jì)數(shù)值增加1,直到FFFFH再增加1溢出時(shí)完成一次計(jì)數(shù)過(guò)程。同時(shí)溢出標(biāo)志TFx被硬件置1,可通過(guò)檢測(cè)TFx標(biāo)志位來(lái)了解計(jì)數(shù)是否完成。當(dāng)計(jì)數(shù)完成后,使用指令“CLR TRx”和“CLR TFx”來(lái)關(guān)閉Timer。如果需要循環(huán)Timer的定時(shí)或計(jì)數(shù)過(guò)程,Timer寄存器TLx和THx中必須再次裝載原來(lái)的計(jì)數(shù)初始值。7.3.2模式模式1的設(shè)置的設(shè)置16TMOD、Timer寄存器、TCON等寄存器中相關(guān)控制、標(biāo)志位的操作實(shí)例:讓P1.0口輸出頻率為100Hz方波信號(hào)(占空比為50%的矩形波)。7.3.2模式模式1的設(shè)置的設(shè)置17設(shè)置Tim

10、er的工作模式。程序中使用的是Timer 0(當(dāng)然也可以使用Timer 1),所以通過(guò)指令“MOV TMOD, #01H”向Timer模式控制寄存器TMOD中裝載01H,即0000 0001B。GATE0=0說(shuō)明使用軟件控制啟動(dòng)或關(guān)閉,C/T0#=0使Timer 0作定時(shí)器使用,M10=0和M00=1則令Timer 0工作于模式1下。7.3.2模式模式1的設(shè)置的設(shè)置18往Timer寄存器(TL0和TH0)載入計(jì)數(shù)初始值。兩條MOV指令使TL0和TH0中分別裝載78H和0ECH,即計(jì)數(shù)的初始值為EC78H。如果啟動(dòng)Timer后,從EC78H到Timer溢出需要經(jīng)過(guò)1388H個(gè)機(jī)器周期(10000

11、H-EC78H=1388H),也就是5000個(gè)機(jī)器周期。如果晶振頻率為12MHz,機(jī)器周期為1s。于是完成一次Timer計(jì)時(shí)需要5000s。7.3.2模式模式1的設(shè)置的設(shè)置19啟動(dòng)Timer。指令“SETBTR0”使TR0=1以啟動(dòng)Timer 0。啟動(dòng)之后,Timer寄存器中的計(jì)數(shù)值會(huì)自動(dòng)地每過(guò)1個(gè)機(jī)器周期增加1。如圖11-9所示,Timer寄存器從計(jì)數(shù)初始值EC78H計(jì)數(shù)到FFFFH。7.3.2模式模式1的設(shè)置的設(shè)置20檢測(cè)Timer溢出標(biāo)志(TF0)。當(dāng)Timer寄存器中的計(jì)數(shù)值增加到FFFFH后再增加1,計(jì)數(shù)值變成0000H,并產(chǎn)生Timer溢出,這使得TF0=1,于是指令“JNBTF0

12、, CHECK”循環(huán)檢測(cè)TF0位,從而等待Timer計(jì)數(shù)完成。關(guān)閉Timer。Timer完成計(jì)數(shù)后,用指令“CLRTR0”將TR0位清0以關(guān)閉定時(shí)器。如果不用指令關(guān)閉Timer,Timer寄存器中的計(jì)數(shù)值還會(huì)繼續(xù)以機(jī)器周期為周期進(jìn)行增加1的操作。7.3.2模式模式1的設(shè)置的設(shè)置21清0溢出標(biāo)志(TF0)。將Timer溢出標(biāo)志TF0清0,以便下次檢測(cè)標(biāo)志位的操作得以正常進(jìn)行(步驟)。重新裝載計(jì)數(shù)初始值。如果需要再次使用Timer進(jìn)行同樣的定時(shí)操作,則指令“JMPLOAD”帶回到步驟重新裝載計(jì)數(shù)初始值并重新開始新一輪的計(jì)數(shù)過(guò)程。因?yàn)槌绦?1-2在不斷變換P1.0口狀態(tài)(指令“CPLP1.0”)并進(jìn)

13、行5000s的延時(shí),于是就形成了頻率100Hz的方波信號(hào)。7.3.3模式模式1的計(jì)數(shù)初始值的計(jì)數(shù)初始值22如果我們知道晶振頻率 ,可根據(jù)以下的公式計(jì)算出模式1下Timer作定時(shí)器的定時(shí)時(shí)長(zhǎng):定時(shí)時(shí)長(zhǎng)t的單位為s, 為晶振頻率,單位是MHz。FFFF是Timer寄存器的最大計(jì)數(shù)值,為十六進(jìn)制數(shù)。MMLL表示Timer寄存器中裝載的計(jì)數(shù)初始值,其中MM是高位THx的數(shù)值,LL是低位TLx的數(shù)值,MMLL也是十六進(jìn)制數(shù)。Val 的意思是將(FFFF-MMLL+1)的計(jì)算結(jié)果轉(zhuǎn)換成十進(jìn)制,再與機(jī)器周期 相乘即可得到定時(shí)器的定時(shí)時(shí)長(zhǎng)t。12FFFFMMLL+1(MHz)ctValf()cf7.3.4設(shè)計(jì)

14、模式設(shè)計(jì)模式1的計(jì)數(shù)初始值的計(jì)數(shù)初始值23假如要設(shè)計(jì)一個(gè)方波發(fā)生器,要求從P1.0口輸出頻率f=2kHz的方波,即P1.0口輸出高、低電平持續(xù)時(shí)間分別為250s 。如何確定計(jì)數(shù)初始值?250s即Timer作定時(shí)器的定時(shí)時(shí)長(zhǎng)t,計(jì)數(shù)初始值設(shè)計(jì)步驟為:將定時(shí)時(shí)長(zhǎng)t除以 。用65536減去步驟得到的數(shù)。用科學(xué)計(jì)算器把步驟的得數(shù)轉(zhuǎn)換成十六進(jìn)制形式MMLL,如果轉(zhuǎn)換結(jié)果100H,則MM=00。12(MHz)cf7.3.4設(shè)計(jì)模式設(shè)計(jì)模式1的計(jì)數(shù)初始值的計(jì)數(shù)初始值24最后得計(jì)數(shù)初始值:THx=MM,TLx=LL。根據(jù)以上的步驟,設(shè)計(jì)計(jì)數(shù)初始值。假設(shè)晶振頻率=12MHz,定時(shí)時(shí)長(zhǎng)t=250s,則有:250s

15、 /1s=25065536 250=6528665286(十進(jìn)制)=FF06H(十六進(jìn)制)THx=FF,TLx=067.3.4設(shè)計(jì)模式設(shè)計(jì)模式1的計(jì)數(shù)初始值的計(jì)數(shù)初始值25“MOVTMOD, #10H”向TMOD中裝入的是10H,設(shè)置Timer 1作定時(shí)器,模式1下。Timer寄存器TL1和TH1載入計(jì)數(shù)初始值FF06H, “SETB TR1”啟動(dòng)Timer 1。“CHECK”段用指令“JNB TF1, CHECK”來(lái)檢測(cè)Timer定時(shí)是否完成,檢測(cè)過(guò)程花去的時(shí)間就是定時(shí)時(shí)長(zhǎng)250s,在此過(guò)程中P1.0口保持著高電平或低電平。當(dāng)Timer定時(shí)完成,指令“CLR TR1”關(guān)閉Timer。7.4

16、Timer的工作模式的工作模式07.4.1模式模式0的特點(diǎn)的特點(diǎn)26模式0下Timer寄存器只有13位,計(jì)數(shù)值的高8位裝入THx中,TLx的低5位裝入的是剩下的5位計(jì)數(shù)值。13位Timer寄存器的最大計(jì)數(shù)范圍是1FFFH,模式0下,當(dāng)Timer啟動(dòng)后,Timer寄存器將從計(jì)數(shù)初始值開始,每過(guò)一個(gè)機(jī)器周期計(jì)數(shù)值增加1,直到1FFFH再增加1就會(huì)溢出,相應(yīng)的TFx位就會(huì)被硬件置1,完成一次計(jì)數(shù)過(guò)程。這與模式1下計(jì)數(shù)至FFFFH相比,模式0的單次最大定時(shí)時(shí)長(zhǎng)較短。7.4.2設(shè)計(jì)模式設(shè)計(jì)模式0的計(jì)數(shù)初始值的計(jì)數(shù)初始值27模式0下的Timer設(shè)置過(guò)程與模式1下相同,只是Timer模式控制寄存器TMOD中

17、的M1x和M0 x位均為0。計(jì)數(shù)初始值的設(shè)計(jì):將定時(shí)時(shí)長(zhǎng)t除以 。用8192減去步驟得到的數(shù)。用科學(xué)計(jì)算器把步驟的得數(shù)轉(zhuǎn)換成13位二進(jìn)制數(shù)M N3 N2 N1 N0 P3 P2 P1 P0 Q3 Q2 Q1 Q0,高位如果是空的用0補(bǔ)上,依次填入THx的8位和TLx的低5位中,TLx的高3位用0代替。12(MHz)cf7.4.2設(shè)計(jì)模式設(shè)計(jì)模式0的計(jì)數(shù)初始值的計(jì)數(shù)初始值28最后得計(jì)數(shù)初始值:THx=M N3 N2 N1 N0 P3 P2 P1(二進(jìn)制),TLx=0 0 0 P0 Q3 Q2 Q1 Q0(二進(jìn)制)。根據(jù)以上的步驟,晶振頻率 =12MHz,定時(shí)時(shí)長(zhǎng)500s,則有:500s /1s=

18、5008192-500=76927692(十進(jìn)制)=1111000001100(二進(jìn)制),1 1 1 1 0 0 0 0 0 1 1 0 0 M N3 N2 N1 N0 P3 P2 P1 P0 Q3 Q2 Q1 Q0 7.4.2設(shè)計(jì)模式設(shè)計(jì)模式0的計(jì)數(shù)初始值的計(jì)數(shù)初始值29THx=11110000B=F0H,TLx=00001100B=0CH。7.5 Timer的工作模式的工作模式27.5.1模式模式2的特點(diǎn)的特點(diǎn)30工作模式2下的Timer是一個(gè)具有自動(dòng)重新載入功能的8位定時(shí)器或計(jì)數(shù)器,Timer寄存器只由TLx充當(dāng)。模式2下的Timer還具有自動(dòng)重新載入計(jì)數(shù)初始值的功能。在初始化Timer

19、時(shí),計(jì)數(shù)初始值同時(shí)裝載到Timer寄存器THx和TLx中,當(dāng)完成一次計(jì)數(shù)后Timer溢出之時(shí),TLx會(huì)自動(dòng)從THx中復(fù)制原來(lái)保存的計(jì)數(shù)初始值,而不需要再次用MOV指令向Timer寄存器載入計(jì)數(shù)初始值。這時(shí)只要把標(biāo)志位TFx清0,Timer就可以再次啟動(dòng)重復(fù)計(jì)數(shù)過(guò)程了。7.5.1模式模式2的特點(diǎn)的特點(diǎn)31比如,TLx和THx中都載入了計(jì)數(shù)初始值3FH,當(dāng)Timer啟動(dòng)后,只有TLx中的計(jì)數(shù)值會(huì)隨機(jī)器周期增加,直到Timer溢出后,標(biāo)志位TFx=1,THx中的計(jì)數(shù)初始值被自動(dòng)載入TLx中。這樣在新一輪的計(jì)數(shù)一開始,TLx中已經(jīng)有了初始值3FH。7.5.2模式模式2的設(shè)置的設(shè)置327.5.3設(shè)計(jì)模式

20、設(shè)計(jì)模式2的計(jì)數(shù)初始值的計(jì)數(shù)初始值33在模式2下Timer作定時(shí)器的計(jì)數(shù)初始值只有8位,同時(shí)載入TLx和THx中。將定時(shí)時(shí)長(zhǎng)t除以 。用256減去步驟得到的數(shù)。用科學(xué)計(jì)算器把步驟中的得數(shù)轉(zhuǎn)換成十六進(jìn)制形式TT。最后得計(jì)數(shù)初始值:THx=TLx=TT。假設(shè)某單片機(jī)系統(tǒng)的晶振頻率=12MHz,定時(shí)時(shí)長(zhǎng)t=50s,根據(jù)以上步驟可以設(shè)計(jì)計(jì)數(shù)初始值:50s /1s=50256 50=206206(十進(jìn)制)=CEH(十六進(jìn)制)THx=CE,TLx=CE12(MHz)cf7.6 Timer的工作模式的工作模式37.6.1模式模式3的特點(diǎn)的特點(diǎn)34模式3,Timer 0寄存器TL0和TH0變成兩個(gè)獨(dú)立的8位T

21、imer寄存器。也就是說(shuō),Timer 0變成了兩個(gè)獨(dú)立的8位Timer,但不具備自動(dòng)重新裝載計(jì)數(shù)初始值的特性。以TL0為Timer寄存器的Timer使用TMOD寄存器和TCON寄存器中原來(lái)與Timer 0有關(guān)的控制位和標(biāo)志位,設(shè)置的方法與前面相同。而以TH0為Timer寄存器的Timer使用原來(lái)Timer 1的溢出標(biāo)志位TF1和啟動(dòng)/關(guān)閉控制位TR1,但不能用作計(jì)數(shù)器使用。7.6.2模式模式3的設(shè)置的設(shè)置35利用Timer 0工作在模式3下衍生出來(lái)的兩個(gè)分別以TH0和TL0為Timer寄存器的8位Timer作為延時(shí)子程序的基礎(chǔ),單片機(jī)P1.0口輸出周期T=300s、占空比為1/3的矩形波。7.

22、6.2模式模式3的設(shè)置的設(shè)置367.6.2模式模式3的設(shè)置的設(shè)置377.6.3設(shè)計(jì)模式設(shè)計(jì)模式3的計(jì)數(shù)初始值的計(jì)數(shù)初始值38在模式3下兩個(gè)獨(dú)立的Timer寄存器只有8位,其計(jì)數(shù)初始值的計(jì)算方法相同。將定時(shí)時(shí)長(zhǎng)t除以 。用256減去步驟得到的數(shù)。用科學(xué)計(jì)算器把步驟中的得數(shù)轉(zhuǎn)換成十六進(jìn)制形式TT。最后得計(jì)數(shù)初始值:TH0或TL0=TT。假設(shè)某單片機(jī)系統(tǒng)的晶振頻率 =12MHz,定時(shí)時(shí)長(zhǎng)t=150s,根據(jù)以上步驟可以設(shè)計(jì)計(jì)數(shù)初始值:150s /1s=150256 150=106106(十進(jìn)制)=6AH(十六進(jìn)制)TH0或TL0=6AH12(MHz)cf7.7 計(jì)數(shù)器計(jì)數(shù)器7.7.1計(jì)數(shù)器的應(yīng)用計(jì)數(shù)器

23、的應(yīng)用397.7.2計(jì)數(shù)器的設(shè)置計(jì)數(shù)器的設(shè)置40在Timer模式控制寄存器TMOD的C/Tx#位用于設(shè)置Timer用作定時(shí)器或計(jì)數(shù)器,當(dāng)C/Tx#=1時(shí),對(duì)應(yīng)的Timer用作計(jì)數(shù)器。Timer 0和Timer 1可以被配置成兩個(gè)獨(dú)立的計(jì)數(shù)器,分別對(duì)輸入單片機(jī)T0端(14管腳)和T1端(15管腳)的脈沖進(jìn)行計(jì)數(shù)。Timer作計(jì)數(shù)器使用時(shí),Timer寄存器THx和TLx的計(jì)數(shù)值記錄的是輸入單片機(jī)的脈沖的個(gè)數(shù)。7.7.2計(jì)數(shù)器的設(shè)置計(jì)數(shù)器的設(shè)置41例子:設(shè)計(jì)為每按下4次按鈕開關(guān)S1, P0口上的8支發(fā)光二極管就會(huì)做BCD碼加1的變化。7.7.2計(jì)數(shù)器的設(shè)置計(jì)數(shù)器的設(shè)置42“MOVTMOD,#0000

24、0110B”設(shè)置Timer 0作計(jì)數(shù)器,模式2。MOV指令向TH0、TL0裝入計(jì)數(shù)初始值(256-4),這樣當(dāng)T0端輸入4個(gè)脈沖后,TL0中的計(jì)數(shù)值就會(huì)溢出從而完成一次計(jì)數(shù)過(guò)程。7.7.2計(jì)數(shù)器的設(shè)置計(jì)數(shù)器的設(shè)置43啟動(dòng)計(jì)數(shù)器后,循環(huán)等待按下按鈕開關(guān)4次,Timer 0溢出TH0中保存的計(jì)數(shù)初始值自動(dòng)裝入TL0中為新一輪計(jì)數(shù)準(zhǔn)備,之后跳到“LOOP_2”段,兩條CLR指令關(guān)閉計(jì)數(shù)器和清0標(biāo)志位后,P0口的數(shù)據(jù)進(jìn)行了BCD碼的加1操作。之后又循環(huán)到“LOOP”段,重新啟動(dòng)計(jì)數(shù)器。7.7.4計(jì)數(shù)器的計(jì)數(shù)初始值設(shè)定計(jì)數(shù)器的計(jì)數(shù)初始值設(shè)定44Timer作計(jì)數(shù)器時(shí),計(jì)數(shù)初始值的設(shè)定比較簡(jiǎn)單。模式2中,因

25、為TL0和TH0都載入相同的初始值,所以只要把8位Timer的最大計(jì)數(shù)值減去所要計(jì)數(shù)的數(shù)值即可(256-4)。模式3與此相似,只不過(guò)模式3中只有Timer 0可用。如果在模式1,為16位的計(jì)數(shù)器,需要計(jì)數(shù)的數(shù)值為n(十進(jìn)制),則計(jì)數(shù)初始值為65536-n(十進(jìn)制)。轉(zhuǎn)換成十六進(jìn)制后高位字節(jié)裝入THx,低位字節(jié)載入TLx即可。更方便的是,匯編語(yǔ)言中可以使用“HIGH”和“LOW”來(lái)完成這個(gè)轉(zhuǎn)換與表示,假如計(jì)數(shù)值為35,則可使用以下兩條指令來(lái)裝入計(jì)數(shù)初始值:7.7.4計(jì)數(shù)器的計(jì)數(shù)初始值設(shè)定計(jì)數(shù)器的計(jì)數(shù)初始值設(shè)定45在模式0則為13位的計(jì)數(shù)器,如果需要計(jì)數(shù)的數(shù)值為n,則THx中將裝入(8192-n)

26、/32,而TLx中裝入(8192-n)MOD32。假如計(jì)數(shù)值為35,則可以使用以下兩條指令來(lái)裝入計(jì)數(shù)初始值:7.7.5各種模式下的計(jì)數(shù)器各種模式下的計(jì)數(shù)器46制藥廠裝藥丸生產(chǎn)線控制電路的一部分,用于檢測(cè)漏斗頸通過(guò)藥丸的紅外傳感器的輸出信號(hào)進(jìn)入單穩(wěn)態(tài)多諧振蕩器SN54121,經(jīng)過(guò)SN54121的過(guò)濾后,計(jì)數(shù)脈沖送入單片機(jī)的T0端。假設(shè)每個(gè)藥瓶裝20粒藥丸,程序11-9程序11-12展示了Timer在4種模式下實(shí)現(xiàn)同一功能的軟件設(shè)計(jì),今后有需要時(shí)可直接參考這幾個(gè)程序。7.7.6計(jì)數(shù)脈沖的要求計(jì)數(shù)脈沖的要求47Timer作計(jì)數(shù)器時(shí),實(shí)際上是在計(jì)算計(jì)數(shù)脈沖下降沿的個(gè)數(shù),或者說(shuō)在計(jì)數(shù)脈沖的電平由高跳低時(shí)

27、Timer寄存器中的計(jì)數(shù)值增加1,假如原來(lái)TL0=33,計(jì)數(shù)脈沖來(lái)到后每次下降沿使TL0增加1。7.7.6計(jì)數(shù)脈沖的要求計(jì)數(shù)脈沖的要求48單片機(jī)檢測(cè)下降沿需要一定的時(shí)間。所以外部事件發(fā)生的最高頻率fe應(yīng)小于晶振頻率/24。假設(shè)晶振頻率=12MHz,則輸入T0或T1口的計(jì)數(shù)脈沖的最高頻率fe應(yīng)小于500kHz。另外,確保脈沖在跳變之前至少被采樣一次,則該電平至少要保持一個(gè)機(jī)器周期,假設(shè)使用12MHz的晶振,計(jì)數(shù)脈沖的電平信號(hào)在跳變之前至少應(yīng)保持1s。7.7.7 TMOD寄存器的門控位寄存器的門控位49當(dāng)Timer模式控制寄存器TMOD中GATEx位=0時(shí),Timer的啟動(dòng)/關(guān)閉由軟件控制,指令“

28、SETB TRx”啟動(dòng)Timer x,而指令“CLR TRx”實(shí)施關(guān)閉。如果當(dāng)GATEx位=1時(shí),并同時(shí)使TCON寄存器的TRx=1即可通過(guò)外部信號(hào)(通過(guò)單片機(jī)的/INTx端)對(duì)Timer x實(shí)施啟動(dòng)與關(guān)閉,當(dāng)/INTx =1時(shí)啟動(dòng)而/INTx =0關(guān)閉。此所謂硬件啟動(dòng)/關(guān)閉Timer。 /INTx 端代表的是 /INT0(12管腳,控制Timer 0)或/INT1(13管腳,控制Timer 1)。7.8 看門狗看門狗7.8.1什么是看門狗什么是看門狗50看門狗(watchdog)是單片機(jī)系統(tǒng)中一種強(qiáng)制單片機(jī)復(fù)位的技術(shù),實(shí)現(xiàn)這種技術(shù)依靠的是看門狗定時(shí)器,它具有以下兩個(gè)特征:看門狗定時(shí)器必須在一

29、定時(shí)間內(nèi)由軟件對(duì)其進(jìn)行刷新,如若不然,當(dāng)看門狗定時(shí)器溢出時(shí)就會(huì)導(dǎo)致單片機(jī)復(fù)位。當(dāng)看門狗定時(shí)器啟動(dòng)之后,程序是沒(méi)有辦法讓它停止的,只有程序定時(shí)對(duì)其進(jìn)行刷新防止溢出,或者等到看門狗定時(shí)器溢出時(shí)使單片機(jī)復(fù)位。7.8.2單片機(jī)的內(nèi)置看門狗單片機(jī)的內(nèi)置看門狗51AT89S51單片機(jī)內(nèi)部已經(jīng)集成了一個(gè)14位的看門狗定時(shí)器,控制這個(gè)看門狗定時(shí)器的寄存器是WDTRST。當(dāng)單片機(jī)上電復(fù)位時(shí),默認(rèn)看門狗功能被禁止。要想啟動(dòng)看門狗功能,需要把立即數(shù)1EH和0E1H按順序?qū)懭隬DTRST寄存器中。7.8.2單片機(jī)的內(nèi)置看門狗單片機(jī)的內(nèi)置看門狗52當(dāng)看門狗啟動(dòng)后,其14位定時(shí)器的計(jì)數(shù)值每過(guò)1個(gè)機(jī)器周期自動(dòng)增加1,直到當(dāng)看門狗溢出時(shí),它會(huì)使單片機(jī)的RST端(9管腳)電平被拉高從而促成單片機(jī)的復(fù)位。當(dāng)看門狗被啟動(dòng)后,程序是無(wú)法將其關(guān)閉的,而只有當(dāng)單片機(jī)通過(guò)RST端重新復(fù)位或看門狗自己溢出導(dǎo)致單片機(jī)復(fù)位時(shí)看門狗才會(huì)關(guān)閉。通過(guò)向WDTRST寄存器順序?qū)懭肓⒓磾?shù)1EH和0E1H序列后,看門狗啟動(dòng),為了防止看門狗溢

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論