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

下載本文檔

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

文檔簡(jiǎn)介

1、第4章 單片機(jī)的中端系統(tǒng)及定時(shí)器/計(jì)數(shù)器4.2 定時(shí)/計(jì)數(shù)器微波爐中的定時(shí)器微波爐中的定時(shí)器2設(shè)定加熱一只雞的時(shí)間為15分鐘(900s),啟動(dòng)后微波爐開始倒計(jì)時(shí),并在顯示屏上顯示剩余時(shí)間。單片機(jī)每過1s 更新一次顯示時(shí)間,當(dāng)更新顯示900次后就讓微波爐停止加熱。自行車上的計(jì)數(shù)器自行車上的計(jì)數(shù)器3霍爾開關(guān)每當(dāng)車輪轉(zhuǎn)過一圈時(shí)磁鐵接近一次霍爾開關(guān),于是就會(huì)輸出一個(gè)脈沖。如果把這個(gè)脈沖輸入單片機(jī),單片機(jī)可以在每次脈沖到來時(shí)計(jì)一個(gè)數(shù),假設(shè)60秒內(nèi)單片機(jī)的計(jì)數(shù)值為n,車輪的半徑為r,于是車輪的周長(zhǎng)為C=2r,得自行車的行駛速度為:226060CrrnVTn4計(jì)數(shù)器的容量計(jì)數(shù)器的容量 8051單片機(jī)內(nèi)部有兩

2、個(gè)計(jì)數(shù)器,分別稱為T0和T1,這兩個(gè)計(jì)數(shù)器分別由兩個(gè)兩個(gè)8位位的RAM單元組成,即每個(gè)計(jì)數(shù)器都是16位的計(jì)數(shù)器,最大的計(jì)數(shù)量是65536。溢出 來看水滴的例子,當(dāng)水持續(xù)落下,最終有一滴水使得盆中的水滿了。這時(shí)如果再有一滴水落下,水會(huì)溢出來。單片機(jī)計(jì)數(shù)器的容量是16位,也就是說,最大的計(jì)數(shù)值為65536,因此計(jì)數(shù)計(jì)到65536時(shí)就會(huì)產(chǎn)生溢出。一旦產(chǎn)生溢出,單片機(jī)內(nèi)部定時(shí)器控制寄存器一旦產(chǎn)生溢出,單片機(jī)內(nèi)部定時(shí)器控制寄存器TCON中中的的TF0/TF1變?yōu)樽優(yōu)椤?”。定時(shí)計(jì)數(shù)器的工作原理定時(shí)計(jì)數(shù)器的工作原理 計(jì)數(shù)器的最大的計(jì)數(shù)值為65536,因此計(jì)數(shù)計(jì)到65536就會(huì)產(chǎn)生溢出。如果要計(jì)數(shù)100,就

3、先往計(jì)數(shù)器中放進(jìn)65436,再來100個(gè)脈沖,就會(huì)產(chǎn)生溢出。 定時(shí)也是如此,假如每個(gè)脈沖是1s,則計(jì)滿65536個(gè)脈沖需時(shí)65.536ms。如果只要定時(shí)10ms,10ms為10000s,所以,只要在計(jì)數(shù)器里面放進(jìn)55536就可以了。定時(shí)器/計(jì)數(shù)器的方式寄存器TMOD TMOD在特殊功能寄存器中,字節(jié)地址為89H定時(shí)器/計(jì)數(shù)器的控制字(1)GATE位:門控位。當(dāng)GATE=0時(shí),只要TCON中的TR0為1就能使計(jì)數(shù)器工作。當(dāng)GATE=1和TR0=1時(shí),是否計(jì)數(shù)取決于INT0引腳的信號(hào),當(dāng)INT0由0變?yōu)?時(shí),開始計(jì)數(shù);當(dāng)INT0由1變?yōu)?時(shí),停止計(jì)數(shù)。(2)C/T位:計(jì)數(shù)器模式和定時(shí)器模式的選擇位

