第6章MCS-51的定時(shí)器計(jì)數(shù)器_第1頁(yè)
第6章MCS-51的定時(shí)器計(jì)數(shù)器_第2頁(yè)
第6章MCS-51的定時(shí)器計(jì)數(shù)器_第3頁(yè)
第6章MCS-51的定時(shí)器計(jì)數(shù)器_第4頁(yè)
第6章MCS-51的定時(shí)器計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩50頁(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)介

教學(xué)基本要求:※掌握單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)與工作原理;※握單片機(jī)的定時(shí)器/計(jì)數(shù)器的初值計(jì)算、工作方式控制寄存器的初始化;※了解單片機(jī)的定時(shí)器/計(jì)數(shù)器的各種工作方式及其差異;※掌握單片機(jī)的定時(shí)器/計(jì)數(shù)器程序的設(shè)計(jì)方法和步驟。第6章MCS-51的定時(shí)器/計(jì)數(shù)器重點(diǎn)與難點(diǎn):?jiǎn)纹瑱C(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)與工作原理、控制與工作方式、編程和應(yīng)用。6.1定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)與工作原理定時(shí)器/計(jì)數(shù)器的基本部件是兩個(gè)8位的計(jì)數(shù)器(其中TH1,TL1是T1的計(jì)數(shù)器,TH0,TL0是T0的計(jì)數(shù)器)拼裝而成。在作定時(shí)器使用時(shí),輸入的時(shí)鐘脈沖是由晶體振蕩器的輸出經(jīng)12分頻后得到的,所以定時(shí)器也可看作是對(duì)計(jì)算機(jī)機(jī)器周期的計(jì)數(shù)器(因?yàn)槊總€(gè)機(jī)器周期包含12個(gè)振蕩周期,故每一個(gè)機(jī)器周期定時(shí)器加1,可以把輸入的時(shí)鐘脈沖看成機(jī)器周期信號(hào))。故其頻率為晶振頻率的1/12。如果晶振頻率為12MHZ,則定時(shí)器每接收一個(gè)輸入脈沖的時(shí)間為1μs。當(dāng)它用作對(duì)外部事件計(jì)數(shù)時(shí),接相應(yīng)的外部輸入引腳T0(P3.4)或T1(P3.5)。在這種情況下,當(dāng)檢測(cè)到輸入引腳上的電平由高跳變到低時(shí),計(jì)數(shù)器就加1(它在每個(gè)機(jī)器周期的S5P2時(shí)采樣外部輸入,當(dāng)采樣值在這個(gè)機(jī)器周期為高,在下一個(gè)機(jī)器周期為低時(shí),則計(jì)數(shù)器加1)。加1操作發(fā)生在檢測(cè)到這種跳變后的一個(gè)機(jī)器周期中的S3P1,因此需要兩個(gè)機(jī)器周期來(lái)識(shí)別一個(gè)從“1”到“0”的跳變,故最高計(jì)數(shù)頻率為晶振頻率的1/24。這就要求輸入信號(hào)的電平要在跳變后至少應(yīng)在一個(gè)機(jī)器周期內(nèi)保持不變,以保證在給定的電平再次變化前至少被采樣一次。定時(shí)器/計(jì)數(shù)器有四種工作方式,其工作方式的選擇及控制都由兩個(gè)特殊功能寄存器(TMOD和TCON)的內(nèi)容來(lái)決定。用指令改變TMOD或TCON的內(nèi)容后,則在下一條指令的第一個(gè)機(jī)器周期的S1P1時(shí)起作用。定時(shí)器的方式寄存器TMOD圖6-1TMOD寄存器各位定義特殊功能寄存器TMOD為定時(shí)器的方式控制寄存器,高4位用于定時(shí)器1,低4位用于定時(shí)器0。其中M1,M0用來(lái)確定所選的工作方式。①M(fèi)1M0定時(shí)器/計(jì)數(shù)器四種工作方式選擇M1M0方式說(shuō)明00013位定時(shí)器/計(jì)數(shù)器01116位定時(shí)器/計(jì)數(shù)器102自動(dòng)裝入時(shí)間常數(shù)的8位定時(shí)器/計(jì)數(shù)器113對(duì)T0分為兩個(gè)8位獨(dú)立計(jì)數(shù)器;對(duì)T1置方式3時(shí)停止工作(無(wú)中斷重裝8位計(jì)數(shù)器)表6-1工作方式選擇表②C/定時(shí)器方式或計(jì)數(shù)器方式選擇位。C/=1時(shí),為計(jì)數(shù)器方式;C/=0時(shí),為定時(shí)器方式。③GATE定時(shí)器/計(jì)數(shù)器運(yùn)行控制位,用來(lái)確定對(duì)應(yīng)的外部中斷請(qǐng)求引腳(,)是否參與T0或T1的操作控制。當(dāng)GATE=0時(shí),只要定時(shí)器控制寄存器TCON中的TR0(或TR1)被置1時(shí),T0(或T1)被允許開始計(jì)數(shù)(TCON各位含義見(jiàn)后面敘述);當(dāng)GATE=1時(shí),不僅要TCON中的TR0或TR1置位,還需要P3口的或引腳為高電平,才允許計(jì)數(shù)。特殊功能寄存器TCON用于控制定時(shí)器的操作及對(duì)定時(shí)器中斷的控制。其各位定義如圖6-2所示。其中D0~D3位與外部中斷有關(guān)。圖6-2TCON寄存器各位定義①TR0T0的運(yùn)行控制位。該位置1或清0用來(lái)實(shí)現(xiàn)啟動(dòng)計(jì)數(shù)或停止計(jì)數(shù)。②TF0T0的溢出中斷標(biāo)志位。當(dāng)T0計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置1;在CPU中斷處理時(shí)由硬件清為0。③TR1T1的運(yùn)行控制位。功能同TR0。④TF1T1的溢出中斷標(biāo)志位。功能同TF0。TMOD和TCON寄存器在復(fù)位時(shí)其每一位均清零。2、定時(shí)器控制寄存器TCON6.2定時(shí)/計(jì)數(shù)器的工作方式MCS-51片內(nèi)的定時(shí)器/計(jì)數(shù)器可以通過(guò)對(duì)特殊功能寄存器TMOD中的控制位C/的設(shè)置來(lái)選擇定時(shí)器方式或計(jì)數(shù)器方式;通過(guò)對(duì)M1M0兩位的設(shè)置來(lái)選擇四種工作方式1、方式0當(dāng)M1M0設(shè)置為00時(shí),定時(shí)器選定為方式0工作。在這種方式下,16位寄存器只用了13位,TL0的高三位未用。由TH0的8位和TL0的低5位組成一個(gè)13位計(jì)數(shù)器,如圖6-3所示。圖6-3定時(shí)/計(jì)數(shù)器選定為方式0工作2、方式1方式1和方式0的工作相同,唯一的差別是TH0和TL0組成一個(gè)16位計(jì)數(shù)器,如圖6-4所示。圖6-4定時(shí)/計(jì)數(shù)器選定為方式1工作3、方式2方式2把TL0配置成一個(gè)可以自動(dòng)恢復(fù)初值(初始常數(shù)自動(dòng)重新裝入)的8位計(jì)數(shù)器,TH0作為常數(shù)緩沖器,TH0由軟件預(yù)置值。當(dāng)TL0產(chǎn)生溢出時(shí),一方面使溢出標(biāo)志TF0置1,同時(shí)把TH0中的8位數(shù)據(jù)重新裝入TL0中,如圖6-5所示。圖6-5定時(shí)/計(jì)數(shù)器選定為方式2工作方式2常用于定時(shí)控制。例如希望每隔250μs產(chǎn)生一個(gè)定時(shí)控制脈沖,則可以采用12MHz的振蕩器,把TH0預(yù)置為6,并使C/=0就能實(shí)現(xiàn)。T1的方式2常用作串行口波特率發(fā)生器。4、方式3方式3對(duì)定時(shí)器T0和定時(shí)器T1是不相同的。若T1設(shè)置為方式3,則停止工作(其效果與TR1=0相同)。所以方式3只適用于T0,如圖6-6所示。圖6-6定時(shí)/計(jì)數(shù)器選定為方式3工作方式3使MCS-51具有三個(gè)定時(shí)器/計(jì)數(shù)器(增加了一個(gè)附加的8位定時(shí)器/計(jì)數(shù)器)。當(dāng)T0設(shè)置為方式3時(shí),將使TL0和TH0成為兩個(gè)相互獨(dú)立的8位計(jì)數(shù)器,TL0利用了T0本身的一些控制(C/,GATE,TR0,和TF0)方式,它的操作與方式0和方式1類似。而TH0被規(guī)定為用作定時(shí)器功能,對(duì)機(jī)器周期計(jì)數(shù),并借用了T1的控制位TR1和TF1。在這種情況下TH0控制了T1的中斷。這時(shí)T1還可以設(shè)置為方式0~2,用于任何不需要中斷控制的場(chǎng)合,或用作串行口的波特率發(fā)生器。通常,當(dāng)T1用作串行口波特率發(fā)生器時(shí),T0才定義為方式3,以增加一個(gè)8位計(jì)數(shù)器。6.3定時(shí)器/計(jì)數(shù)器的初始化1、初始化步驟MCS-51內(nèi)部定時(shí)器/計(jì)數(shù)器是可編程序的,其工作方式和工作過(guò)程均可由MCS-51通過(guò)程序?qū)λM(jìn)行設(shè)定和控制。因此,MCS-51在定時(shí)器/計(jì)數(shù)器工作前必須先對(duì)它進(jìn)行初始化。初始化步驟為:(1)根據(jù)題目要求先給定時(shí)器方式寄存器TMOD送一個(gè)方式控制字,以設(shè)定定時(shí)器/計(jì)數(shù)器的相應(yīng)工作方式。(2)根據(jù)實(shí)際需要給定時(shí)器/計(jì)數(shù)器選送定時(shí)器初值或計(jì)數(shù)器初值,以確實(shí)需要定時(shí)的時(shí)間和需要記數(shù)的初值。(3)根據(jù)需要給中斷允許寄存器IE選送中斷控制字和給中斷優(yōu)先級(jí)寄存器IP選送中斷優(yōu)先級(jí)字,以開放相應(yīng)中斷和設(shè)定中斷優(yōu)先級(jí)。(4)給定時(shí)器控制寄存器TCON送命令字,以啟動(dòng)或禁止定時(shí)器/計(jì)數(shù)器的運(yùn)行。2、計(jì)數(shù)器初值的計(jì)算定時(shí)器/計(jì)數(shù)器可用軟件隨時(shí)隨地起動(dòng)和關(guān)閉,起動(dòng)時(shí)它就自動(dòng)加“1”記數(shù),一直記到滿,即全為“1”,若不停止,計(jì)數(shù)值從全“1”變?yōu)槿?”,同時(shí)將計(jì)數(shù)溢出位置“1”并向CPU發(fā)出定時(shí)器溢出中斷申請(qǐng)。對(duì)于各種不同的工作方式最大的定時(shí)時(shí)間和計(jì)數(shù)數(shù)目不同。這里在使用中就會(huì)出現(xiàn)兩個(gè)問(wèn)題:一是要產(chǎn)生比定時(shí)器最大的定時(shí)時(shí)間還要小的時(shí)間和計(jì)數(shù)器最大計(jì)數(shù)次數(shù)還要小的計(jì)數(shù)次數(shù)怎么辦?二是要產(chǎn)生比定時(shí)器最大的定時(shí)時(shí)間還要大的時(shí)間和計(jì)數(shù)器最大計(jì)數(shù)次數(shù)還要大的計(jì)數(shù)次數(shù)怎么辦?解決以上第一個(gè)問(wèn)題只要給定時(shí)器/計(jì)數(shù)器一個(gè)非零初值,開定時(shí)器/計(jì)數(shù)器時(shí),定時(shí)器/計(jì)數(shù)器不從0開始,而是從初值開始,這樣就可得到比定時(shí)器/計(jì)數(shù)器最大的定時(shí)時(shí)間和計(jì)數(shù)次數(shù)還要小的時(shí)間和計(jì)數(shù)次數(shù),解決第二個(gè)問(wèn)題就要用到循環(huán)程序了,循環(huán)幾次就相當(dāng)于乘幾。例如要產(chǎn)生1秒的定時(shí)你可先用定時(shí)器產(chǎn)生50ms的定時(shí),再循環(huán)20次就行了,因?yàn)?s=1000ms,也可用其它的組合。有時(shí)也可采用中斷來(lái)實(shí)現(xiàn)。由上可見(jiàn),解決問(wèn)題的基本出路在于初值的計(jì)算,下面就來(lái)具體討論計(jì)數(shù)器的初值計(jì)算和最大值的計(jì)算。我們把計(jì)數(shù)器從初值開始作加1計(jì)數(shù)到計(jì)滿為全1所需要的計(jì)數(shù)值設(shè)定為C和計(jì)數(shù)初值設(shè)定為D,由此便可得到如下的計(jì)算通式:

