《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目四_第1頁(yè)
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目四_第2頁(yè)
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目四_第3頁(yè)
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目四_第4頁(yè)
《單片機(jī)原理及應(yīng)用技術(shù)項(xiàng)目化教程》課件項(xiàng)目四_第5頁(yè)
已閱讀5頁(yè),還剩76頁(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)介

模塊4定時(shí)器控制的報(bào)警燈設(shè)計(jì)4.1項(xiàng)目描述4.2項(xiàng)目目的與要求

4.3項(xiàng)目支撐知識(shí)鏈接4.4項(xiàng)目實(shí)施項(xiàng)目小結(jié)項(xiàng)目拓展技能與練習(xí)

【項(xiàng)目導(dǎo)入】

在單片機(jī)的應(yīng)用系統(tǒng)中,往往會(huì)遇到要求用定時(shí)器對(duì)某些控制系統(tǒng)進(jìn)行設(shè)計(jì),例如定時(shí)檢測(cè)系統(tǒng)、定時(shí)掃描系統(tǒng)等。51系列單片機(jī)中設(shè)置有2個(gè)16位定時(shí)器/計(jì)數(shù)器,分別是T0和T1,要學(xué)會(huì)對(duì)定時(shí)器進(jìn)行編程,必須掌握這兩個(gè)定時(shí)器的工作方式和初值的計(jì)算。在此,我們通過(guò)一個(gè)項(xiàng)目設(shè)計(jì),讓同學(xué)們掌握定時(shí)器/計(jì)數(shù)器在單片機(jī)控制技術(shù)中的使用。

【項(xiàng)目目標(biāo)】

1.知識(shí)目標(biāo)

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

(2)理解寄存器TMOD、TCON、TH0、TL0、TH1、TL1的功能;

(3)掌握定時(shí)器/計(jì)數(shù)器的工作方式;

(4)掌握定時(shí)器的定時(shí)初值的計(jì)算。

2.能力目標(biāo)

(1)根據(jù)需要會(huì)選擇使用定時(shí)器/計(jì)數(shù)器的某種工作

方式;

(2)會(huì)計(jì)算定時(shí)器/計(jì)數(shù)器的初值;

(3)能熟練使用定時(shí)器/計(jì)數(shù)器;

(4)會(huì)運(yùn)用C51語(yǔ)言對(duì)應(yīng)用程序進(jìn)行編程。

4.1項(xiàng)目描述

單片機(jī)的定時(shí)器/計(jì)數(shù)器在工業(yè)控制與測(cè)量領(lǐng)域有著廣泛的應(yīng)用,比如定時(shí)檢測(cè)、定時(shí)計(jì)數(shù)及定時(shí)掃描等。本項(xiàng)目通過(guò)設(shè)計(jì)一個(gè)由定時(shí)器控制的報(bào)警旋轉(zhuǎn)燈,使學(xué)生掌握定時(shí)器/計(jì)數(shù)器的工作原理、工作方式和定時(shí)器/計(jì)數(shù)器的初值計(jì)算。

4.2項(xiàng)目目的與要求

本項(xiàng)目的目的就是設(shè)計(jì)一個(gè)由定時(shí)器控制的報(bào)警旋轉(zhuǎn)燈系統(tǒng)。通過(guò)控制P2口的8個(gè)LED燈,要求它們旋轉(zhuǎn)閃爍紅燈并發(fā)出報(bào)警聲。項(xiàng)目在實(shí)施過(guò)程中需要解決以下關(guān)鍵問(wèn)題:

(1)與定時(shí)器/計(jì)數(shù)器相關(guān)的寄存器的各位的功能是怎

樣的;

(2)選擇哪種定時(shí)器,采用何種工作方式,如何計(jì)算定時(shí)初值;

(3)編寫(xiě)延時(shí)程序;

(4)如何裝入初值。

4.3項(xiàng)目支撐知識(shí)鏈接

4.3.1定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)

1.定時(shí)器的結(jié)構(gòu)及工作原理

1)定時(shí)器/計(jì)數(shù)器組成框圖

