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

第6章AT89S51單片機(jī)的

定時(shí)器/計(jì)數(shù)器

1內(nèi)容概要在工業(yè)檢測(cè)與控制中,許多場(chǎng)合都要用到定時(shí)和計(jì)數(shù)功能。AT89S51單片機(jī)片內(nèi)有2個(gè)可編程的16位定時(shí)/計(jì)數(shù)器T0、T1,可用作定時(shí)或計(jì)數(shù)。本章介紹AT89S51單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)、功能和工作方式,并介紹定時(shí)器/計(jì)數(shù)器的編程及應(yīng)用。本章還講述了報(bào)警功能和報(bào)警電路的設(shè)計(jì)方法。2

在控制系統(tǒng)中,經(jīng)常需要定時(shí)或延時(shí),如定時(shí)控制、定時(shí)檢測(cè)、定時(shí)掃描等;此外也常常要求對(duì)外部事件進(jìn)行計(jì)數(shù)。要實(shí)現(xiàn)定時(shí)和計(jì)數(shù)功能,一般可用下面三種方法:

(1)軟件定時(shí):

CPU循環(huán)執(zhí)行一段程序,通過(guò)正確選擇指令和安排循環(huán)次數(shù)確定定時(shí)的時(shí)間,以實(shí)現(xiàn)軟件定時(shí)。軟件定時(shí)需要占用CPU時(shí)間,因此降低了CPU的利用率。

(2)不可編程的硬件定時(shí):

采用時(shí)基電路(例如555定時(shí)芯片),外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時(shí)電路。這種定時(shí)電路結(jié)構(gòu)簡(jiǎn)單,可以利用改變電阻和電容值,在一定范圍內(nèi)改變定時(shí)值;但是這種定時(shí)電路在硬件連接好以后,定時(shí)值與定時(shí)范圍不能由軟件進(jìn)行控制和修改,即不可編程。

(3)可編程的定時(shí)器:定時(shí)器的定時(shí)值及定時(shí)范圍可以用軟件來(lái)確定和修改,因而功能強(qiáng),使用靈活。例如8254可編程定時(shí)芯片。

AT89S51單片機(jī)片內(nèi)集成有兩個(gè)可編程的定時(shí)/計(jì)數(shù)器:定時(shí)/計(jì)數(shù)器0(T0)和定時(shí)/計(jì)數(shù)器1(T1),它們都是16位的加“1”定時(shí)計(jì)數(shù)器,既可以工作于定時(shí)方式,也可以對(duì)外部事件進(jìn)行計(jì)數(shù),T1還可以作為串行口的波特率發(fā)生器。

6.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)和工作原理

6.1.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)AT89S51的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)如圖6-1所示。

圖6—1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)框圖AT89S51單片機(jī)片內(nèi)集成有兩個(gè)可編程的16位的加“1”定時(shí)/計(jì)數(shù)器T0和T1。所謂加“1”是指來(lái)觸發(fā)脈沖時(shí)會(huì)自動(dòng)加“1”計(jì)數(shù)。應(yīng)用時(shí)注意加“1”計(jì)數(shù)器和減“1”計(jì)數(shù)器的不同。T0由特殊功能寄存器TH0(高8位)、TL0(低8位)構(gòu)成,T1由特殊功能寄存器TH1(高8位)、TL1(低8位)構(gòu)成,低8位和高8位組合可以構(gòu)成16位的計(jì)數(shù)。T0和T1受2個(gè)特殊功能寄存器TMOD和TCON控制。TMOD稱為定時(shí)/計(jì)數(shù)器的工作方式寄存器,由它確定定時(shí)/計(jì)數(shù)器的工作方式和功能;TCON是定時(shí)/計(jì)數(shù)器的控制寄存器,用于控制T0、T1的啟動(dòng)、計(jì)數(shù)和停止以及設(shè)置溢出標(biāo)志。

6.1.2定時(shí)/計(jì)數(shù)器的工作原理1、定時(shí)/計(jì)數(shù)器的工作原理