D=M-C(1)式中,M為計(jì)數(shù)器模值,該值和計(jì)數(shù)器工作方式有關(guān)。在方式0時(shí)M為213;在方式1時(shí)M為216;在方式2和方式3時(shí)M為28。3、定時(shí)器初值的計(jì)算在定時(shí)器模式下,計(jì)數(shù)器由單片機(jī)脈沖經(jīng)12分頻后計(jì)數(shù)。因此,定時(shí)器定時(shí)時(shí)間T的計(jì)算公式為:

T=(TM—TC)12/fOSC(μs)(2)式中TM為計(jì)數(shù)器從初值開始作加1計(jì)數(shù)到計(jì)滿為全1所需要的時(shí)間。TM為模值,和定時(shí)器的工作方式有關(guān);fOSC是單片機(jī)晶體振蕩器的頻率,TC為定時(shí)器的定時(shí)初值。在式(2)中,若設(shè)TC=0,則定時(shí)器定時(shí)時(shí)間為最大(初值為0,計(jì)數(shù)從全0到全1,溢出后又為全0)。由于M的值和定時(shí)器工作方式有關(guān),因此不同工作方式下定時(shí)器的最大定時(shí)時(shí)間也不一樣。例如:若設(shè)單片機(jī)主脈沖晶體振蕩器頻率fOSC為12MHz,則最大定時(shí)時(shí)間為:方式0時(shí)TMmax=213×1μS=8.192ms方式1時(shí)TMmax=216×1μs=65.536ms方式2和3時(shí)TMmax=28×1μs=0.256ms