89C51單片機(jī)內(nèi)部有兩個(gè)16位可編程定時(shí)器/計(jì)數(shù)器:定時(shí)器0(T0)和定時(shí)器1(T1)。其邏輯結(jié)構(gòu)如圖4-1所示。圖4-151單片機(jī)定時(shí)器/計(jì)數(shù)器的內(nèi)部結(jié)構(gòu)圖由圖4-1可知,定時(shí)器/計(jì)數(shù)器0、定時(shí)器/計(jì)數(shù)器1是16位加法計(jì)數(shù)器,分別由兩個(gè)8位專用寄存器組成:定時(shí)器0由TH0和TL0組成,定時(shí)器1由TH1和TL1組成。TL0、TL1、TH0、TH1的訪問(wèn)地址依次為8AH~8DH,每個(gè)寄存器均可單獨(dú)訪問(wèn)。定時(shí)器0或定時(shí)器1用作計(jì)數(shù)器時(shí),對(duì)芯片引腳T0(P3.4)或T1(P3.5)上輸入的脈沖計(jì)數(shù),每輸入一個(gè)脈沖,加法計(jì)數(shù)器加1;其用作定時(shí)器時(shí),對(duì)內(nèi)部機(jī)器周期脈沖計(jì)數(shù),由于機(jī)器周期是定值,故計(jì)數(shù)值確定時(shí),時(shí)間也隨之確定。TMOD、TCON與定時(shí)器0、定時(shí)器1間通過(guò)內(nèi)部總線及邏輯電路連接,TMOD用于設(shè)置定時(shí)器的工作方式,TCON用于控制定時(shí)器的啟動(dòng)與停止。

2)定時(shí)器/計(jì)數(shù)器工作原理

當(dāng)定時(shí)器/計(jì)數(shù)器設(shè)置為定時(shí)工作方式時(shí),計(jì)數(shù)器對(duì)內(nèi)部機(jī)器周期計(jì)數(shù),每過(guò)一個(gè)機(jī)器周期,計(jì)數(shù)器增1,直至計(jì)滿溢出。定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩頻率緊密相關(guān),C51單片機(jī)的一個(gè)機(jī)器周期由12個(gè)振蕩脈沖組成。當(dāng)采用12MHz晶振時(shí),一個(gè)機(jī)器周期為1μs,計(jì)數(shù)頻率為1MHz。因此,適當(dāng)選擇定時(shí)器的初值可獲取各種定時(shí)時(shí)間。當(dāng)定時(shí)器/計(jì)數(shù)器設(shè)置為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)器對(duì)來(lái)自輸入引腳T0(P3.4)和T1(P3.5)的外部信號(hào)計(jì)數(shù),外部脈沖的下降沿將觸發(fā)計(jì)數(shù)。在每個(gè)機(jī)器周期的S5P2期間采樣引腳輸入電平,若前一個(gè)機(jī)器周期采樣值為1,后一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。新的計(jì)數(shù)值是在檢測(cè)到輸入引腳電平發(fā)生1到0的負(fù)跳變后,與下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器中的??梢?jiàn),檢測(cè)一個(gè)由1到0的負(fù)跳變,需要兩個(gè)機(jī)器周期。所以,最高檢測(cè)頻率為振蕩頻率的1/24。計(jì)數(shù)器對(duì)外部輸入信號(hào)的占空比沒(méi)有特別的限制,但必須保證輸入信號(hào)的高電平與低電平的持續(xù)時(shí)間在一個(gè)機(jī)器周期以上。當(dāng)設(shè)置了定時(shí)器的工作方式并啟動(dòng)定時(shí)器工作后,定時(shí)器就按被設(shè)定的工作方式獨(dú)立工作,不再占用CPU的操作時(shí)間,只有在計(jì)數(shù)器計(jì)滿溢出時(shí),才可能中斷CPU當(dāng)前的操作。

2.定時(shí)器/計(jì)數(shù)器的相關(guān)寄存器