定時(shí)計(jì)數(shù)器的核心部件是加“1”計(jì)數(shù)器,其輸入的觸發(fā)脈沖有兩個(gè)來(lái)源:觸發(fā)脈沖由系統(tǒng)的時(shí)鐘振蕩器經(jīng)12分頻后送來(lái);觸發(fā)脈沖來(lái)自T0或T1端輸入的外部脈沖源。每來(lái)一個(gè)脈沖,計(jì)數(shù)器加“1”,當(dāng)加到計(jì)數(shù)器為全“1”時(shí),再輸入一個(gè)脈沖,就使計(jì)數(shù)器溢出并回0,計(jì)數(shù)器的溢出使TCON中TFO或TF1置1,表示定時(shí)或計(jì)數(shù)到(如果定時(shí)/計(jì)數(shù)器工作于定時(shí)方式,則表示定時(shí)時(shí)間已到;若工作于計(jì)數(shù)方式,則表示計(jì)數(shù)值已滿)。CPU通過(guò)查詢TCON中TFO或TF1位是否為“1”,或TFO或TF1為“1”時(shí)向CPU發(fā)出中斷請(qǐng)求(定時(shí)/計(jì)數(shù)器中斷允許時(shí))信號(hào),判定定時(shí)計(jì)數(shù)器是否定時(shí)到或計(jì)數(shù)滿。8

2、定時(shí)方式與計(jì)數(shù)方式的不同定時(shí)方式和計(jì)數(shù)方式都是對(duì)脈沖信號(hào)進(jìn)行計(jì)數(shù);它們不同之處:一是觸發(fā)信號(hào)的來(lái)源不同,二是計(jì)數(shù)的頻率不同,另外裝入定時(shí)/計(jì)數(shù)器的初值的方式不同。(1)定時(shí)方式作定時(shí)器用時(shí),加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器周期脈沖計(jì)數(shù)(1個(gè)機(jī)器周期等于12個(gè)振蕩周期),即計(jì)數(shù)頻率為晶振頻率的1/12。每一個(gè)機(jī)器周期計(jì)數(shù)器加1,加到計(jì)數(shù)器的溢出使TCON中TF0或TF1置1,表示定時(shí)時(shí)間到。

(2)計(jì)數(shù)方式

計(jì)數(shù)方式是對(duì)外部脈沖的計(jì)數(shù),外部事件產(chǎn)生的計(jì)數(shù)脈沖由TO(P3.4)或T1(P3.5)端輸入到計(jì)數(shù)器。在每個(gè)機(jī)器周期的S5P2期間采樣TO、T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一周期又采樣到一低電平時(shí),計(jì)數(shù)器加“1”。新的計(jì)數(shù)值將在此后一個(gè)機(jī)器周期的S3P1期間裝入寄存器中。由于檢測(cè)一個(gè)從1到0的下降沿需要2個(gè)機(jī)器周期,因此最高計(jì)數(shù)頻率為晶振頻率的1/24。

6.2定時(shí)/計(jì)數(shù)器的控制AT89S51的定時(shí)/計(jì)數(shù)器由2個(gè)特殊功能寄存器TMOD和TCON控制,下面介紹TMOD和TCON的功能和設(shè)置方法。

一、工作方式寄存器TMOD工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器T0、T1的工作方式,低四位用于T0,高四位用于T1。其格式如下:11圖6-2寄存器TMOD格式下面對(duì)TMOD的各位給出說(shuō)明。(1)GATE—門控位。GATE=0時(shí),僅由運(yùn)行控制位TRx(x

=

0,1)來(lái)控制定時(shí)器運(yùn)行。GATE=1時(shí),用外中斷引腳INT0*(或INT1*)上的電平與運(yùn)行控制位TRx共同控制定時(shí)器運(yùn)行。(2)C/T*—計(jì)數(shù)器模式和定時(shí)器模式選擇位。

C/T*=0,為定時(shí)器工作模式,對(duì)單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計(jì)數(shù)。

C/T*=1,為計(jì)數(shù)器工作模式,計(jì)數(shù)器對(duì)外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。1213(3)M1、M0—工作方式選擇位。M1、M0的4種編碼,對(duì)應(yīng)于4種工作方式的選擇,如表6-1所示。TMOD地址89H,不能位尋址,應(yīng)用時(shí)只能用字節(jié)指令設(shè)置定時(shí)/計(jì)數(shù)器的工作方式。CPU復(fù)位時(shí)TMOD所有位清0。14【例6-1】設(shè)置T0為工作方式1,定時(shí)方式,不啟用門控。匯編語(yǔ)言:MOVTMOD,#00000001B;T1未用設(shè)為0000C51:TMOD=0x01;【例6-2】設(shè)置T0工作方式2,計(jì)數(shù)方式,T1工作方式1,定時(shí)方式;不啟用門控。匯編語(yǔ)言:MOVTMOD,#00010110B;或#16HC51:TMOD=0x16;