例6-1設(shè)方式0工作時(shí),定時(shí)時(shí)間為1ms,時(shí)鐘振蕩頻率為6MHz。解:將數(shù)據(jù)代入公式(2)得:(213-TC)12/6μS=1ms=1000μsTC=213-500=7692化成二進(jìn)制數(shù)為TC=1111000001100根據(jù)13位定時(shí)器/計(jì)數(shù)器特性,高8位F0H送至TH0低5位0CH送TL0,一般TL0的高三位置“0”,可用下列匯編指令實(shí)現(xiàn)。MOVTL0,#0CH;5位送TL0寄存器MOVTH0,#0F0H;8位送TH0寄存器C51代碼如下:TL0=(8192-500)&0x1f;//取低5位送TL0寄存器

TH0=(8192-500)>>5;//取高8位送TH0寄存器

例6-2若單片機(jī)時(shí)鐘頻率fOSC為12MHz,請(qǐng)計(jì)算定時(shí)2ms所需的定時(shí)器初值。解:由于定時(shí)器工作在方式2和方式3下時(shí)的最大定時(shí)時(shí)間只有0.256ms,因此要想獲得2ms的定時(shí)時(shí)間定時(shí)器必須工作在方式0或方式1。若采用方式0,則根據(jù)式(2)可得定時(shí)器初值為:

TC=213-2ms/1μs=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,因?yàn)?830H可寫成0001100000110000按13位重新組合成0001100000110000這組數(shù)就可拼成

1100000100010000這樣就得到定時(shí)器工作在方式0時(shí)的初值C110H。即:TH0應(yīng)裝C1H;TL0應(yīng)裝10H(高三位為0)。若采取方式1,則有:TC=216-2MS/1μs=63536=F830H

即:TH0應(yīng)裝F8H;TL0應(yīng)裝30H。例6-3設(shè)T1作定時(shí)器,以方式1工作,定時(shí)時(shí)間為10mS;T0作計(jì)數(shù)器,以方式2工作,外界發(fā)生一次事件即溢出。解:T1的時(shí)間常數(shù)為:(216-TC)×2μs=10msTC=EC78H

初始化代碼(匯編語(yǔ)言):

MOVTMOD,#16H;T1定時(shí)方式1,T0計(jì)數(shù)方式2,即置TMOD寄存器的內(nèi)容為00010110MOVTL0,#0FFH;T0時(shí)間常數(shù)低八位送TL0MOVTH0,#0FFH;T0時(shí)間常數(shù)高八位送TH0MOVTL1,#78H;T1時(shí)間常數(shù)(低8位)送TL1MOVTH1,#0ECH;T1時(shí)間常數(shù)(高8位)送TH1SETBTR0;置TR0為1允許T0啟動(dòng)計(jì)數(shù)SETBTR1;置TR1為1允許T1啟動(dòng)計(jì)數(shù)C51代碼如下:TMOD=0x16;//T1定時(shí)方式1,T0計(jì)數(shù)方式2TL0=0xff;//T0時(shí)間常數(shù)低八位送TL0TH0=0xff;//T0時(shí)間常數(shù)高八位送TH0TL1=0x78;//T1時(shí)間常數(shù)(低8位)送TL1TH1=0xec;//T1時(shí)間常數(shù)(高8位)送TH1TR0=1;//啟動(dòng)T0計(jì)數(shù)

TR1=1;//啟動(dòng)T1計(jì)數(shù)例6-4

設(shè)定時(shí)器T0,以方式1工作,試編寫一個(gè)延時(shí)1秒的子程序。解:若主頻頻率為6MHZ可求得T0的最大定時(shí)時(shí)間為:

TMmax=216×2μs=131.072ms我們就用定時(shí)器獲得100ms的定時(shí)時(shí)間再加10次循環(huán)得到1秒的延時(shí),可算得100ms定時(shí)的定時(shí)初值:(216-TC)×2μs=100ms=100000μsTC=216-50000=15536TC=3CB0H

匯編語(yǔ)言程序如下:ORG0000HMOVTMOD,#01H;設(shè)置T0為定時(shí)模式1MOVR7,#10;設(shè)置0.1s計(jì)數(shù)器初值

ACALLTIME;SJMP$;1秒延時(shí)子程序TIME:MOVTL0,#0B0H;設(shè)置定時(shí)器初值

MOVTH0,#3CHSETBTR0;啟動(dòng)定時(shí)器0LOOP1:JBCTF0,LOOP2;測(cè)試0.1S時(shí)間到標(biāo)志,如果100ms時(shí)間到,轉(zhuǎn)0.1s處理