如上所述,要使定時(shí)器/計(jì)數(shù)器按要求工作,得到所需的定時(shí)時(shí)間或計(jì)數(shù)值,必須通過(guò)編程進(jìn)行控制才能實(shí)現(xiàn)。通過(guò)對(duì)工作方式控制寄存器(TMOD)和定時(shí)器/計(jì)數(shù)器控制寄存器(TCON)的設(shè)置即可實(shí)現(xiàn)對(duì)定時(shí)器/計(jì)數(shù)器的控制。

51單片機(jī)的定時(shí)器/計(jì)數(shù)器(T0、T1)主要由工作方式寄存器TMOD和控制寄存器TCON等組成。可以通過(guò)軟件對(duì)這些寄存器進(jìn)行設(shè)置來(lái)實(shí)現(xiàn)不同的控制目的。其中,TH0和TL0用來(lái)存放定時(shí)器T0的計(jì)數(shù)初值,TMOD用來(lái)控制定時(shí)器的工作方式,TCON用作中斷溢出標(biāo)志并控制定時(shí)器的啟、停。

1)工作方式寄存器TMOD

特殊功能寄存器TMOD用于控制T0和T1的工作方式,低4位用于控制T0,高4位用于控制T1。TMOD的地址為89H,其各位狀態(tài)只能通過(guò)CPU的字節(jié)傳送指令來(lái)設(shè)定,而不能用位尋址指令改變,復(fù)位時(shí)各位狀態(tài)為0,其各位的定義如下:其中,低4位用于T0,高4位用于T1,它們的含義是完全相同的。TMOD各位的功能如下:

M1和M0:操作方式控制位。兩位可形成四種編程,對(duì)應(yīng)于四種操作方式,如表4-1所示。

C/:功能選擇位。當(dāng)C/為0時(shí),選擇定時(shí)方式。在定時(shí)方式中,以振蕩器輸出時(shí)鐘脈沖的12分頻信號(hào)作為計(jì)數(shù)信號(hào),也就是每一個(gè)機(jī)器周期定時(shí)器加1。若晶振頻率為

12MHz,則定時(shí)器的計(jì)數(shù)頻率為1MHz;當(dāng)C/為1時(shí),選擇計(jì)數(shù)方式,采用外部引腳T0(P3.4)、T1(P3.5)的輸入脈沖作為計(jì)數(shù)脈沖,當(dāng)外部輸入脈沖發(fā)生1到0的負(fù)跳變時(shí),計(jì)數(shù)器加1,最高計(jì)數(shù)頻率為時(shí)鐘頻率的1/24。

GATE:門(mén)控位。GATE為0時(shí),允許軟件控制位TR0或TR1啟動(dòng)定時(shí)器;當(dāng)GATE為1時(shí),允許外部中斷引腳

(或)為高電平且由軟件使TR0(或TR1)置1,才能啟動(dòng)定時(shí)器工作。TMOD不能進(jìn)行位尋址,只能用字節(jié)指令設(shè)置定時(shí)器工作方式,復(fù)位時(shí),TMOD所有位均為零。

2)控制寄存器TCON

TCON是一個(gè)8位寄存器,用于控制定時(shí)器的啟動(dòng)/停止以及標(biāo)志定時(shí)器的溢出中斷申請(qǐng)。TCON的地址為88H,既可進(jìn)行字節(jié)尋址,又可進(jìn)行位尋址,復(fù)位時(shí)所有位被清零。TR0和TR1分別用于控制T0和T1的啟動(dòng)與停止,TF0和TF1用于標(biāo)志T0和T1是否產(chǎn)生了溢出中斷請(qǐng)求。控制寄存器TCON的高4位是定時(shí)器運(yùn)行的控制位和溢出標(biāo)志位,低4位是外部中斷的中斷標(biāo)志和中斷觸發(fā)方式控制位。TCON各位定義及格式如圖4-2所示。圖4-2控制寄存器TCON的位定義

TF1:T1的溢出標(biāo)志位。當(dāng)T1溢出時(shí),由硬件自動(dòng)使中斷觸發(fā)器TF1置1,并向CPU申請(qǐng)中斷,當(dāng)CPU響應(yīng)中斷進(jìn)入中斷服務(wù)程序后,TF1又被硬件自動(dòng)清零,TF1也可以由軟件清零。