二、控制寄存器TCONTCON地址:88H,可以位操作。TCON的低4位用于控制外部中斷,已在上章中講述。TCON的高4位用于控制定時(shí)/計(jì)數(shù)器T0、T1的運(yùn)行。其格式如下:15圖6-3TCON格式(1)TF1(TCON.7):定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)志位。定時(shí)/計(jì)數(shù)器T1計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置TF1=1,可作為中斷的申請(qǐng)位,CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0。當(dāng)采用查詢方式時(shí),TF1可用作查詢測(cè)試標(biāo)志,CPU可隨時(shí)查詢TF1的狀態(tài)。

(2)TR1(TCON.6):定時(shí)/計(jì)數(shù)器T1運(yùn)行控制位。

TR1置1時(shí),定時(shí)/計(jì)數(shù)器T1開(kāi)始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。即用軟件可控制定時(shí)/計(jì)數(shù)器的起停。例如:要啟動(dòng)T1工作,可用指令:SETBTR1(匯編)或TR1=1;(C51)。

(3)TF0(TCON.5):定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)志位,其功能與TF1相同。

(4)TR0(TCON.4):定時(shí)/計(jì)數(shù)器T0運(yùn)行控制位,其功能與TR1相同。16

6.3定時(shí)/計(jì)數(shù)器的工作方式

AT89S51單片機(jī)的定時(shí)/計(jì)數(shù)器T0有四種工作方式(方式0、1、2、3),T1有三種工作方式(方式0、1、2)。前三種工作方式,T0和T1除了所使用的寄存器、有關(guān)控制位、標(biāo)志位不同外,其他操作完全相同。為了簡(jiǎn)化敘述,下面以定時(shí)/計(jì)數(shù)器T0為例進(jìn)行介紹。

一、方式0當(dāng)M1、M0為00時(shí),定時(shí)器/計(jì)數(shù)器被設(shè)置為工作方式0,這時(shí)定時(shí)器/計(jì)數(shù)器的等效邏輯結(jié)構(gòu)框圖如圖6-4所示(以定時(shí)器/計(jì)數(shù)器T1為例,TMOD.5、TMOD.4

=

00)。17圖6-4定時(shí)器/計(jì)數(shù)器方式0邏輯結(jié)構(gòu)框圖方式0時(shí),為13位計(jì)數(shù)器,由TLx(x

=

0,1)的低5位和THx的高8位構(gòu)成。TLx低5位溢出則向THx進(jìn)位,THx計(jì)數(shù)溢出則把TCON中的溢出標(biāo)志位TFx置“1”。圖6-4中,C/T*位控制的電子開(kāi)關(guān)決定了定時(shí)器/計(jì)數(shù)器的兩種工作模式。(1)C/T*=0,電子開(kāi)關(guān)打在上面位置,T1(或T0)為定時(shí)器工作模式,把時(shí)鐘振蕩器12分頻后的脈沖作為計(jì)數(shù)信號(hào)。(2)C/T*=1,電子開(kāi)關(guān)打在下面位置,T1(或T0)為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1。19GATE位狀態(tài)決定定時(shí)器的運(yùn)行控制取決于TRx一個(gè)條件,還是取決于TRx和INTX*(x

=

0,1)引腳狀態(tài)這兩個(gè)條件。(1)GATE=0時(shí),A點(diǎn)(見(jiàn)圖6-4)電位恒為1,B點(diǎn)電位僅取決于TRx狀態(tài)。TRx

=

1,B點(diǎn)為高電平,控制端控制電子開(kāi)關(guān)閉合,允許T1(或T0)對(duì)脈沖計(jì)數(shù)。TRx

=