JMPLOOP1;0.1s時(shí)間沒(méi)有到,繼續(xù)測(cè)試0.1s時(shí)間到標(biāo)志LOOP2:DJNZR7,TIME;1s時(shí)間沒(méi)到,轉(zhuǎn)到TIMERET;子程序返回

END例6-5廣告燈的左移右移方法1:延時(shí)時(shí)間使用TIMER0在MODE0下工作。1、功能說(shuō)明①開始時(shí)P1.0亮,延時(shí)0.2秒后左移至P1.1亮,如此左移7次后至P1.7亮,再延時(shí)0.2秒右移至P1.6亮,如此右移7次后至P1.0亮。②延時(shí)時(shí)間0.2秒,使用TIMER0在MODE0下工作(時(shí)鐘頻率fOSC為12MHz)。2、硬件:見(jiàn)圖6-7圖6-7廣告燈的左移右移電路圖3、程序如下(例5-4給出的是C51代碼,與本例相似,本例給出的是匯編語(yǔ)言程序):ORG00H;起始地址MOVTMOD,#00H;設(shè)定TIMER0工作在MODE0START:CLRC;C=0MOVA,#0FEH;ACC=FEH,左移初值MOVR2,#08;R2=08,設(shè)左移8次LOOP:RLCA;左移一位MOVP1,A;輸出至P1MOVR3,#100;0.2秒ACALLDELAY;2000微妙DJNZR2,LOOP;左移8次MOVR2,#07;R2=07,設(shè)右移7次LOOP1:

RRCA;右移一位MOVP1,A;輸出至P1MOVR3,#100;0.2秒ACALLDELAY;2000微妙DJNZR2,LOOP1;右移7次JMPSTARTDELAY:SETBTR0;啟動(dòng)TIMER0開始計(jì)時(shí)AGAIN:MOVTL0,#10H;設(shè)定TL0的值MOVTH0,#0C1H;設(shè)定TH0的值LOOP1:JBCTF0,LOOP3;TF0是否為1,是則跳至LOOP3,并清TF0JMPLOOP1;不是則跳到LOOP1LOOP3:DJNZR3,AGAIN;R3是否為0?不是則跳到AGAINCLRTR0;是則停止TIMR0計(jì)數(shù)RETEND方法2:延時(shí)時(shí)間0.2秒,使用TIMER0在MODE1下工作。程序略方法3:延時(shí)時(shí)間0.2秒,使用TIMER0在MODE2下工作。程序略方法4:延時(shí)時(shí)間0.2秒,使用TIMER0在MODE3下工作。程序略例6-6計(jì)數(shù)器(TIMER0)1、功能說(shuō)明①T0每輸入脈沖3次則P1的LED會(huì)做BCD碼加1的變化,P1.3~P1.0為個(gè)位(8421碼),P1.7~P1.4為十位(8421碼)。②方法1:TIMER0工作在MODE0計(jì)數(shù)模式下。2、硬件:見(jiàn)圖6-8,只是在AT89C51的14腳(T0)接一個(gè)按鍵,按按鍵提供計(jì)數(shù)脈沖。圖6-8計(jì)數(shù)器(TIMER0)3、程序如下:#include<REG51.H>//插入51特殊功能寄存器頭文件//--------------------------------------------------------------------------------unsignedcharcount;//定義計(jì)數(shù)變量//---------------------------------------------------voidmain(void){count=0;//計(jì)數(shù)器清0P1=0x00;//P1輸出初始值00TMOD=0x04;//定時(shí)/計(jì)數(shù)器0設(shè)為方式0,計(jì)數(shù)模式

TR0=1;//啟動(dòng)定時(shí)/計(jì)數(shù)器0while(1){TH0=0xFF;//設(shè)定計(jì)數(shù)3次

TL0=0x1D;while(!TF0);//沒(méi)有溢出,就等待

TF0=0;//清溢出標(biāo)志

count++;//計(jì)數(shù)器加1

if(count==100)count=0;//如果計(jì)數(shù)值為100,計(jì)數(shù)器就清0P1=((count/10)<<4)+(count%10);//輸出至P1}}方法2:TIMER0在MODE1的計(jì)數(shù)工作方式下。程序略方法3:TIMER0在MODE2的計(jì)數(shù)工作方式下。程序略方法4:TIMER0在MODE3的計(jì)數(shù)工作方式下。程序略例6-7低頻信號(hào)發(fā)生器驅(qū)動(dòng)程序設(shè)計(jì)一個(gè)控制程序,使AT89C51的P1口輸出8路低頻方波脈沖,頻率分別為100、50、25、20、10、5、2、1Hz。使用定時(shí)器T0,產(chǎn)生5ms的定時(shí),若晶振選11.0592MHz,則5ms相當(dāng)于4608個(gè)機(jī)器周期,T0應(yīng)工作于方式1,初值位x為:x=65536-4608=60928。用十六進(jìn)制數(shù)表示則:x=0EE00H。對(duì)應(yīng)于P1.0~P1.7,設(shè)立8個(gè)計(jì)數(shù)器,初值分別為1、2、4、5、10、20、50、100,由T0的溢出中斷服務(wù)程序?qū)λ鼈儨p“1”計(jì)數(shù),當(dāng)減為零時(shí)恢復(fù)初值,并使相應(yīng)的口線改變狀態(tài),這樣就使P1口輸出所要求的方波,圖6-9例6-7低頻信號(hào)發(fā)生器仿真圖。下面分別是有關(guān)的部分主程序和T0中斷處理程序。圖6-9例6-7低頻信號(hào)發(fā)生器仿真圖程序如下:#include<REG51.H>//插入51特殊功能寄存器頭文件//--------------------------------------------------------------------------------sbitP10=P1^0;//100Hz輸出信號(hào)口設(shè)置sbitP11=P1^1;//50Hz輸出信號(hào)口設(shè)置sbitP12=P1^2;//20Hz輸出信號(hào)口設(shè)置sbitP13=P1^3;//10Hz輸出信號(hào)口設(shè)置sbitP14=P1^4;//5Hz輸出信號(hào)口設(shè)置sbitP15=P1^5;//4Hz輸出信號(hào)口設(shè)置sbitP16=P1^6;//2Hz輸出信號(hào)口設(shè)置sbitP17=P1^7;//1Hz輸出信號(hào)口設(shè)置unsignedcharcount2,count4,count5,count10,count20;unsignedcharcount50,count100;//定義計(jì)數(shù)變量//===============================================voidmain(void){TMOD=0x01;//定時(shí)/計(jì)數(shù)器0設(shè)為方式1TH0=0xEE;//定時(shí)5ms初值的高八位送入TH0TL0=0;//初值的低八位送入TL0count2=2;//10ms計(jì)時(shí)單元置初值