TF0:T0溢出標(biāo)志位。其功能和操作與TF1相同。

TR1:定時(shí)器T1運(yùn)行控制位,可通過(guò)軟件置1或清0來(lái)啟動(dòng)或關(guān)閉T1。例如,SETBTR1,即啟動(dòng)T1;CLRTR1,則關(guān)閉T1。

TR0:定時(shí)器T0運(yùn)行控制位。其功能及操作同TR1。

IE1,IT1,IE0,IT0:外部中斷、請(qǐng)求及請(qǐng)求方式控制位。其定義前面已經(jīng)講過(guò)。

定時(shí)器/計(jì)數(shù)器T0和T1是在TMOD和TCON的聯(lián)合控制下進(jìn)行定時(shí)或計(jì)數(shù)工作的,其輸入時(shí)鐘和控制邏輯可用圖

4-3綜合表示。圖4-3T0和T1輸入時(shí)鐘與控制邏輯圖

3)定時(shí)器/計(jì)數(shù)器的初始化

由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以,一般在使用定時(shí)器/計(jì)數(shù)器前都要對(duì)其進(jìn)行初始化。初始化步驟如下:

(1)確定工作方式:對(duì)TMOD賦值。賦值語(yǔ)句為T(mén)MOD=0x00,設(shè)定T0為方式0定時(shí)。

(2)預(yù)置定時(shí)或計(jì)數(shù)的初值:直接將初值寫(xiě)入TH0、TL0或TH1、TL1,注意定時(shí)器/計(jì)數(shù)器的初值因工作方式的不同而不同。

(3)根據(jù)需要開(kāi)啟定時(shí)器/計(jì)數(shù)器中斷:直接對(duì)IE寄存器賦值。