0,B點(diǎn)為低電平,電子開(kāi)關(guān)斷開(kāi),禁止T1(或T0)計(jì)數(shù)。(2)GATE=1時(shí),B點(diǎn)電位由INTX*(x

=

0,1)的輸入電平和TRx的狀態(tài)兩個(gè)條件來(lái)定。當(dāng)TRx=1,且INTX*=1時(shí),B點(diǎn)才為1,控制端控制電子開(kāi)關(guān)閉合,允許T1(或T0)計(jì)數(shù)。故這種情況下計(jì)數(shù)器是否計(jì)數(shù)是由TRx和INTX*兩個(gè)條件來(lái)共同控制。20二、

方式1當(dāng)M1、M0為01時(shí),工作于方式1,方式1的等效電路邏輯結(jié)構(gòu)如圖6-5所示。方式1和方式0的差別僅僅在于計(jì)數(shù)器的位數(shù)為16位計(jì)數(shù)器。21圖6-5定時(shí)器/計(jì)數(shù)器方式1邏輯結(jié)構(gòu)框圖

三、方式2當(dāng)MIM0為10時(shí),定時(shí)/計(jì)數(shù)器工作于方式2,方式2為自動(dòng)重裝初值的一個(gè)8位計(jì)數(shù)器,其結(jié)構(gòu)如圖6-6所示。方式2中,TL0作為8位加1計(jì)數(shù)器,TH0作為8位初值寄存器;當(dāng)TL0計(jì)滿溢出時(shí),由硬件使TF0置1,向CPU發(fā)中斷請(qǐng)求;同時(shí)將TH0中的計(jì)數(shù)初值自動(dòng)送入TL0,使TL0從初值開(kāi)始重新加1計(jì)數(shù)。如此周而復(fù)始的工作,直至TR0=0才會(huì)停止。

由于工作方式2省去用戶軟件中重裝常數(shù)的程序,所以特別適合于用作較精確的周期脈沖信號(hào)發(fā)生器或定時(shí)器。2223圖6-6定時(shí)器/計(jì)數(shù)器方式2邏輯結(jié)構(gòu)框圖

四、方式3方式3是為了增加一個(gè)附加的8位定時(shí)器時(shí)數(shù)器而設(shè)置的,從而使AT89S51單片機(jī)具有3個(gè)定時(shí)器/計(jì)數(shù)器。方式3只適用于定時(shí)/計(jì)數(shù)器T0,定時(shí)器/計(jì)數(shù)器T1不能工作在方式3。T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)(此時(shí)T1可用來(lái)作為串行口波特率產(chǎn)生器)。1.工作方式3下的T0當(dāng)TMOD的低2位為11時(shí),T0的工作方式為方式3,各引腳與T0的邏輯關(guān)系如圖6-6所示。定時(shí)器時(shí)數(shù)器T0分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/T、GATE、TR0、INT0,而TH0被固定為一個(gè)8位定時(shí)器(不能作為外部計(jì)數(shù)模式),并使用定時(shí)器T1的狀態(tài)控制位TR1和TF1。2425圖6-7定時(shí)器/計(jì)數(shù)器T0方式3的邏輯結(jié)構(gòu)框圖2.T0工作在方式3時(shí)T1的各種工作方式一般情況下,當(dāng)T1用作串行口的波特率發(fā)生器時(shí),T0才工作在方式3。T0處于工作方式3時(shí),T1可定為方式0、方式1和方式2,用來(lái)作為串行口的波特率發(fā)生器,或不需要中斷的場(chǎng)合。(1)T1工作在方式0。T1的控制字中M1M0=00時(shí),T1工作在方式0,工作示意圖如圖6-8所示

26圖6—8T0工作在方式3時(shí)T1為方式0的工作示意圖(2)T1工作在方式1當(dāng)T1的控制字中M1、M0

=

01時(shí),T1工作在方式1,工作示意圖如圖6-9所示。27圖6-9T0工作在方式3時(shí)T1為方式1的工作示意圖(3)T1工作在方式2當(dāng)T1的控制字中M1、M0

=

10時(shí),T1的工作方式為方式2,工作示意圖如圖6-10所示。

28圖6-10T0工作在方式3時(shí)T1為方式2的工作示意圖(4)T1設(shè)置在方式3當(dāng)T0設(shè)置在方式3時(shí),再把T1也設(shè)置成方式3,此時(shí)T1停止計(jì)數(shù)。在應(yīng)用定時(shí)/計(jì)數(shù)器時(shí),需編制初始化程序:

1、初始化TMOD;

2、計(jì)算裝入定時(shí)/計(jì)數(shù)器的初值X;

(1)

計(jì)數(shù):X=M-N;M:所選工作方式計(jì)數(shù)的最大值M=213=8192(方式0)M=216=65536(方式1)M=28=256(方式2)

N:計(jì)數(shù)值(由外部的脈沖數(shù))(2)定時(shí):X=M–N=M–t/Tcy(N由內(nèi)部時(shí)鐘觸發(fā),t為所要的定時(shí)時(shí)間,Tcy為機(jī)器周期)3、確定IE、IP;(中斷情況)4、啟動(dòng)計(jì)數(shù)(置TRi為“1”)

6.4定時(shí)/計(jì)數(shù)器應(yīng)用舉例初始化舉例【例6-3】設(shè)計(jì)一個(gè)產(chǎn)生t=20ms的周期信號(hào)發(fā)生器,設(shè)單片機(jī)晶振頻率為12MHz

。解:(1)選T0;C/T=0(定時(shí));GATE=0;工作方式1TMOD=00000001B=0X01

(2)計(jì)算應(yīng)置入T0的定時(shí)初值

t=20ms的周期信號(hào)發(fā)生器,定時(shí)時(shí)間=10msN=t/Tcy=t/[12×(1/fosc)]=10ms/1μs=10000X=M–N=65536-10000=55536=0XD8F0

裝入T0TL0=0XF0;TH0=0XD8【例6-4】用單片機(jī)定時(shí)計(jì)數(shù)器T1對(duì)外部脈沖計(jì)數(shù)。要求每計(jì)12個(gè)脈沖發(fā)一個(gè)信號(hào)表示計(jì)數(shù)值到。解:采用定時(shí)計(jì)數(shù)器T1計(jì)數(shù),選方式2,GATE=0(GATE=0,C/T=1,M0M1=10)

TMOD=01100000B=60H(2)裝入T1的計(jì)數(shù)值:X=

M-N

=256-12=244=0XF4(裝入時(shí)需要轉(zhuǎn)換為16進(jìn)制)練習(xí)1定時(shí)計(jì)數(shù)器初值計(jì)算1、利用定時(shí)器1對(duì)外計(jì)數(shù)100次,計(jì)算在方式2工作方式下的時(shí)間常數(shù),并對(duì)TMOD、T1進(jìn)行設(shè)置。2、若振蕩器頻率為12MHz,利用定時(shí)器0,在P1.0輸出一個(gè)周期為60ms的方波,計(jì)算在方式1工作方式下的時(shí)間常數(shù),并對(duì)TMOD、T0進(jìn)行設(shè)置。【例6-5】利用定時(shí)/計(jì)數(shù)T0的工作在方式1,產(chǎn)生10ms的定時(shí),并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式或查詢方式,設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。XTAL1XTAL289C51+5VC3R1KRSTC1C212MHZ示波器P1.0解:(1)T0工作在方式1,定時(shí):M1M0=01GATE=0C/T=0TMOD=00000001B=0X01(2)計(jì)算定時(shí)初值:定時(shí)時(shí)間

X=M-N=M—t/Tcy。方式1為16位計(jì)數(shù):M=216=65536;t=10ms;時(shí)鐘頻率12MHz,TCY=1μs

求得:X=65536-10ms/1μs=65536-10000=55536=D8F0H低8位F0H應(yīng)裝入TL0,高8位D8H應(yīng)裝入TH0(3)采用中斷方式時(shí),需要對(duì)IE賦值,開(kāi)放中斷。應(yīng)將IE中的EA、ET0置為“1”,開(kāi)放T0的中斷(4)定時(shí)10ms,產(chǎn)生20ms的方波,可以在P1.0引腳輸出10ms的正波,再輸出10ms的負(fù)波,實(shí)現(xiàn)的方法是將P1.0每次求反,用CPL指令。C51語(yǔ)言編程:中斷方式

#include<reg51.h>

sbitP1_0=P1^0;

voidmain()