count4=4;//20ms計(jì)時(shí)單元置初值

count5=5;//25ms計(jì)時(shí)單元置初值

count10=10;//50ms計(jì)時(shí)單元置初值

count20=20;//100ms計(jì)時(shí)單元置初值

count50=50;//250ms計(jì)時(shí)單元置初值

count100=100;//500ms計(jì)時(shí)單元置初值

TR0=1;//啟動(dòng)定時(shí)器0ET0=1;//開定時(shí)/計(jì)數(shù)器0的中斷

EA=1;//開CPU中斷

while(1);//等待中斷

}voidt0(void)interrupt1using0//定時(shí)器0中斷處理函數(shù)

{TH0=0xEE;//重新將定時(shí)50ms初值的高八位送入TH0P10=!P10;//100Hz輸出信號(hào)取反

count2--;//10ms計(jì)時(shí)單元減1if(count2==0){count2=2;P11=!P11;}//如果時(shí)間到,10ms計(jì)時(shí)單元重新置初值,50Hz輸出信號(hào)取反

count4--;//10ms計(jì)時(shí)單元減1if(count4==0){count4=4;P12=!P12;}//如果時(shí)間到,20ms計(jì)時(shí)單元重新置初值,20Hz輸出信號(hào)取反

count5--;//20ms計(jì)時(shí)單元減1if(count5==0){count5=5;P13=!P13;}//如果時(shí)間到,25ms計(jì)時(shí)單元重新置初值,10Hz輸出信號(hào)取反

count10--;//25ms計(jì)時(shí)單元減1if(count10==0){count10=10;P14=!P14;}//如果時(shí)間到,50ms計(jì)時(shí)單元重新置初值,5Hz輸出信號(hào)取反

count20--;//50ms計(jì)時(shí)單元減1if(count20==0){count20=20;P15=!P15;}//如果時(shí)間到,100ms計(jì)時(shí)單元重新置初值,4Hz輸出信號(hào)取反

count50--;//250ms計(jì)時(shí)單元減1if(count50==0){count50=50;P16=!P16;}//如果時(shí)間到,250ms計(jì)時(shí)單元重新置初值,2Hz輸出信號(hào)取反

count100--;//500ms計(jì)時(shí)單元減1if(count100==0){count100=100;P17=!P17;}//如果時(shí)間到,500ms計(jì)時(shí)單元重新置初值,1Hz輸出信號(hào)取反

}圖6-10低頻信號(hào)發(fā)生器仿真效果圖例6-8波形展寬程序設(shè)P3.4輸入低頻的窄脈沖信號(hào),要求在P3.4輸入發(fā)生負(fù)跳變時(shí),P1.0輸出一個(gè)500μS的同步脈沖。若晶振頻率為6MHz,500μS相當(dāng)于250個(gè)機(jī)器周期。我們采用如圖6-11所示的設(shè)計(jì)方法。P1.0的初態(tài)為高電平,T0選為方式2對(duì)外部事件計(jì)數(shù),初值為0FFH;這樣P3.4輸入發(fā)生負(fù)跳變時(shí),T0產(chǎn)生溢出,程序查詢到TF0為1時(shí),T0改變?yōu)?00μS的定時(shí)器的工作方式,并使P1.0輸出低電平,T0溢出后恢復(fù)P1.0高電平,T0又工作于外部事件計(jì)數(shù)方式。圖6-11I/O波形和T0方式變換

程序如下:#include<reg51.h>sbitP1_0=P1^0;//P1.0輸出展寬波形voidmain(){TMOD=0x06;//T0計(jì)數(shù)器,方式2TH0=-250;//6MHz頻率500微秒定時(shí)初值

TL0=255;//初值255可使1個(gè)外來(lái)脈沖即產(chǎn)生溢出

TR0=1;//啟動(dòng)計(jì)數(shù)器

while(1){while(TF0==0);//等待首次溢出

TF0=0;//清TF0溢出標(biāo)志

TMOD=0x02;//T0定時(shí)器,方式2P1_0=0;//P1.0輸出0while(TF0==0);//等待再次溢出

TF0=0;//清TF0溢出標(biāo)志

P1_0=1;//P1.0輸出1TMOD=0x06;//T0計(jì)數(shù)器,方式2TL0=255;//重新置計(jì)數(shù)初值

}}圖6-12波形展寬仿真圖例6-9簡(jiǎn)易順序控制器監(jiān)控程序在一個(gè)簡(jiǎn)易順序控制器中,用51P1口上的八個(gè)繼電器來(lái)控制一個(gè)機(jī)械裝置的八個(gè)機(jī)械動(dòng)作,要求P1口輸出如圖6-13所示的波形,現(xiàn)在為這個(gè)控制器配一個(gè)監(jiān)控程序。我們采用和例2中相似的方法。根據(jù)P1口的輸出波形,可劃分為十六個(gè)狀態(tài),用一個(gè)工作單元記錄P1口當(dāng)前的狀態(tài)數(shù)(初值為0)。把16個(gè)狀態(tài)的輸出數(shù)據(jù)和持續(xù)時(shí)間以表格形式存放于程序存貯器中。利用定時(shí)器T0產(chǎn)生10ms(時(shí)間單位)的定時(shí),在T0的中斷服務(wù)程序中對(duì)當(dāng)前狀態(tài)的時(shí)間計(jì)數(shù)器進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器減1到0時(shí),計(jì)算下一個(gè)狀態(tài),查表取出持續(xù)時(shí)間常數(shù)裝入當(dāng)前時(shí)間計(jì)數(shù)器,取出數(shù)據(jù)輸出到P1口。這樣便使P1口輸出規(guī)定的波形,實(shí)現(xiàn)對(duì)機(jī)械裝置的操作控制。下面分別為主程序和T0中斷服務(wù)程序。主程序中,我們用踏步指令代替CPU的其他操作,在實(shí)際應(yīng)用中CPU還執(zhí)行系統(tǒng)狀態(tài)的監(jiān)視等操作(如人工干預(yù)、機(jī)械裝置異常狀態(tài)輸入處理等)。圖6-13簡(jiǎn)易順序控制器輸出波形程序如下:#include<REG51.H>//插入51特殊功能寄存器頭文件//--------------------------------------------------------------------------------unsignedcharcodeOUTTAB[]=//輸出狀態(tài)表