(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器工作:將TR0或TR1置“1”。

當(dāng)GATE=0時(shí),直接由軟件置位啟動(dòng);當(dāng)GATE=1時(shí),除軟件置位外,還必須在外中斷引腳處加上相應(yīng)的電平值才能啟動(dòng)。

至此為止,定時(shí)器/計(jì)數(shù)器的初始化過(guò)程已完畢。4.3.2定時(shí)器/計(jì)數(shù)器的工作方式

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

1.工作方式0

當(dāng)TMOD的M1M0為00時(shí),定時(shí)器/計(jì)數(shù)器工作于方式0,如圖4-4所示。方式0為13位計(jì)數(shù),由TL0的低5位(高3位未用)和TH0的高8位組成。由圖4-4可知:16位加法計(jì)數(shù)器(TH0和TL0)只用了13位。其中,TH0占高8位,TL0占低5位。當(dāng)TL0低5位溢出時(shí)自動(dòng)向TH0進(jìn)位,而TH0溢出時(shí)向中斷位TF0進(jìn)位(硬件自動(dòng)置位),并申請(qǐng)中斷。圖4-4定時(shí)器0在方式0時(shí)的邏輯電路結(jié)構(gòu)當(dāng)C/

=0時(shí),T0選擇為定時(shí)器模式,對(duì)CPU內(nèi)部機(jī)器周期加1計(jì)數(shù),其定時(shí)時(shí)間為T(mén)=(213-T0初值)×機(jī)器周

期。如果晶振頻率為12MHz,則時(shí)鐘周期為1/12μs,當(dāng)

初值為0時(shí),最長(zhǎng)的定時(shí)時(shí)間為T(mén)MAX=(213-0)×1/12×

12μs=8.192ms。

當(dāng)C/=?1時(shí),控制開(kāi)關(guān)與引腳T0(P3.4)接通,計(jì)數(shù)器T0對(duì)來(lái)自外部引腳T0的輸入脈沖計(jì)數(shù),當(dāng)外部信號(hào)電平發(fā)生由1到0的跳變時(shí),計(jì)數(shù)器加1,這時(shí)T0成為外部事件計(jì)

數(shù)器。當(dāng)GATE?=?0時(shí),或門(mén)輸出恒為1,使外部中斷輸入引腳信號(hào)失效,同時(shí)又打開(kāi)與門(mén),由TR0控制定時(shí)器T0的開(kāi)啟和關(guān)斷。若TR0?=?1,接通控制開(kāi)關(guān),啟動(dòng)定時(shí)器T0工作,計(jì)數(shù)器被控制為允許計(jì)數(shù)。若TR0=0,則斷開(kāi)控制開(kāi)關(guān),停止計(jì)數(shù)。

當(dāng)GATE=1時(shí),與門(mén)的輸出由的輸入電平和TR0位的狀態(tài)來(lái)確定。若TR0?=?1,則打開(kāi)與門(mén),外部信號(hào)電平通過(guò)引腳直接開(kāi)啟或關(guān)斷定時(shí)器T0。當(dāng)為高電平時(shí),允許計(jì)數(shù),否則停止計(jì)數(shù)。這種工作方式可用來(lái)測(cè)量外部信號(hào)的脈沖寬度等。

2.工作方式1

當(dāng)M1M0為01時(shí),定時(shí)器/計(jì)數(shù)器工作在方式1,其電路結(jié)構(gòu)和操作方法與方式0基本相同,它們的差別僅在于計(jì)數(shù)的位數(shù)不同,如圖4-5所示。圖4-5定時(shí)器0在方式1時(shí)的邏輯電路結(jié)構(gòu)由圖4-5可知,方式1構(gòu)成一個(gè)16位定時(shí)器/計(jì)數(shù)器,其結(jié)構(gòu)與操作幾乎完全與方式0相同,唯一差別是二者計(jì)數(shù)位數(shù)不同。作定時(shí)器用時(shí)其定時(shí)時(shí)間為(216-定時(shí)器0初值)×機(jī)器周期;作計(jì)數(shù)用時(shí)其計(jì)數(shù)值為216-計(jì)數(shù)初值,計(jì)數(shù)范圍為1~65536(216)。

3.工作方式2

當(dāng)TMOD的M1M0為10時(shí),定時(shí)器/計(jì)數(shù)器工作在方式2,其邏輯結(jié)構(gòu)如圖4-6所示。圖4-6T0方式2的邏輯結(jié)構(gòu)方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式,僅用TL0計(jì)數(shù),最大計(jì)數(shù)值為28=256,計(jì)滿溢出后,一方面進(jìn)位TF0,使溢出標(biāo)志TF0=1,另一方面,使原來(lái)裝在TH0中的初值裝入TL0。

方式2的優(yōu)點(diǎn)是定時(shí)初值可自動(dòng)恢復(fù),TH0中存放初值;缺點(diǎn)是計(jì)數(shù)范圍小,只適用于需要重復(fù)定時(shí),而定時(shí)范圍不大的應(yīng)用場(chǎng)合。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為X=28-N??梢?jiàn),計(jì)數(shù)個(gè)數(shù)為1時(shí),初值為255,計(jì)數(shù)個(gè)數(shù)為256時(shí),初值X為0,即初值在255~0范圍時(shí),計(jì)數(shù)范圍為1~256。由于工作方式2省去了用戶軟件中重裝常數(shù)的程序,所以特別適于用作較精確的脈沖信號(hào)發(fā)生器。方式2中,16位加法計(jì)數(shù)器的TH0和TL0具有不同功能。其中,TL0是8位計(jì)數(shù)器,TH0是重置初值的8位緩沖器。

4.方式3