4、。C/T=0時(shí),為定時(shí)器模式。C/T=1時(shí),為計(jì)數(shù)器模式。 (3)M1M0:4種工作方式的選擇位。通過對(duì)M1M0的設(shè)置,可使定時(shí)器工作于4種工作方式之一,如表6-1所示。TCONTCON寄存器寄存器TF0/TF1(TCON.5/7),定時(shí)器溢出標(biāo)志位),定時(shí)器溢出標(biāo)志位=0=0:定時(shí)器未溢出;:定時(shí)器未溢出;=1=1:定時(shí)器溢出。:定時(shí)器溢出。TR0/TR1TR0/TR1:定時(shí)器運(yùn)行啟停控制位:定時(shí)器運(yùn)行啟停控制位: =0=0:定時(shí)器停止運(yùn)行;:定時(shí)器停止運(yùn)行; =1=1:定時(shí)器啟動(dòng)運(yùn)行。:定時(shí)器啟動(dòng)運(yùn)行。工作方式工作方式1: 16位定時(shí)位定時(shí)/計(jì)數(shù)器計(jì)數(shù)器在這種方式下,由TH0的8位和TL0

5、的8位組成一個(gè)16位計(jì)數(shù)器。最大計(jì)數(shù)值為65536。當(dāng)16位計(jì)數(shù)器從設(shè)定的初值不斷加1直到溢出時(shí),置置TCON的的TF0位為位為1,系統(tǒng)把計(jì)數(shù)器清,系統(tǒng)把計(jì)數(shù)器清“0”。工作方式工作方式0: 13位定時(shí)位定時(shí)/計(jì)數(shù)器計(jì)數(shù)器在這種方式下,由TH0的8位和TL0的低5位組成一個(gè)13位計(jì)數(shù)器。最大計(jì)數(shù)值為8192。當(dāng)16位計(jì)數(shù)器從設(shè)定的初值不斷加1直到溢出時(shí),置置TCON的的TF0位為位為1,系統(tǒng)把計(jì)數(shù)器清,系統(tǒng)把計(jì)數(shù)器清“0”。P122【例例4-9】P2.0接LED,高電平亮,單片機(jī)所接晶振12MHz,用定時(shí)器的查詢方式實(shí)現(xiàn)燈的閃爍。要求亮、暗間隔60ms。 R2220XTAL218XTAL119

6、ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT8

7、9C51C122pFC222pFC310uFX112MR110kD1P122【例例4-9】P2.0接LED,高電平亮,單片機(jī)所接晶振12MHz,用定時(shí)器的查詢方式實(shí)現(xiàn)燈的閃爍。要求亮、暗間隔60ms。 分析:分析:每個(gè)機(jī)器周期為1s,使用工作方式1,可以定時(shí)65.536ms;方式0可以定時(shí)8.192ms 假設(shè)應(yīng)用的是定時(shí)器1,工作在方式1,利用TMOD設(shè)置方法可知TMOD=00010000B。 需要往定時(shí)器里放入預(yù)置數(shù): 65536-60ms/1s =5536=15A0H. 程序清單如下: ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV P2, #00H ;關(guān)所有

8、的燈 MOV TMOD, #00010000B;定時(shí)器/計(jì)數(shù)器1工作于方式1 MOV TH1, #15H MOV TL1, #0A0H;預(yù)置數(shù)5536 SETB TR1 ;定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1開始運(yùn)行開始運(yùn)行 LOOP:JBC TF1,NEXT ;若TF1為1清TF1并轉(zhuǎn)NEXT處 AJMP LOOP ;否則跳轉(zhuǎn)到LOOP處運(yùn)行 NEXT:CPL P2.0 MOV TH1, #15H MOV TL1,#0A0H ;重置定時(shí)器重置定時(shí)器/計(jì)數(shù)器的初值計(jì)數(shù)器的初值 AJMP LOOP SJMP $ END工作方式工作方式0: 13位定時(shí)位定時(shí)/計(jì)數(shù)器計(jì)數(shù)器在這種方式下,由TH0的8位和TL