{0x00,0x01,0x00,0x02,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80};unsignedintcodeGNTAB[]=//時(shí)間常數(shù)表

{2000,2200,2400,2600,2800,3000,3200,3400,3600,3800,4000,4200,4400,4600,4800,5000};//--------------------------------------------------------------------------------unsignedcharstaudata;//狀態(tài)數(shù)變量unsignedintcount;//計(jì)數(shù)變量//---------------------------------------------------voidSPRI(unsignedchara)//P1口操作子函數(shù)

{P1=OUTTAB[a];}//根據(jù)狀態(tài)數(shù)取數(shù)據(jù)→P1口//------------------unsignedint

GNI(unsignedchara)//取時(shí)間常數(shù)子變量

{unsignedinti;i=GNTAB[a];//取時(shí)間常數(shù)

return(i);//返回時(shí)間常數(shù)值

}//------------------voidmain(void){P1=0;//P1口初始化

staudata=0;//狀態(tài)計(jì)數(shù)器初始化

TMOD=0x01;//定時(shí)/計(jì)數(shù)器0設(shè)為方式1TH0=0xff;//0xdc;//定時(shí)50ms初值的高八位送入TH0TL0=0x00;//定時(shí)50ms初值的低八位送入TL0IE=0x82;//開T0中斷,開CPU中斷

TR0=1;//啟動(dòng)定時(shí)器0while(1);//等待中斷

}//=====================voidt0(void)interrupt1using0//定時(shí)器0中斷處理函數(shù)

{TH0=0xff;//0xDC;//重新將定時(shí)50ms初值的高八位送入TH0

if(count!=0){count--;}//如果不為0,計(jì)數(shù)器減1else{

staudata++;//計(jì)算下一個(gè)狀態(tài)數(shù)

staudata= staudata&0x0f;

SPRI(staudata);//調(diào)用對(duì)P1口操作函數(shù)

count=GNI(staudata);//調(diào)用取時(shí)間常數(shù)函數(shù)

}}圖6-14簡(jiǎn)易順序控制器仿真效果圖例6-10脈沖寬度測(cè)試程序該程序的功能是測(cè)試P3.3上輸入的正脈沖寬度,將測(cè)試的結(jié)果送內(nèi)部RAM緩沖器中。門控位為1時(shí),僅當(dāng)P3.3為高電平時(shí),T1才啟動(dòng)計(jì)數(shù),利用這個(gè)方法,便可以測(cè)試P3.3輸入脈沖的寬度,測(cè)試原理見(jiàn)圖6-15。在本例中脈沖寬度以機(jī)器周期為單位,且小于65536。請(qǐng)讀者修改下面給出的程序,使之能測(cè)試寬度更大的脈沖。圖6-15脈沖寬度測(cè)試原理程序如下:#include<reg51.h>sbitP3_3=P3^3;//定義脈沖輸入引腳voidmain(){unsignedchar*P,i;

inta;P=0x30;//指針指向片內(nèi)30H單元

TMOD=0x90;//GATE=1,工作方式為計(jì)數(shù)器T1//(T1設(shè)為門控制方式1定時(shí))TL1=0x00;TH1=0x00;//裝入初值

do{}while(P3_3==1);//等待INT1變低

TR1=1;//啟動(dòng)計(jì)數(shù)器

while(P3_3==0);//等待INT1變高,即脈沖上升沿

while(P3_3==1);//等待INT1變低,即脈沖下降沿

TR1=0;//停止計(jì)數(shù)

i=TH1;//讀入TH1值

a=i*256+TL1;//計(jì)數(shù)結(jié)果轉(zhuǎn)換為10進(jìn)制

for(a;a!=0;)//a不等于0時(shí)循環(huán),轉(zhuǎn)換為BCD碼

{*P=a%10;//個(gè)位存放在30單元

a=a/10;P++;}}圖6-16脈沖寬度測(cè)試仿真效果圖

AT89C52中有一個(gè)功能較強(qiáng)的定時(shí)器/計(jì)數(shù)器T2,它是一個(gè)16位定時(shí)/計(jì)數(shù)器,可通過(guò)設(shè)置特殊功能寄存器T2CON中的C/T2位,選擇將其作為定時(shí)器或計(jì)數(shù)器。6.5.1T2控制寄存器T2CON和T2MOD6.5.1.1狀態(tài)控制寄存器T2CONT2CON是定時(shí)/計(jì)數(shù)器T2的狀態(tài)控制寄存器,用于確定T2的工作方式、各種功能選擇及有關(guān)狀態(tài)信息。T2CON可位尋址,因此所有標(biāo)志或控制位都可以用位操作指令來(lái)置位或清零。T2CON的格式如下(0xc8):D7D6D5D4D3D2D1D0TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2(T2CON.7):定時(shí)器2溢出標(biāo)志。定時(shí)器2溢出時(shí)置位,必須由軟件清除。當(dāng)RCLK或TCLK=l時(shí),TF2將不會(huì)置位。

EXF2(T2CON.6):定時(shí)器2外部標(biāo)志。當(dāng)EXEN2=1且T2EX的負(fù)跳變產(chǎn)生捕獲或重裝時(shí),EXF2置位。定時(shí)器2中斷使能時(shí),EXF2=1將使CPU從中斷向量處執(zhí)行定時(shí)器2中斷子程序。EXF2位必須用軟件清零,在遞增/遞減計(jì)數(shù)器模式DCEN=l中,EXF2不會(huì)引起中斷。

RCLK(T2CON.5):接收時(shí)鐘標(biāo)志。RCLK置位時(shí),定時(shí)器2的溢出脈沖作為串行口模式l和模式3的接收時(shí)鐘。RCLK=0時(shí),將定時(shí)器l的溢出脈沖作為接收時(shí)鐘。

TCLK(T2CON.4):發(fā)送時(shí)鐘標(biāo)志。TCLK置位時(shí),定時(shí)器2的溢出脈沖作為串行口模式l和模式3的發(fā)送時(shí)鐘。TCLK=0時(shí),將定時(shí)器l的溢出脈沖作為發(fā)送時(shí)鐘。

EXEN2(T2CON.3):定時(shí)器2外部使能標(biāo)志。當(dāng)EXEN2置位且定時(shí)器2未作為串行口時(shí)鐘時(shí),允許T2EX的負(fù)跳變產(chǎn)生捕獲或重裝。EXEN2=0時(shí),T2EX的跳變對(duì)定時(shí)器2無(wú)效。