定時(shí)器/計(jì)數(shù)器T0和T1在前三種工作方式下,其功能是完全相同的,但在方式3下,T0與T1的功能相差很大。當(dāng)T1設(shè)置為方式3時(shí),它將保持初始值不變,并停止計(jì)數(shù),其狀態(tài)相當(dāng)于將啟/停控制位設(shè)置成TR1=0,因而T1不能工作在方式3下。當(dāng)將T0設(shè)置為方式3時(shí),T0的兩個(gè)寄存器TH0和TL0被分成兩個(gè)互相獨(dú)立的8位計(jì)數(shù)器,其邏輯結(jié)構(gòu)如圖4-7所示。圖4-7方式3的邏輯結(jié)構(gòu)由圖4-7可知,在方式3下,定時(shí)器0被分解成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。其中,TL0占用原定時(shí)器0的控制位、引腳和中斷源,即GATE、TR0、TF0和T0(P3.4)引腳和外部中斷0(P3.2引腳)。除計(jì)數(shù)位數(shù)不同于方式0、方式1外,其功能、操作與方式0、方式1完全相同,可定時(shí),亦可計(jì)數(shù)。TH0占用原定時(shí)器1的控制位TF1和TR1,同時(shí)還占用了定時(shí)器1的中斷源,其啟動(dòng)和關(guān)閉僅受TR1置1或清0控制。TH0只能對(duì)機(jī)器周期進(jìn)行計(jì)數(shù),因此,TH0只能用作簡(jiǎn)單的內(nèi)部定時(shí),不能用作對(duì)外部脈沖進(jìn)行計(jì)數(shù),是定時(shí)器0附加的一個(gè)8位定時(shí)器。4.3.3定時(shí)器/計(jì)數(shù)器應(yīng)用舉例

51單片機(jī)的計(jì)數(shù)器是可編程的。因此,在利用定時(shí)器/計(jì)數(shù)器進(jìn)行定時(shí)或計(jì)數(shù)之前,先要通過(guò)軟件對(duì)它進(jìn)行初始化。其初始化應(yīng)完成的工作如下:

(1)對(duì)TMOD賦值,以確定T0和T1的工作方式。

(2)計(jì)算初值,并將其寫(xiě)入TH0、TL0或TH1、TL1。

(3)設(shè)置IE、IP來(lái)規(guī)定中斷的開(kāi)放/禁止和優(yōu)先級(jí)。

(4)使TR0或TR1置位,啟動(dòng)定時(shí)器/計(jì)數(shù)器開(kāi)始定時(shí)或計(jì)數(shù)。

1.方式0的應(yīng)用

【例4-1】利用定時(shí)器T0的方式0定時(shí)由P1.0輸出頻率為500Hz的方波,設(shè)單片機(jī)晶振頻率為12MHz。

分析:選用定時(shí)器/計(jì)數(shù)器T0作定時(shí)器,輸出為P1.0引腳,500Hz的方波可由間隔1ms的高低電平相間而形成,

因而只要每隔1ms對(duì)P1.0取反一次即可得到這個(gè)方波。

定時(shí)1ms的初值:因?yàn)镃程序清單如下:

#include<reg.51.h> //頭文件

main()

{TMOD=0x00; //設(shè)T0為方式0

TH0=0xe0; //設(shè)定1ms的定時(shí)初值

TL0=0x18;

TR0=1; //啟動(dòng)T0

While(1)

{while(!TF0); //等待定時(shí)器溢出

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

P1_0=!P1_0; //取反

TH0=0xe0; //重裝初值

TL0=0x18;

}

}

2.方式1的應(yīng)用

方式1與方式0基本相同,只是方式1改用了16位計(jì)數(shù)器。當(dāng)要求定時(shí)周期較長(zhǎng)時(shí),13位計(jì)數(shù)器不夠用,可改用16位計(jì)數(shù)器。

【例4-2】利用定時(shí)器0產(chǎn)生10Hz的方波,由P1.0口輸出,設(shè)單片機(jī)晶振頻率為12MHz。分析:10Hz的方波,周期為100ms,定時(shí)時(shí)間為

50ms,也就是每50ms電平就取反一次,12MHz的機(jī)器周期為1μs,初值T0=(216-t)/T=(65536-50000)/1=0x3cb0,則TH0=0x3c,TL0=0xb0。

C語(yǔ)言的源程序如下:

#include<reg.51.h> //頭文件

main()

{TMOD=0x01;

//設(shè)T0為方式1

TH0=0x3c; //設(shè)定1ms的定時(shí)初值

TL0=0xb0;TR0=1; //啟動(dòng)T0

While(1)

{while(!TF0); //等待定時(shí)器溢出

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

P1_0=!P1_0; //取反

TH0=0x3c; //重裝初值

TL0=0xb0;

}

}

3.方式2的應(yīng)用

