版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)店電子商務(wù)課程設(shè)計(jì)
- 2025年跨境電商平臺(tái)股權(quán)轉(zhuǎn)讓合同書(shū)模板
- 裝修設(shè)計(jì)合同樣本
- 人事委托服務(wù)合同
- 工作方案范文合集9篇
- 報(bào)警器無(wú)plc課程設(shè)計(jì)
- 農(nóng)村土地流轉(zhuǎn)合同范本
- 二零二五年度二手拖拉機(jī)交易物流配送合同3篇
- 企業(yè)常見(jiàn)合同書(shū)
- 北京師范大學(xué)-香港浸會(huì)大學(xué)聯(lián)合國(guó)際學(xué)院《固體物理》2023-2024學(xué)年第一學(xué)期期末試卷
- GB/T 41693-2022高關(guān)注化學(xué)物質(zhì)評(píng)估判定導(dǎo)則
- GB/T 14181-2010測(cè)定煙煤粘結(jié)指數(shù)專用無(wú)煙煤技術(shù)條件
- 委托居間合同通用版
- 自來(lái)水管道工程施工組織設(shè)計(jì)(完整常用版)
- 物流公司安全生產(chǎn)責(zé)任制度
- 四年級(jí)上冊(cè)道法知識(shí)點(diǎn)匯總
- 鷸蚌相爭(zhēng) 完整版課件
- 鋼結(jié)構(gòu)安裝旁站監(jiān)理記錄表(參考表)多篇
- 大氣污染物綜合排放準(zhǔn)(2022年-2023年)
- 國(guó)家開(kāi)放大學(xué)電大本科《古代小說(shuō)戲曲專題》2023-2024期末試題及答案(試卷代號(hào):1340)
- 2019年最新部編版四年級(jí)語(yǔ)文上冊(cè)第七單元達(dá)標(biāo)檢測(cè)卷含答案(新版)
評(píng)論
0/150
提交評(píng)論