9、0的低5位組成一個(gè)13位計(jì)數(shù)器。最大計(jì)數(shù)值為8192。當(dāng)16位計(jì)數(shù)器從設(shè)定的初值不斷加1直到溢出時(shí),置置TCON的的TF0位為位為1,系統(tǒng)把計(jì)數(shù)器清,系統(tǒng)把計(jì)數(shù)器清“0”。工作方式工作方式2:自動(dòng)裝載初值的:自動(dòng)裝載初值的8位定時(shí)器位定時(shí)器 方式2把TL0配置成一個(gè)可以自動(dòng)恢復(fù)初值的8位計(jì)數(shù)器,TH0作為常數(shù)緩沖器,由軟件預(yù)置值。 當(dāng)TL0產(chǎn)生溢出時(shí),一方面使溢出標(biāo)志TF0置1,同時(shí)把TH0中的8位數(shù)據(jù)重新裝入TL0中。此動(dòng)作是由硬件自動(dòng)完成此動(dòng)作是由硬件自動(dòng)完成的,不需要軟件,這不同于方式的,不需要軟件,這不同于方式0和方式和方式1。 工作方式3 在這種工作方式下T0被拆成兩個(gè)獨(dú)立的定時(shí)器/

10、計(jì)數(shù)器來用。 TL0可以構(gòu)成8位的定時(shí)器或計(jì)數(shù)器的工作方式,并使用T0的控制位、TF0的中斷源。 TH0則只能作為定時(shí)器來用,使用則只能作為定時(shí)器來用,使用T1中的中的TR1、TF1的中斷的中斷源。源。 工作方式3 需要注意的是,方式3是將T0拆成兩個(gè)獨(dú)立的8位定時(shí)器/計(jì)數(shù)器來用,而不是T1,如果把T1置于方式3,T1將處于關(guān)閉狀態(tài)。 一般情況下,T0以工作方式3狀態(tài)運(yùn)行,僅在T1工作于方工作于方式式2而且不要求中斷的前提下而且不要求中斷的前提下才可以使用,此時(shí)T1可被用作串行口波特率發(fā)生器。 方式方式3特別適合于單片機(jī)需要特別適合于單片機(jī)需要1個(gè)獨(dú)立的定時(shí)器個(gè)獨(dú)立的定時(shí)器/計(jì)數(shù)器、計(jì)數(shù)器、1

11、個(gè)定時(shí)器及個(gè)定時(shí)器及1個(gè)串行口波特率發(fā)生器的情況。個(gè)串行口波特率發(fā)生器的情況。定時(shí)器/計(jì)數(shù)器的預(yù)置數(shù)的計(jì)算方法 1計(jì)數(shù)器初值的計(jì)算 把計(jì)數(shù)器從初值開始作加1計(jì)數(shù)到計(jì)滿溢出所需要的計(jì)數(shù)值設(shè)定為C,計(jì)數(shù)初值設(shè)定為D,由此便可得到以下的計(jì)算通式:D=M-C (6-1) 式中,M為計(jì)數(shù)器模值,該值和計(jì)數(shù)器工作方式有關(guān),在方式0時(shí)M為213 ,在方式1時(shí)M為216 ,在方式2和方式3時(shí)M為2 8 。 2定時(shí)器初值的計(jì)算 在定時(shí)器模式下,定時(shí)器定時(shí)時(shí)間T的計(jì)算公式為:T=(TM-TC)12/fOSCs (6-2) 式中,TM為計(jì)數(shù)器從初值開始作加1計(jì)數(shù)到計(jì)滿溢出所需要的時(shí)間,TM為模值,與定時(shí)器的工作方式

12、有關(guān);fOSC是單片機(jī)晶體振蕩器的頻率;TC為定時(shí)器的定時(shí)初值。在式(6-2)中,若設(shè)TC =0,則定時(shí)器定時(shí)時(shí)間為最大(初值為0,計(jì)數(shù)從全0到全1,溢出后又為全0)。 【例【例6-1】設(shè)T0在方式0下工作,定時(shí)時(shí)間為1ms,時(shí)鐘振蕩頻率為6MHz。計(jì)算預(yù)置數(shù)。 解:將數(shù)據(jù)代入公式(6-2)得:(213-TC)12/6 s =1ms=1000sTC=213 -500=7692=1E0CH=1111000001100B 因?yàn)門L1的高3位沒用,對(duì)計(jì)算出的TC要進(jìn)行修正,即在低5位前插入3個(gè)0,修正后的定時(shí)初值X=1111000000001100B=F00CH。可用下列指令實(shí)現(xiàn)。MOV TL0,#