方式2是定時(shí)器自動(dòng)重裝載的操作方式。在這種方式下,定時(shí)器0和1的工作是相同的,它的工作過(guò)程與方式0、方式1基本相同,只不過(guò)在溢出的同時(shí),將8位二進(jìn)制初值自動(dòng)重裝載,即在中斷服務(wù)子程序中,不需要再進(jìn)行重新送初值。定時(shí)器T1工作在方式2時(shí),可直接用作串行口波特率發(fā)生器。

【例4-3】設(shè)計(jì)用定時(shí)器T0控制4個(gè)LED滾動(dòng)閃爍,要求閃爍時(shí)間為200μs,硬件電路如圖4-8所示。圖4-8T0控制LED燈閃爍分析:

利用T0的方式2定時(shí),根據(jù)要求時(shí)間延時(shí)為200μs,

則初值計(jì)算為28-200=0x38,TMOD的低四位是針對(duì)T0

進(jìn)行設(shè)置的,由于T0工作在方式2作為定時(shí)使用,因此M1M0=10,C/=0,于是可得TMOD=0x02。

C51語(yǔ)言源程序?yàn)?/p>

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitB1=P0^0;

sbitG1=P0^1;

sbitR1=P0^2;

sbitY1=P0^3;

uinti,j,k;

//主程序

voidmain()

{

i=j=k=0;

P0=0xff;

TMOD=0x02; //定時(shí)器0工作方式2

TH0=256-200; //?200μs定時(shí)

TL0=256-200;

IE=0x82; //開(kāi)中斷

TR0=1; //啟動(dòng)定時(shí)器

while(1);

}//T0中斷函數(shù)

voidLED_Flash_and_Scroll()interrupt1

{

if(++k<35) return; //定時(shí)中斷若干次后執(zhí)行閃爍

k=0;

switch(i)

{ case0: B1=~B1;break;

case1: G1=~G1;break;

case2: R1=~R1;break;

case3: Y1=~Y1;break;

default:i=0; }

if(++j<300)return; //每次閃爍持續(xù)一段時(shí)間

j=0;

P0=0xff; //關(guān)閉顯示

i++; //切換到下一個(gè)LED

}

4.方式3的應(yīng)用

定時(shí)器/計(jì)數(shù)器工作在方式3只適用T0,在方式3下T0是2個(gè)8位定時(shí)器/計(jì)數(shù)器,且TH0借用了定時(shí)器T1的溢出中斷標(biāo)志TF1和運(yùn)行控制位TR1。此方式使用較少,此處不再舉例。

5.中斷與定時(shí)器/計(jì)數(shù)器的綜合應(yīng)用

定時(shí)/計(jì)數(shù)功能與中斷一樣,都是單片機(jī)的常用功能。兩者經(jīng)常同時(shí)在一起使用,因此在單片機(jī)的中斷、定時(shí)綜合應(yīng)用實(shí)例的程序編制過(guò)程中,要注意以下幾點(diǎn):

(1)選擇合適的中斷和定時(shí)/計(jì)數(shù)方式。例如,外部中斷是采用電平觸發(fā)還是脈沖下降沿觸發(fā),定時(shí)/計(jì)數(shù)是采用自動(dòng)重裝方式還是每次定時(shí)結(jié)束后用軟件重裝。

(2)確定定時(shí)結(jié)束的判別方式,是用中斷還是查詢。如果采用中斷,與其他中斷的優(yōu)先級(jí)如何確定,是否會(huì)影響系統(tǒng)的功能。

(3)正確初始化和合理分配控制功能。

【例4-4】用計(jì)數(shù)器中斷實(shí)現(xiàn)100以內(nèi)的按鍵計(jì)數(shù),要求用T0計(jì)數(shù)器,中斷實(shí)現(xiàn)按鍵計(jì)數(shù)。

分析:由于計(jì)數(shù)寄存器初值為1,因此P3.4引腳的每次負(fù)跳變都會(huì)觸發(fā)T0中斷,實(shí)現(xiàn)計(jì)數(shù)值累加。計(jì)數(shù)器的清零用外部中斷0控制。電路圖如圖4-9所示。圖4-9按鍵計(jì)數(shù)電路圖C51語(yǔ)言源程序如下:

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//段碼

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