{TMOD=0x01;

TH0=0xF0;TL0=0xD0;

EA=1;

ET0=1;

TR0=1;while(1);}voidtime0_int(void)interrup1{ P1_0=!P1_0;TH0=0xF0;TL0=0xD0;//重新裝入初值

}采用查詢方式:#include<reg51.h>

sbitP1_0=P1^0;

voidmain(){chari;TMOD=0x01;

TH0=0xF0;TL0=0xD0;

TR0=1;

for(;;){if(TF0){TF0=0;P1_0=!P1_0;TH0=0xF0;TL0=0xD0;}}}【例6-6】方式2應(yīng)用利用定時(shí)/計(jì)數(shù)器T1,采用工作方式2,使P1.7引腳輸出lms的方波。設(shè)系統(tǒng)時(shí)鐘頻率為6MHZ。解:計(jì)算初值:

M1M0=10,GATE=0,C/T=0,可取方式控制字為TMOD=20H;計(jì)算定時(shí)初值:定時(shí)時(shí)間

X=M-N=M—t/Tcy。方式2為8位計(jì)數(shù):M=256;t=1/2ms=0.5ms;時(shí)鐘頻率6MHz,TCY=2μs

求得:X=256-0.5ms/2μs=256-250=06H

方式2為自動(dòng)重裝初值的8位計(jì)數(shù)器,低8位裝入06H,高8位也要裝入06H作后備。C51程序:

#include<reg51.h>

sbitP1_7=P1^7;//定義位變量voidmain() //主函數(shù){TMOD=0x20;//設(shè)置T0為工作方式0TH0=0x06;TL0=0x06;TR1=1; //啟動(dòng)計(jì)數(shù)

while(1){P1_7=!P1_7;//取反后送P1.0口

}}【例6-7】設(shè)系統(tǒng)時(shí)鐘為12MHz,編寫(xiě)程序?qū)崿F(xiàn)從P1.l引腳上輸出一個(gè)周期為1S的方波。基本思想:要在P1.1上產(chǎn)生周期為1s的方波,定時(shí)器應(yīng)產(chǎn)生500ms的周期性定時(shí)。AT89S51定時(shí)最長(zhǎng)的是方式1,定時(shí)時(shí)間為:t=M×TCY=65536×1μS僅為65ms(系統(tǒng)時(shí)鐘12MHz)多一點(diǎn)。因此當(dāng)定時(shí)時(shí)間較長(zhǎng)時(shí),用單個(gè)定時(shí)器不能直接實(shí)現(xiàn)。為了解決定時(shí)時(shí)間較長(zhǎng)的問(wèn)題,可采用下面2種方法來(lái)實(shí)現(xiàn):1、硬軟件結(jié)合方式:使定時(shí)器T0定時(shí)50ms,再用軟件進(jìn)行10次計(jì)數(shù)循環(huán)。

2、用2個(gè)定時(shí)計(jì)數(shù)器T0和T1級(jí)聯(lián)。用2個(gè)定時(shí)計(jì)數(shù)器T0和T1級(jí)聯(lián),T0工作在定時(shí)方式,定時(shí)10ms由P1.0輸出20ms的周期方波,將T0的輸出P1.0接到T1的計(jì)數(shù)輸入端,T1工作在計(jì)數(shù),計(jì)算值50次,T1輸出接P1.1引腳,作1S方波的輸出。解1:方法1,硬軟件結(jié)合方式:定時(shí)器T0定時(shí)50mS,用循環(huán)執(zhí)行10次。選定時(shí)器T0工作在方式1:TMOD=0X01定時(shí)計(jì)算:X=M-NN=t/Tcy=50mS/1μS=50000X=65536-50000=15536=3CB0HTH0=0X3CTL0=0XB0

#include<reg51.h> voiddelay1s(){unsignedchari;

for(i=0;i<0x0A;i++) //設(shè)置10次循環(huán)次數(shù)

{ TH0=0x3c; //設(shè)置定時(shí)器初值為3CB0H,定時(shí)50msTL0=0xb0;TR0=1; //啟動(dòng)T1while(!TF0);//查詢計(jì)數(shù)是否溢出,即定時(shí)50ms時(shí)間到,

TF1=0;//50ms定時(shí)時(shí)間到,將T1溢出標(biāo)志位TF1清零

}}voidmain() //主函數(shù){