13、0CH;5位送TL0寄存器 MOV TH0,#0F0H ;8位送T0寄存器 13【例例4-6】若單片機(jī)時(shí)鐘頻率fOSC為12MHz,請(qǐng)計(jì)算定時(shí)2ms所需的定時(shí)器初值。 解:由于定時(shí)器工作在方式2和方式3下時(shí)的最大定時(shí)時(shí)間只有0.256ms,要定時(shí)2ms,則要用到循環(huán)程序,因此用方式0或方式1較方便。 若采用方式0,則根據(jù)式(6-2)可得定時(shí)器初值為:TC=213 -2ms/1s=6129 利用計(jì)算機(jī)附件中的計(jì)算器可將6129轉(zhuǎn)換為十六進(jìn)制數(shù)為1830H。注意:這不是定時(shí)器工作在方式0時(shí)的初值,因定時(shí)器工作在方式0時(shí)是13位,高字節(jié)8位,低字節(jié)5位,所以還要進(jìn)行適當(dāng)?shù)淖儞Q,修正后為C110H。即

14、:TH0應(yīng)預(yù)置C1H,TL0應(yīng)預(yù)置10H(高3位為0)。 若采取方式1,則有: TC=216-2ms/1s=63536=F830H 即:TH0應(yīng)預(yù)置F8H,TL0應(yīng)預(yù)置30H。程序清單如下: ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV P2, #00H ;關(guān)所有的燈 MOV TMOD, #00010000B;定時(shí)器/計(jì)數(shù)器1工作于方式1 MOV TH1, #15H MOV TL1, #0A0H;預(yù)置數(shù)5536 SETB TR1 ;定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1開始運(yùn)行開始運(yùn)行 LOOP:JBC TF1,NEXT ;若TF1為1清TF1并轉(zhuǎn)NEXT處 AJMP L

15、OOP ;否則跳轉(zhuǎn)到LOOP處運(yùn)行 NEXT:CPL P2.0 MOV TH1, #15H MOV TL1,#0A0H ;重置定時(shí)器重置定時(shí)器/計(jì)數(shù)器的初值計(jì)數(shù)器的初值 AJMP LOOP SJMP $ ENDlEA:總允許位(一級(jí)控制)。EA=0時(shí),禁止一切中斷;EA=1時(shí),中斷開放。lET1、ET0:定時(shí)器T1、T0允許位,ET1=1或ET0=1時(shí),允許TF1或TF0引發(fā)中斷,否則禁止相應(yīng)的定時(shí)器中斷。定時(shí)定時(shí)/ /計(jì)數(shù)中斷計(jì)數(shù)中斷 -TCON-TCON的定時(shí)的定時(shí)/ /計(jì)數(shù)器中斷標(biāo)志計(jì)數(shù)器中斷標(biāo)志TF0/TF1(TCON.5/7),定時(shí)器溢出中斷請(qǐng)求位),定時(shí)器溢出中斷請(qǐng)求位=0=0:定

16、時(shí)器未溢出;:定時(shí)器未溢出;=1=1:定時(shí)器溢出申請(qǐng)中斷,進(jìn)中斷后自動(dòng)清零。:定時(shí)器溢出申請(qǐng)中斷,進(jìn)中斷后自動(dòng)清零。TR0/TR1TR0/TR1:定時(shí)器運(yùn)行啟停控制位:定時(shí)器運(yùn)行啟停控制位: =0=0:定時(shí)器停止運(yùn)行;:定時(shí)器停止運(yùn)行; =1=1:定時(shí)器啟動(dòng)運(yùn)行。:定時(shí)器啟動(dòng)運(yùn)行。(2)用定時(shí)器的中斷方式。 ORG 0000H AJMP MAIN ORG 001BH ;定時(shí)器1的中斷向量地址 AJMPTIME1 ;跳轉(zhuǎn)到真正的定時(shí)器程序處 ORG 0030H MAIN: MOV P1, #0FFH;關(guān)所有的燈 MOV TMOD, #00010000B;定時(shí)器/計(jì)數(shù)器1工作于方式1 MOV TH

17、1, #15H MOV TL1, #0A0H;預(yù)置數(shù)5536 SETBEA ;開總中斷允許 SETBET1 ;開定時(shí)器/計(jì)數(shù)器1允許 SETBTR1 ;定時(shí)器/計(jì)數(shù)器1開始運(yùn)行LOOP: AJMP LOOP ; 真正工作時(shí),這里可寫任意程序TIME1: PUSHACC ; 定時(shí)器1的中斷處理程序 PUSHPSW ; 將PSW和ACC壓入堆棧保護(hù) CPL P1.0 MOV TH1, #15H MOV TL1,#0A0H; 重置定時(shí)常數(shù)重置定時(shí)常數(shù) POP PSW POP ACC RETI ; 中斷返回 END定時(shí)器定時(shí)器/計(jì)數(shù)器的初始化步驟:計(jì)數(shù)器的初始化步驟: (1)確定工作方式(即對(duì)TMOD