ucharCount=0;

//主程序

voidmain(){

P0=0x00;

P2=0x00;

TMOD=0x06; //計(jì)數(shù)器T0方式2

TH0=TL0=256-1; //計(jì)數(shù)值為1

ET0=1; //允許T0中斷

EX0=1; //允許INT0中斷

EA=1; //允許CPU中斷

IP=0x02; //設(shè)置優(yōu)先級(jí),T0高于INT0

IT0=1; //?INT0中斷觸發(fā)方式為下降沿觸發(fā)

TR0=1; //啟動(dòng)T0

while(1)

{ P0=DSY_CODE[Count/10];

P2=DSY_CODE[Count%10];

}

}

//T0計(jì)數(shù)器中斷函數(shù)

voidKey_Counter()interrupt1

{

Count=(Count+1)%100; //因?yàn)橹挥袃晌粩?shù)碼管,所以計(jì)數(shù)控制在100以內(nèi)(00~99)

}

//INT0中斷函數(shù)

voidClear_Counter()interrupt0

{

Count=0;

}

4.4項(xiàng)目實(shí)施

4.4.1項(xiàng)目硬件設(shè)計(jì)

該控制系統(tǒng)結(jié)構(gòu)比較簡(jiǎn)單,其硬件電路模塊包括電源電路、時(shí)鐘電路、按鍵復(fù)位電路和LED燈接口電路,硬件原理圖如圖4-10所示。圖4-10定時(shí)器控制的報(bào)警燈設(shè)計(jì)電路圖4.4.2項(xiàng)目軟件設(shè)計(jì)

由硬件電路可知,要實(shí)現(xiàn)報(bào)警燈旋轉(zhuǎn)閃爍紅燈,必須要求P2口依次輸出高電平;在程序設(shè)計(jì)中需要開(kāi)啟兩個(gè)定時(shí)器,即T0和T1,用定時(shí)器T0產(chǎn)生報(bào)警響聲,用定時(shí)器T1實(shí)現(xiàn)紅燈的旋轉(zhuǎn)。報(bào)警開(kāi)關(guān)的實(shí)現(xiàn)是通過(guò)按下按鈕產(chǎn)生的外部中斷0信號(hào)形成的,當(dāng)按下按鍵時(shí),最高級(jí)別的中斷就產(chǎn)生了(=0,中斷發(fā)生),于是紅燈旋轉(zhuǎn)和報(bào)警聲同時(shí)產(chǎn)生。把系統(tǒng)要實(shí)現(xiàn)的功能搞清楚后,就可以編寫(xiě)程序了。編寫(xiě)程序的具體思路如圖4-11所示。圖4-11定時(shí)器控制的報(bào)警旋轉(zhuǎn)燈設(shè)計(jì)流程圖根據(jù)程序流程圖,寫(xiě)出單片機(jī)C51語(yǔ)言程序如下:

/*****報(bào)警與旋轉(zhuǎn)燈說(shuō)明:定時(shí)器控制報(bào)警燈旋轉(zhuǎn)顯示,并發(fā)出仿真警報(bào)聲******/

#include<reg51.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitSPK=P3^7;

ucharFRQ=0x00;

//延時(shí)

voidDelayMS(uintms){

uchari;

while(ms--)for(i=0;i<120;i++);

}

//INT0中斷函數(shù)

voidEX0_INT()interrupt0

{

TR0=~TR0; //開(kāi)啟或停止兩定時(shí)器,分別控制報(bào)警器的聲音和LED旋轉(zhuǎn)

TR1=~TR1; if(P2==0x00)

P2=0xe0; //開(kāi)3個(gè)旋轉(zhuǎn)燈

else

P2=0x00; //關(guān)閉所有LED

}

//定時(shí)器0中斷

voidT0_INT()interrupt1

{

TH0=0xfe;

TL0=FRQ;

SPK=~SPK;

}//定時(shí)器1中斷

voidT1_INT()interrupt3

{

TH1=-45000/256;

TL1=-45000%256;

P2=_crol_(P2,1);

}

//主程序

voidmain(){

P2=0x00;

SPK=0x00;

溫馨提示

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