sbitP1_1=P1^1;

TMOD=0x01; //設(shè)置T0為工作方式1while(1){P1_1=!P1_1delay1s(); //調(diào)用1秒延時(shí)函數(shù)

}}解2:采用T0和T1級(jí)聯(lián)方式。(1)T0工作在方式1定時(shí),定時(shí)10ms,輸出20ms的方波,由P1.0輸出加到定時(shí)器T1的計(jì)數(shù)輸入腳P3.5(T1引腳),作為T1的計(jì)數(shù)輸入。(2)T1工作在方式2計(jì)數(shù)方式,計(jì)數(shù)50次,由P1.1輸出1S方波。初值X計(jì)算:TMOD=01100001B=61H,定時(shí)器T0和T1均采用中斷方式工作。

參考程序如下:#include<reg51.h>sbitP1.0=P1^0;sbitP1.1=P1^1;

voidmain(void){TMOD=0x61;//“T0為方式1定時(shí),T2為方式2計(jì)數(shù)”

P1.0=0;

TH0=(65536-10000)/256;//給T0裝初值

TL0=(65536-10000)%256;

TH1=206;//給T1裝初值,X=256-50TL1=206;

EA=1; //總中斷開(kāi)

ET0=1; //允許T0中斷

ETI=1; //允許T1中斷

TR0=1;TRI=1;

while(1);}voidT0_int(void)interrupt1{TH0=(65536-50000)/256;//重新裝初值

TL0=(65536-50000)%256;

P1_0=!P1_0;}voidT1_int(void)interrupt3{P1.1=!P1.l;};//P1.1產(chǎn)生1S方波

6.6 報(bào)警電路設(shè)計(jì)當(dāng)單片機(jī)控制系統(tǒng)發(fā)生故障或處于某種緊急狀態(tài)時(shí),用報(bào)警電路發(fā)出聲音報(bào)警,可以提醒人們警覺(jué),及時(shí)救助,避免重大事故的蔓延,減少因事故造成的損失。用單片機(jī)系統(tǒng)和聲光電器件很容易實(shí)現(xiàn)該功能。報(bào)警程序需要用到定時(shí),在報(bào)警時(shí)定時(shí)可以用定時(shí)/計(jì)數(shù)器實(shí)現(xiàn),也可以采用軟件延時(shí)實(shí)現(xiàn)。

6.6.1揚(yáng)聲器報(bào)警接口揚(yáng)聲器報(bào)警電路的設(shè)計(jì)只需購(gòu)買市售的揚(yáng)聲器(或用仿真儀上的蜂鳴器模擬),然后使用AT89S51的I/O口線通過(guò)驅(qū)動(dòng)器驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,可根據(jù)揚(yáng)聲器的功率來(lái)決定是否使用驅(qū)動(dòng)器。本例采用了TTL電路74LS06芯片作為驅(qū)動(dòng)器,如圖6-11所示。使揚(yáng)聲器發(fā)出報(bào)警信號(hào),可用P1.7輸出不同頻率的音頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器,使揚(yáng)聲器發(fā)出滴答長(zhǎng)短交替的聲音作為報(bào)警信號(hào)。報(bào)警聲音還可以設(shè)計(jì)用按鍵控制是否發(fā)出報(bào)警信號(hào),可由P1.0接1個(gè)開(kāi)關(guān)K控制,K合上報(bào)警信號(hào)開(kāi)始,K斷開(kāi)報(bào)警信號(hào)停止。圖6-11報(bào)警電路【例6-9】喇叭報(bào)警設(shè)計(jì):用P1.7輸出1KHZ和2KHZ頻率的變頻信號(hào)驅(qū)動(dòng)揚(yáng)聲器報(bào)警,設(shè)每秒鐘交換一次。(采用軟件定時(shí))#include<reg51.h>//頭文件#defineucharunsignedchar#defineuintunsignedintsbitBUZZER=P1^7;//定義P1.7為喇叭驅(qū)動(dòng)端voiddelay_500us(void)//500us延遲函數(shù),用于產(chǎn)生1KHZ信號(hào){unsignedchara,b;

for(b=71;b>0;b--)

溫馨提示

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