TR2(T2CON.2):定時(shí)器2啟動(dòng)/停止控制位。置l時(shí)啟動(dòng)定時(shí)器。

C/T2(T2CON.1):定時(shí)器/計(jì)數(shù)器選擇(定時(shí)器2)。

0:內(nèi)部定時(shí)器;

1:外部事件計(jì)數(shù)器(下降沿觸發(fā))。

CP/RL2(T2CON.0):捕獲/重裝標(biāo)志。置位:EXEN2=1時(shí)T2EX的負(fù)跳變產(chǎn)生捕獲。清零:EXEN2=1時(shí)定時(shí)器2溢出或T2EX的負(fù)跳變都可使定時(shí)器自動(dòng)重裝。當(dāng)RCLK=1或TCLK=1時(shí),該位無(wú)效且定時(shí)器強(qiáng)制為溢出時(shí)自動(dòng)重裝。6.5定時(shí)/計(jì)數(shù)器T26.5.1.2模式控制寄存器T2MODT2MOD是定時(shí)/計(jì)數(shù)器T2的模式控制寄存器,不可位尋址,格式如下(0xC9):D7D6D5D4D3D2D1D0------T2OEDCEN“-”:不可用,保留將來(lái)之用。但不可將其置1,這些位在將來(lái)8051系列產(chǎn)品中用來(lái)實(shí)現(xiàn)新的特性,這種情況下,以后用到保留位,復(fù)位時(shí)或非有效狀態(tài)時(shí),它的值應(yīng)為0,而這些位為有效狀態(tài)時(shí),它的值為1,從保留讀到的值是不確定的。

T2OE(T2MOD.1):定時(shí)器2輸出使能位。

DCEN(T2MOD.0):向下計(jì)數(shù)使能位。定時(shí)器2可配置成向上/向下計(jì)數(shù)器。6.5.2T2的操作模式定時(shí)器2有3種操作模式:捕獲、自動(dòng)重新裝載(遞增或遞減計(jì)數(shù))和波特率發(fā)生器,這3種模式由T2CON中的控制位RCLK+TCLK和CP/RL2來(lái)進(jìn)行選擇,見(jiàn)表6-2。表6-2定時(shí)/計(jì)數(shù)器T2工作模式RCLK+TCLKCP/RL2TR2操作模式00116位自動(dòng)重裝01116位捕獲1X1波特率發(fā)生器XX0(關(guān)閉)6.5.2.1捕獲模式在捕獲模式中,通過(guò)T2CON中的EXEN2設(shè)置兩個(gè)選項(xiàng)。如果EXEN2=0,定時(shí)器2作為一個(gè)l6位定時(shí)器或計(jì)數(shù)器(由T2CON中C/T2位選擇),溢出時(shí)置位TF2(定時(shí)器2溢出標(biāo)志位)。通過(guò)使能IE寄存器中定時(shí)器2的中斷使能位,該位可用于產(chǎn)生中斷。如果EXEN2=1,與以上描述相同,但增加了一個(gè)特性,即外部輸入T2EX由1變0時(shí)將定時(shí)器2中TL2和TH2的當(dāng)前值各自捕獲到RCAP2L和RCAP2H。另外,T2EX的負(fù)跳變使T2CON中的EXF2置位,EXF2也像TF2一樣能夠產(chǎn)生中斷,其向量與定時(shí)器2溢出中斷地址相同,定時(shí)器2中斷服務(wù)程序通過(guò)查詢TF2和EXF2來(lái)確定引起中斷的事件。捕獲模式如圖6-17所示。在該模式中TL2和TH2無(wú)重新裝載值。當(dāng)T2EX產(chǎn)生捕獲事件時(shí),計(jì)數(shù)器仍以T2EX的負(fù)跳變或振蕩頻率的l/12。圖6-17定時(shí)/計(jì)數(shù)器2的捕獲模式6.5.2.2自動(dòng)重裝模式(遞增/遞減計(jì)數(shù)器)在16位自動(dòng)重裝模式中,定時(shí)器2可通過(guò)C/T2配置為定時(shí)器/計(jì)數(shù)器,通過(guò)編程控制遞增/遞減計(jì)數(shù)。計(jì)數(shù)的方向是由DCEN(遞減計(jì)數(shù)使能位)確定。DCEN位于T2MOD寄存器中,當(dāng)DCEN=0時(shí),定時(shí)器2默認(rèn)為向上計(jì)數(shù);當(dāng)DCEN=1時(shí),定時(shí)器2可通過(guò)T2EX確定遞增或遞減計(jì)數(shù)。圖6-18顯示了當(dāng)DCEN=0時(shí),定時(shí)器2自動(dòng)遞增計(jì)數(shù),在該模式中通過(guò)設(shè)置EXEN2位進(jìn)行選擇。如果EXEN2=0,定時(shí)器2遞增計(jì)數(shù)到0FFFFH并在溢出后將TF2置位,然后將RCAP2L和RCAP2H中的16位值作為重新裝載值裝入定時(shí)器2。RCAP2L(0xCA)和RCAP2H(0xCB)的值是通過(guò)軟件設(shè)置的。如果EXEN2=1,16位重新裝載可通過(guò)溢出或T2EX從高電平1到低電平0的負(fù)跳變實(shí)現(xiàn),此負(fù)跳變同時(shí)將EXF2置位。如果定時(shí)器2的中斷被使能,則當(dāng)TF2或EXF2置1時(shí)產(chǎn)生中斷。如圖6-19所示,DCEN=1時(shí)定時(shí)器2可遞增或遞減計(jì)數(shù),此模式允許T2EX控制計(jì)數(shù)的方向。當(dāng)T2EX置1時(shí),定時(shí)器2遞增計(jì)數(shù),計(jì)數(shù)到0FFFFH后溢出并置位TF2,同時(shí)將產(chǎn)生中斷(如果中斷被使能)。定時(shí)器2的溢出將使RCAP2L和RCAP2H中的16位值作為重新裝載值裝入TL2(0xCC)和TH2(0xCD)。圖6-18定時(shí)/計(jì)數(shù)器2的自動(dòng)重裝模式(DCEN=0)圖6-19定時(shí)/計(jì)數(shù)器2的自動(dòng)重裝模式(DCEN=1)當(dāng)T2EX置零時(shí),將使定時(shí)器2遞減計(jì)數(shù)。當(dāng)TL2和TH2計(jì)數(shù)到等于RCAP2L和RCAP2H時(shí),定時(shí)器產(chǎn)生溢出,定時(shí)器2溢出置位TF2,并將0FFFFH重新裝入TL2和TH2。當(dāng)定時(shí)器2遞增/遞減產(chǎn)生溢出時(shí),外部標(biāo)志位EXF2翻轉(zhuǎn)。如果需要,可將EXF2位作為第l7位。在此模式下,EXF2標(biāo)志不會(huì)產(chǎn)生中斷。6.5.2.3波特率發(fā)生器模式寄存器T2CON的位TCLK和RCLK允許從定時(shí)器l或定時(shí)器2獲得串行口發(fā)送和接收的波特率。當(dāng)TCLK=0時(shí),選用定時(shí)器1作為串行口發(fā)送波特率發(fā)生器;當(dāng)TCLK=1時(shí),選用定時(shí)器2作為串行口發(fā)送波特率發(fā)生器。RCLK對(duì)串行口接收波特率有同樣的作用。通過(guò)這兩位,串行口能得到不同的接收和發(fā)送波特率:一個(gè)通過(guò)定時(shí)器l產(chǎn)生,另一個(gè)通過(guò)定時(shí)器2產(chǎn)生。當(dāng)定時(shí)器2工作在波特率發(fā)生器模式時(shí),與自動(dòng)重裝模式相似,當(dāng)TH2溢出時(shí),波特率發(fā)生器模式使定時(shí)器2寄存器重新裝載來(lái)自寄存器RCAP2H和RCAP2L的16位的值,寄存器RCAP2H和RCAP2L的值由軟件預(yù)置。當(dāng)定時(shí)器2工作于模式1和模式3時(shí),波特率由定時(shí)器2的溢出率決定:定時(shí)器可配置成“定時(shí)”或“計(jì)數(shù)”方式,在許多應(yīng)用上,定時(shí)器被設(shè)置在“定時(shí)”方式(C/T2*=0)。當(dāng)定時(shí)器2作為定時(shí)器時(shí),它的操作不同于波特率發(fā)生器。通常定時(shí)器2作為定時(shí)器,會(huì)在每個(gè)機(jī)器周期遞增(1/12振蕩頻率)。當(dāng)定時(shí)器2作為波特率發(fā)生器時(shí),將以振蕩頻率遞增(12時(shí)鐘模式時(shí)為l/2振蕩頻率),因此,波特率公式如下:

(RCAP2H,RCAP2L)=RCAP2H和RCAP2L的內(nèi)容,為16位無(wú)符號(hào)整數(shù)。表6-3由定時(shí)器2產(chǎn)生的常用波特率波特率振蕩器頻率定時(shí)器212MHz時(shí)鐘模式RCAP2HRCAP2L375K12MHzFFFF9.6K12MHzFFD94.8K12MHzFFB22.4K12MHzFF641.2K12MHzFEC830012MHzFB1E11012MHzF2AF3006MHzFD8F1106MHzF9576.5.2.4波特率公式匯總定時(shí)器2工作在波特率發(fā)生器模式,外部時(shí)鐘信號(hào)由T2引腳進(jìn)入,波特率為:如果定時(shí)器2采用內(nèi)部時(shí)鐘信號(hào),則波特率為:此處n=32(12時(shí)鐘模式)或16(6時(shí)鐘模式)。

fosc一振蕩器頻率。自動(dòng)重裝值可由下式得到:RCAP2H,RCAP2L=65536-[fosc/(32X波特率)]。6.5.3T2的設(shè)置表6-4T2作為定時(shí)器模式T2CON內(nèi)部控制(注1)外部控制(注2)16位重裝00H08H16位捕獲01H09H波特率發(fā)生器接收和發(fā)送相同波特率34H36H只接收24H26H只發(fā)送14H16H表6-5T2作為計(jì)數(shù)器模式TMOD內(nèi)部控制(注1)外部控制(注2)16位02H0AH自動(dòng)重裝03H0BH注:(1)僅當(dāng)定時(shí)器溢出時(shí)進(jìn)行捕獲和重裝;

(2)當(dāng)定時(shí)/計(jì)數(shù)器溢出且T2EX(P1.1)發(fā)生電平負(fù)跳變時(shí)產(chǎn)生捕獲和重裝(定時(shí)器2用于波特率發(fā)生器模式時(shí)除外)。5.2.4可編程時(shí)鐘輸出52系列的單片機(jī),可以設(shè)定定時(shí)/計(jì)數(shù)器2,通過(guò)P1.0輸出時(shí)鐘信號(hào)。Pl.0除作為通用I/O口外,還有兩個(gè)功能可供選用,即用于定時(shí)/計(jì)數(shù)器2的外部計(jì)數(shù)輸入和定時(shí)/計(jì)數(shù)器2時(shí)鐘信號(hào)輸出,圖6-20時(shí)鐘輸出方式下的定時(shí)器T2結(jié)構(gòu)。通過(guò)軟件對(duì)T2CON.1位C/T2復(fù)位為0,對(duì)T2MOD.1位T20E置1就可將定時(shí)/計(jì)數(shù)器2選為時(shí)鐘信號(hào)發(fā)生器,而T2CON.2位TR2控制時(shí)鐘信號(hào)開始或結(jié)束(TR2為啟停控制位)。由主振頻率(fosc)和定時(shí)/計(jì)數(shù)器2定時(shí)、自動(dòng)重裝入方式的計(jì)數(shù)初值來(lái)決定時(shí)鐘信號(hào)的輸出頻率,其設(shè)置公式如下:圖6-20時(shí)鐘輸出方式下的定時(shí)器T2結(jié)構(gòu)例6-11P1.0輸出頻率8-99Hz的可調(diào)方波用定時(shí)器T2來(lái)做(12M晶振),初始值為50Hz的相當(dāng)于20ms周期。仿真效果見(jiàn)圖6-21。//========================================================//系統(tǒng)初始頻率為50Hz的方波相當(dāng)于20ms周期,用定時(shí)器來(lái)做12M晶振下定時(shí)//頻率從8Hz--99Hz可調(diào)節(jié),所以可以做如下參考程序://========================================================#include<reg52.h>unsignedcharcodeLEDcode[]=//定義"0--F"十六個(gè)數(shù)據(jù)的共陰極LED七段顯示碼

{0x3

溫馨提示

  • 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)論