18、賦值)。 (2)預(yù)置定時(shí)或計(jì)數(shù)的初值(可直接將初值寫入TH0、TL0或TH1、TL1)。 (3)根據(jù)需要開放定時(shí)器/計(jì)數(shù)器的中斷(直接對(duì)IE位賦值)以及給中斷優(yōu)先級(jí)寄存器IP選送中斷優(yōu)先級(jí)字,以開放相應(yīng)中斷和設(shè)定中斷優(yōu)先級(jí)。 (4)啟動(dòng)定時(shí)器/計(jì)數(shù)器。若用軟件啟動(dòng),則可把TR0或TR1置1;若由外部中斷引腳電平啟動(dòng),則需給外部引腳加啟動(dòng)電平。 【例例4-7】設(shè)T1作定時(shí)器用,以方式1工作,定時(shí)時(shí)間為10ms;T0作計(jì)數(shù)器,以方式2工作,外界發(fā)生一次事件即溢出,寫出初始化程序。 解解:T1的時(shí)間常數(shù)為: (216-TC)2s=10ms TC=EC78H 程序:MOVTMOD,#16H ;T1定時(shí)

19、方式1,T0計(jì)數(shù)方式2,即置TMOD寄存器的內(nèi)容為00010110B MOVTL0,#0FFH;T0時(shí)間常數(shù)送TL0 MOVTH0,#0FFH;T0時(shí)間常數(shù)送TH0 MOVTL1,#78H ;T1時(shí)間常數(shù)(低8位)送TL1 MOVTH1,#0ECH;T1時(shí)間常數(shù)(高8位)送TH1 SETBTR0;置TR0為1允許T0啟動(dòng)計(jì)數(shù) SETBTR1;置TR1為1允許T1啟動(dòng)計(jì)數(shù)【例例4-8】設(shè)定時(shí)器T0以方式1工作,編寫一個(gè)延時(shí)1s的子程序。 解解:若主頻為6MHz,可求得T0的最大定時(shí)時(shí)間為:TM max=216 2s=131.072ms 用定時(shí)器獲得100ms的定時(shí)時(shí)間再加10次循環(huán)得到1s的延時(shí)

20、,可算得100ms定時(shí)的預(yù)置數(shù)為: (216-TC)2s=100000s=100ms TC=216-50000=15536 TC=3CB0H程序如下: ORG0200H MOVTMOD,#01H ;T0工作方式1 MOVR7,#10 ;循環(huán)次數(shù) TIME: MOVTL0,#0B0H;放預(yù)置數(shù) MOVTH0,#3CH SETB TR0 ;啟動(dòng)定時(shí)器0 LOOP1: JBC TF0,LOOP2 ;查詢TF0標(biāo)志看是否計(jì)滿 JMP LOOP1 LOOP2: DJNZ R7,TIME ;進(jìn)行10個(gè)100ms及1s的計(jì)時(shí) SJMP $ END【例例4-10】P1.0接LED,低電平亮,單片機(jī)所接晶振12

21、MHz,用定時(shí)器中斷方式實(shí)現(xiàn)燈的閃爍。要求亮、暗間隔1s。解: ORG 0000H AJMP MAIN ORG 001BH ; 定時(shí)器1的中斷向量地址 AJMP TIME1 ; 跳轉(zhuǎn)到真正的定時(shí)器程序處 ORG 0030HMAIN: MOV P1,#0FFH ; 關(guān)所有燈 MOV 30H,#00H ; 循環(huán)次數(shù)清循環(huán)次數(shù)清0 MOV TMOD, #00010000B ; 定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1工作于方式工作于方式1 MOV TH1, #3CH MOV TL1,#0B0H; 即數(shù)即數(shù)15536(一次定時(shí)一次定時(shí)50ms的初值的初值) SETB EA ; 開總中斷允許開總中斷允許 SETB ET1 ; 開定時(shí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論