單片機(jī)第六章_第1頁(yè)
單片機(jī)第六章_第2頁(yè)
單片機(jī)第六章_第3頁(yè)
單片機(jī)第六章_第4頁(yè)
單片機(jī)第六章_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第6 6章章 單片機(jī)定時(shí)單片機(jī)定時(shí)/ /計(jì)數(shù)器應(yīng)用計(jì)數(shù)器應(yīng)用 6 6.1 .1 定時(shí)定時(shí)/ /計(jì)數(shù)器的結(jié)構(gòu)及其工作原理計(jì)數(shù)器的結(jié)構(gòu)及其工作原理 6 6.2 .2 定時(shí)定時(shí)/ /計(jì)數(shù)器的工作寄存器計(jì)數(shù)器的工作寄存器 6.3 6.3 定時(shí)定時(shí)/ /計(jì)數(shù)器的工作方式計(jì)數(shù)器的工作方式 6.4 6.4 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器C51C51語(yǔ)言編程要點(diǎn)語(yǔ)言編程要點(diǎn)本章內(nèi)容:本章內(nèi)容: 【任務(wù)導(dǎo)入】【任務(wù)導(dǎo)入】 方波信號(hào)發(fā)生器的實(shí)現(xiàn):用定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)從P1.2口輸出周期為200ms的方波。設(shè)系統(tǒng)時(shí)鐘頻率為12MHz?!救蝿?wù)分析】【任務(wù)分析】 通常可利用定時(shí)/計(jì)數(shù)器來產(chǎn)生周期性的波形。利用定時(shí)/計(jì)數(shù)器產(chǎn)

2、生周期性波形的基本思想是:利用定時(shí)/計(jì)數(shù)器產(chǎn)生周期性的定時(shí),到定時(shí)時(shí)間則對(duì)輸出端進(jìn)行相應(yīng)的處理。如果要產(chǎn)生周期性的方波,只需到定時(shí)時(shí)間時(shí)對(duì)輸出端取反一次即可。不同的工作方式下,定時(shí)的最大值不同,如定時(shí)的時(shí)間很短,則選擇方式2,方式2形成周期性的定時(shí)不需重置初值;如定時(shí)時(shí)間比較長(zhǎng),則選擇方式0或方式1;如定時(shí)時(shí)間超過65ms,一個(gè)定時(shí)/計(jì)數(shù)器不夠用,這時(shí)可采用兩個(gè)定時(shí)/計(jì)數(shù)器或是一個(gè)定時(shí)/計(jì)數(shù)器加軟件計(jì)數(shù)的方法。6.1 6.1 定時(shí)定時(shí)/ /計(jì)數(shù)器的結(jié)構(gòu)及其工作原理計(jì)數(shù)器的結(jié)構(gòu)及其工作原理1. 定時(shí)定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器的結(jié)構(gòu) 定時(shí)/計(jì)數(shù)器T0、T1的結(jié)構(gòu)如圖6-1所示,它由加法計(jì)數(shù)器、方式寄

3、存器TMOD、控制寄存器TCON等組成。 16位定時(shí)/計(jì)數(shù)器T0、T1均由兩個(gè)8位計(jì)數(shù)器組成。T0由兩個(gè)8位的寄存器TH0、TL0構(gòu)成,字節(jié)地址為8CH、8AH;T1也由兩個(gè)8位的寄存器TH1、TL1構(gòu)成,字節(jié)地址為8DH、8BH。 由圖6-1可知,定時(shí)/計(jì)數(shù)器的核心是16位加法計(jì)數(shù)器,方式寄存器TMOD用于設(shè)定定時(shí)/計(jì)數(shù)器T0、T1的工作方式,控制寄存器TCON用于對(duì)定時(shí)/計(jì)數(shù)器的啟動(dòng)、停止進(jìn)行控制。2. 定時(shí)定時(shí)/計(jì)數(shù)器的工作原理計(jì)數(shù)器的工作原理 定時(shí)/計(jì)數(shù)器有兩種用途:定時(shí)器和計(jì)數(shù)器。但一個(gè)定時(shí)/計(jì)數(shù)器不能既做定時(shí)器又做計(jì)數(shù)器。當(dāng)定時(shí)/計(jì)數(shù)器用于定時(shí)時(shí),加法計(jì)數(shù)器對(duì)晶振頻率的12分頻進(jìn)行

4、計(jì)數(shù)。由于晶振頻率的12分頻時(shí)間是定值,所以對(duì)其計(jì)數(shù)就是定時(shí),如晶振頻率的12分頻=1s,計(jì)數(shù)100,則定時(shí)100s。當(dāng)定時(shí)/計(jì)數(shù)器用于計(jì)數(shù)時(shí),加法計(jì)數(shù)器對(duì)單片機(jī)芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖進(jìn)行計(jì)數(shù)。每來一個(gè)輸入脈沖,加法計(jì)數(shù)器加1。當(dāng)由全1再加1變成全0時(shí)產(chǎn)生溢出,使溢出位TF0或TF1置位,如中斷允許,則向CPU提出定時(shí)/計(jì)數(shù)器中斷請(qǐng)求,如中斷不允許,則只有通過查詢方式使用溢出位。 加法計(jì)數(shù)器在使用時(shí)應(yīng)注意兩個(gè)方面。 第一,由于它是加法計(jì)數(shù)器,每來一個(gè)計(jì)數(shù)脈沖,加法器中的內(nèi)容加1位,當(dāng)由全1加到全0時(shí)計(jì)滿溢出。因而,如果要計(jì)N個(gè)單位,則首先應(yīng)向計(jì)數(shù)器置初值為X,且

5、有: 初值X=最大計(jì)數(shù)值(滿值)M-計(jì)數(shù)值N 在不同的計(jì)數(shù)方式下,最大計(jì)數(shù)值不同。一般來說,在定時(shí)/計(jì)數(shù)器工作于R位計(jì)數(shù)方式時(shí),它的最大計(jì)數(shù)值為2R。 第二,當(dāng)定時(shí)/計(jì)數(shù)器工作于計(jì)數(shù)方式時(shí),對(duì)芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖計(jì)數(shù),計(jì)數(shù)過程如下:在每一個(gè)機(jī)器周期的S5P2時(shí)刻對(duì)T0(P3.4)或T1(P3.5)上的信號(hào)采樣一次,如果上一個(gè)機(jī)器周期采樣到高電平,下一個(gè)周期采樣到低電平,則計(jì)數(shù)器在下一個(gè)機(jī)器周期的S5P2時(shí)刻加1計(jì)數(shù)一次,因而需要兩個(gè)機(jī)器周期才能識(shí)別一個(gè)計(jì)數(shù)脈沖,所以外部計(jì)數(shù)脈沖的頻率應(yīng)小于晶體振蕩頻率的1/24。6.2 6.2 定時(shí)定時(shí)/ /計(jì)數(shù)器的工作寄存器

6、計(jì)數(shù)器的工作寄存器 定時(shí)/計(jì)數(shù)器有兩個(gè)控制寄存器,即TMOD和TCON。TMOD用于控制定時(shí)/計(jì)數(shù)器的工作方式,選擇定時(shí)/計(jì)數(shù)功能;TCON則用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和停止,并控制定時(shí)/計(jì)數(shù)器的工作狀態(tài)等。啟動(dòng)定時(shí)/計(jì)數(shù)器開始工作之前,需要定義定時(shí)/計(jì)數(shù)器的工作方式,同時(shí)對(duì)TL0、TH0及TL1、TH1進(jìn)行初始化編程,下面介紹TCON、TMOD寄存器的結(jié)構(gòu)。 1 1定時(shí)定時(shí)/ /計(jì)數(shù)器工作方式寄存器計(jì)數(shù)器工作方式寄存器TMODTMOD TMOD用于設(shè)定定時(shí)/計(jì)數(shù)器T0和T1的工作方式,字節(jié)地址為89H,結(jié)構(gòu)如表6-1所示。TMOD不能按位尋址。 表6-1 TMOD寄存器結(jié)構(gòu)D7D7D6D6D

7、5D5D4D4D3D3D2D2D1D1D0D0GATEGATEM M1 1M M0 0GATEGATEM M1 1M M0 0 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1 1 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0 0(1)(1) M1M1、M0M0為工作方式選擇位為工作方式選擇位: :用于對(duì)T0的四種工作方式和T1的三種工作方式進(jìn)行選擇,工作方式如表6-2所示。M M1 1M M0 0工作方式工作方式方式說明方式說明0 00 0方式方式0 01313位定時(shí)位定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器0 01 1方式方式1 11616位定時(shí)位定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器1 10 0方式方式2 28 8位自動(dòng)重裝定時(shí)位自動(dòng)重裝定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器

8、1 11 1方式方式3 3兩個(gè)兩個(gè)8 8位定時(shí)位定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器( (僅僅T T0)0)表6-2 定時(shí)/計(jì)數(shù)器工作方式(2)(2) GATEGATE為門控位。為門控位。GATE和軟件控制位TR1(或TR0)、外部引腳信號(hào)INT1(或INT0)的狀態(tài)共同控制定時(shí)/計(jì)數(shù)器的打開或關(guān)閉。當(dāng)GATE=1時(shí),只有當(dāng)外部中斷請(qǐng)求信號(hào)引腳為高電平時(shí)才能啟動(dòng)計(jì)數(shù);當(dāng)GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟動(dòng)與外部中斷請(qǐng)求信號(hào)引腳電平無(wú)關(guān)。一般將GATE設(shè)置為0。(3)(3) 為定時(shí)或計(jì)數(shù)方式選擇位。為定時(shí)或計(jì)數(shù)方式選擇位。當(dāng)=1時(shí)工作于計(jì)數(shù)方式,脈沖由外部提供;當(dāng)=0時(shí)工作于定時(shí)方式,脈沖來自單片機(jī)內(nèi)部。 TC

9、ON字節(jié)地址為88H,用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和停止,標(biāo)志定時(shí)器溢出和中斷情況。TCON可以按位尋址,其結(jié)構(gòu)如表6-3所示。結(jié)合第5章中所學(xué)的中斷系統(tǒng),TCON各位含義和功能如表6-4所示。D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0TF1TF1TR1TR1TF0TF0TR0TR0IE1IE1IT1IT1IE0IE0IT0IT02. 定時(shí)定時(shí)/計(jì)數(shù)器的控制寄存器計(jì)數(shù)器的控制寄存器TCON表6-3 TCON寄存器結(jié)構(gòu)名名 稱稱說說 明明功功 能能TF1T1溢出標(biāo)志位溢出標(biāo)志位當(dāng)當(dāng)T1計(jì)數(shù)滿溢出時(shí),硬件將計(jì)數(shù)滿溢出時(shí),硬件將TF1置置1,并申請(qǐng)中斷。進(jìn)入服務(wù)程序后,由硬,并申

10、請(qǐng)中斷。進(jìn)入服務(wù)程序后,由硬件將件將TF1自動(dòng)清零。需要注意的是,如果使用定時(shí)器的中斷,該位無(wú)須人為自動(dòng)清零。需要注意的是,如果使用定時(shí)器的中斷,該位無(wú)須人為操作,若采用軟件查詢方式,當(dāng)查到該位置操作,若采用軟件查詢方式,當(dāng)查到該位置1后,須用軟件清零后,須用軟件清零TR1T1運(yùn)行控制位運(yùn)行控制位TR1=1,啟動(dòng)定時(shí)器;,啟動(dòng)定時(shí)器;TR1=0,停止定時(shí)器,由軟件控制,停止定時(shí)器,由軟件控制TF0T0溢出標(biāo)志位溢出標(biāo)志位功能同功能同TF1,但,但TF0工作對(duì)象為工作對(duì)象為T0TR0 0T0 0運(yùn)行控制位運(yùn)行控制位功能同功能同TR1 1,但,但TR0 0工作對(duì)象為工作對(duì)象為T0 0IE1 1外部

11、中斷外部中斷1請(qǐng)求標(biāo)請(qǐng)求標(biāo)志位志位當(dāng)當(dāng)IT1=01=0時(shí),為低電平觸發(fā)方式,每個(gè)機(jī)器周期的時(shí),為低電平觸發(fā)方式,每個(gè)機(jī)器周期的S5 5P2 2時(shí)刻采樣時(shí)刻采樣INT1 1引腳,引腳,若為低電平,則若為低電平,則IE1 1置置1,否則,否則IE1 1清零。清零。當(dāng)當(dāng)IT1=11=1時(shí),為下降沿觸發(fā)方式,當(dāng)?shù)谝粋€(gè)機(jī)器周期采樣到引腳為高電平,時(shí),為下降沿觸發(fā)方式,當(dāng)?shù)谝粋€(gè)機(jī)器周期采樣到引腳為高電平,第二個(gè)機(jī)器周期采樣到引腳為低電平時(shí),第二個(gè)機(jī)器周期采樣到引腳為低電平時(shí),IE1 1置置1,否則清零,否則清零IT1 1外部中斷外部中斷1觸發(fā)方觸發(fā)方式控制位式控制位IT1=01=0,低電平觸發(fā)方式,低電平

12、觸發(fā)方式,INT1 1引腳上低電平有效;引腳上低電平有效;IT1=11=1,下降沿觸發(fā)方式,下降沿觸發(fā)方式,INT1 1引腳上的電平由高到低的負(fù)跳變有效引腳上的電平由高到低的負(fù)跳變有效IE0 0外部中斷外部中斷0請(qǐng)求標(biāo)請(qǐng)求標(biāo)志位志位功能同功能同IE1 1,但,但I(xiàn)E0 0的工作對(duì)象為的工作對(duì)象為INT0 0IT0 0外部中斷外部中斷0觸發(fā)方觸發(fā)方式控制位式控制位功能同功能同IT1 1,但,但I(xiàn)T0 0的工作對(duì)象為的工作對(duì)象為INT0 0表6-4 TCON寄存器各位的功能 當(dāng)M1M0組合為00時(shí),定時(shí)/計(jì)數(shù)器工作于方式0,方式0的結(jié)構(gòu)如圖6-2所示。在這種方式下加法計(jì)數(shù)器只用了13位,分別是TL

13、0(或TL1)的低5位和TH0(或TH1)的8位,TL0(或TL1)的高3位未用。計(jì)數(shù)時(shí),當(dāng)TL0(或TL1)的低5位計(jì)滿時(shí)向TH0(或TH1)進(jìn)位,當(dāng)TH0(或TH1)也計(jì)滿時(shí)則溢出,使TF0(或TF1)置位。如果中斷允許,則提出中斷請(qǐng)求。另外也可通過查詢TF0(或TF1)來判斷是否有溢出。由于采用13位的定時(shí)計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為213,即8192。如計(jì)數(shù)值為N,則置入的初值X為X=8192-N。6.3 6.3 定時(shí)定時(shí)/ /計(jì)數(shù)器的工作方式計(jì)數(shù)器的工作方式1方式方式0 假設(shè)單片機(jī)的機(jī)器周期為Tcy,定時(shí)產(chǎn)生一次中斷的時(shí)間為t,那么需要計(jì)數(shù)的個(gè)數(shù)N=t/Tcy,裝入THx和TL

14、x中的初值分別為:THx=(8192-N)/32 TLx=(8192-N)%32 由于定時(shí)/計(jì)數(shù)器方式為13位計(jì)數(shù)器,即最多能裝載的數(shù)為213=8192個(gè)。當(dāng)TLx和THx的初值為0時(shí),最多經(jīng)過8192個(gè)機(jī)器周期該計(jì)數(shù)器就會(huì)溢出一次,并向CPU申請(qǐng)中斷。 當(dāng)M1M0組合為01時(shí),定時(shí)/計(jì)數(shù)器工作于方式1,計(jì)數(shù)位數(shù)是16位,由TH0作為低8位、TH0作為高8位組成了16位加1計(jì)數(shù)器。方式1的結(jié)構(gòu)如圖6-3所示。2方式方式1 在方式1下,用到加法計(jì)數(shù)器的16位,TL0(或TL1)作低8位,TH0(或TH1)作高8位。計(jì)數(shù)時(shí),當(dāng)TL0(或TL1)計(jì)滿時(shí)向TH0(或TH1)進(jìn)位,當(dāng)TH0(或TH1)也

15、計(jì)滿時(shí)則溢出,使TF0(或TF1)置位。同樣可通過中斷或查詢方式來處理溢出信號(hào)TF0(或TF1)。由于是16位定時(shí)/計(jì)數(shù)方式,因而最大計(jì)數(shù)值(滿值)為216,即65536。如計(jì)數(shù)值為N,則置入的初值X為X=65536-N。 假設(shè)單片機(jī)的機(jī)器周期為Tcy,定時(shí)產(chǎn)生一次中斷的時(shí)間為t,那么需要計(jì)數(shù)的個(gè)數(shù)N=t/Tcy,裝入THx和TLx中的初值分別為THx=(65536-N)/256 TLx=(65536-N)%256 由于定時(shí)/計(jì)數(shù)器方式為16位計(jì)數(shù)器,即最多能裝載的數(shù)為216=65536個(gè)。當(dāng)TLx和THx的初值為0時(shí),最多經(jīng)過65536個(gè)機(jī)器周期該計(jì)數(shù)器就會(huì)溢出一次,并向CPU申請(qǐng)中斷。 在

16、定時(shí)/計(jì)數(shù)器的方式0和方式1中,當(dāng)計(jì)數(shù)器溢出后,計(jì)數(shù)器變?yōu)?,因此在循環(huán)定時(shí)或循環(huán)計(jì)數(shù)時(shí)就必須用軟件反復(fù)設(shè)置計(jì)數(shù)初值,這必然影響到定時(shí)的精度,同時(shí)也給程序設(shè)計(jì)帶來很多麻煩。 定時(shí)/計(jì)數(shù)器方式2則可解決軟件反復(fù)重裝初值帶來的問題,在計(jì)數(shù)器溢出后,計(jì)數(shù)器自動(dòng)將上次設(shè)置的初值重裝,所以方式2特別適合做較精確的脈沖信號(hào)發(fā)生器。 但由于它只有8位計(jì)數(shù)器,當(dāng)定時(shí)較長(zhǎng)時(shí)間時(shí)也會(huì)給編程帶來麻煩,同時(shí)也可能影響到精度,所以當(dāng)對(duì)定時(shí)精度要求不高時(shí),使用方式0或方式1比較合適。若做精確的頻率較高的信號(hào)發(fā)生器時(shí)才選用方式2,需要注意的是,此時(shí)的晶振頻率務(wù)必要選擇12的整數(shù)倍,因?yàn)槎〞r(shí)器的頻率是晶振頻率的1/12。 方

17、式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式,其結(jié)構(gòu)圖如圖6-4所示。3方式方式2 當(dāng)定時(shí)/計(jì)數(shù)器工作方式為方式2時(shí),假設(shè)機(jī)器周期為Tcy,定時(shí)產(chǎn)生一次中斷的時(shí)間為t,那么需要計(jì)數(shù)的個(gè)數(shù)N=t/Tcy,裝入THx和TLx中的初值分別為 THx=256-N TLx=256-N 由于定時(shí)器方式2為8位計(jì)數(shù)器,即最多能裝載的數(shù)為28=256個(gè)。當(dāng)TLx和THx的初值為0時(shí),最多經(jīng)過256個(gè)機(jī)器周期該計(jì)數(shù)器就會(huì)溢出。若使用12MHz的晶振,也只有的時(shí)間,若使用11.0592MHz晶振,那么計(jì)算機(jī)器周期時(shí),晶振自身產(chǎn)生的誤差也已經(jīng)不少了,加上過程累加,誤差便會(huì)很大。 方式3只有定時(shí)/計(jì)數(shù)器T0才有。當(dāng)M1M0兩位為

18、11時(shí),定時(shí)/計(jì)數(shù)器T0工作于方式3,方式3的結(jié)構(gòu)如圖6-5所示。 在方式3下,定時(shí)/計(jì)數(shù)器T0被分為兩個(gè)部分:TL0和TH0。其中,TL0可作為定時(shí)/計(jì)數(shù)器使用,占用T0的全部控制位:GATE、TR0和TF0;而TH0固定只能做定時(shí)器使用,對(duì)振蕩周期的12分頻進(jìn)行計(jì)數(shù),這時(shí)它占用定時(shí)/計(jì)數(shù)器T1的TR1位、TF1位和T1的中斷資源。因此這時(shí)定時(shí)/計(jì)數(shù)器T1不能使用啟動(dòng)控制位和溢出標(biāo)志位。通常將定時(shí)/計(jì)數(shù)器T1作為串行口的波特率發(fā)生器。只要賦初值,設(shè)置好工作方式,它便自動(dòng)啟動(dòng),溢出信號(hào)直接送串行口。如要停止工作,只需送入一個(gè)把定時(shí)/計(jì)數(shù)器T1設(shè)置為方式3的方式控制字即可。由于定時(shí)/計(jì)數(shù)器T1沒

19、有方式3,如果強(qiáng)行把它設(shè)置為方式3,就相當(dāng)于使其停止工作。4方式方式3 方式3情況下計(jì)數(shù)器的最大計(jì)數(shù)值和初值的計(jì)算與方式2完全相同。 當(dāng)單片機(jī)的定時(shí)當(dāng)單片機(jī)的定時(shí)/ /計(jì)數(shù)器作為定時(shí)器使用時(shí),進(jìn)行編程時(shí)應(yīng)計(jì)數(shù)器作為定時(shí)器使用時(shí),進(jìn)行編程時(shí)應(yīng)按如下要點(diǎn)進(jìn)行。按如下要點(diǎn)進(jìn)行。設(shè)定定時(shí)器工作方式,對(duì)設(shè)定定時(shí)器工作方式,對(duì)TMODTMOD寄存器操作。寄存器操作。計(jì)算定時(shí)初值,并裝入對(duì)應(yīng)的定時(shí)初值寄存器計(jì)算定時(shí)初值,并裝入對(duì)應(yīng)的定時(shí)初值寄存器TH0(TH1)TH0(TH1)、TL0(TL1)TL0(TL1)。啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器TR0(TR1)TR0(TR1)。若允許定時(shí)器中斷,則需開定時(shí)器中斷允許若允

20、許定時(shí)器中斷,則需開定時(shí)器中斷允許ET0(ET1)ET0(ET1);若;若總中斷未開,則必須對(duì)總中斷未開,則必須對(duì)EAEA置置“1”“1”。編寫定時(shí)中斷服務(wù)函數(shù),若不是采用方式編寫定時(shí)中斷服務(wù)函數(shù),若不是采用方式2 2,進(jìn)入中斷函數(shù),進(jìn)入中斷函數(shù)的第一步應(yīng)重新對(duì)定時(shí)初值寄存器的第一步應(yīng)重新對(duì)定時(shí)初值寄存器TH0(TH1)TH0(TH1)、TL0(TL1)TL0(TL1)賦初值,賦初值,然后再編寫其他任務(wù)。然后再編寫其他任務(wù)。定時(shí)中斷服務(wù)程序的執(zhí)行過程一般應(yīng)小于定時(shí)器的定時(shí)周定時(shí)中斷服務(wù)程序的執(zhí)行過程一般應(yīng)小于定時(shí)器的定時(shí)周期。期。6.4 6.4 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器C51C51語(yǔ)言編程要

21、點(diǎn)語(yǔ)言編程要點(diǎn)【任務(wù)【任務(wù)實(shí)施實(shí)施】 1) 1)設(shè)計(jì)方案設(shè)計(jì)方案 如果要產(chǎn)生周期性的方波,只需到定時(shí)時(shí)間時(shí)對(duì)輸出端取反如果要產(chǎn)生周期性的方波,只需到定時(shí)時(shí)間時(shí)對(duì)輸出端取反一次即可。本例要求從一次即可。本例要求從P1.2P1.2引腳輸出周期為引腳輸出周期為200ms200ms的方波,那么的方波,那么在程序中需要到設(shè)計(jì)時(shí)間時(shí)將在程序中需要到設(shè)計(jì)時(shí)間時(shí)將P1.2P1.2引腳電平取反。延時(shí)采用定時(shí)引腳電平取反。延時(shí)采用定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T0T0,工作在方式,工作在方式1 1,半個(gè)周期為,半個(gè)周期為100ms100ms,一次定時(shí)無(wú)法完,一次定時(shí)無(wú)法完成,需要用循環(huán)處理,每次定時(shí)成,需要用循環(huán)處理,每

22、次定時(shí)10ms10ms,然后循環(huán),然后循環(huán)1010次后輸出次后輸出 101010=100ms10=100ms。 2)2)硬件電路實(shí)現(xiàn)硬件電路實(shí)現(xiàn) 本任務(wù)的波形由單片機(jī)的本任務(wù)的波形由單片機(jī)的P1.2P1.2引腳直接輸出,因此只需把引腳直接輸出,因此只需把單片機(jī)的單片機(jī)的P1.2P1.2引腳直接引出即可,具體電路實(shí)現(xiàn)可參考第引腳直接引出即可,具體電路實(shí)現(xiàn)可參考第2 2章的章的圖圖2-312-31,只需將多余的,只需將多余的7 7個(gè)個(gè)LEDLED去掉即可。去掉即可。 3)3)系統(tǒng)程序?qū)崿F(xiàn)系統(tǒng)程序?qū)崿F(xiàn)源程序如下源程序如下/*- 通過定時(shí)產(chǎn)生通過定時(shí)產(chǎn)生200ms方波方波 -*/#include /包

23、含頭文件包含頭文件sbit OUT=P12; /定義定義OUT輸出端口輸出端口/*- 定時(shí)器初始化子程序定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD |= 0 x01;/使用模式使用模式1,16位定時(shí)器,位定時(shí)器,使用使用“|”符號(hào)可以在使用多符號(hào)可以在使用多 /個(gè)定時(shí)器時(shí)不受影個(gè)定時(shí)器時(shí)不受影響響 TH0=(65536-10000)/256;/裝入定時(shí)常數(shù)裝入定時(shí)常數(shù) TL0=(65536-10000)%256;/裝入定時(shí)常數(shù)裝入定時(shí)常數(shù) ET0=1; /定時(shí)器中斷打開定時(shí)器中斷打開 TR0=1; /定時(shí)器開關(guān)打開定時(shí)器開關(guān)打開/*- 主程序主程序-*/ma

24、in() Init_Timer0(); EA=1; /總中斷打開總中斷打開 while(1);/*- 定時(shí)器中斷服務(wù)程序定時(shí)器中斷服務(wù)程序-*/void Timer0_isr(void) interrupt 1 static unsigned char i; TH0=(65536-10000)/256; /重新賦值重新賦值 12MHz晶振計(jì)算,指令周期晶振計(jì)算,指令周期1s /200ms方波半個(gè)周期為方波半個(gè)周期為100ms,由于定時(shí)器,由于定時(shí)器 /最大值為最大值為65536,即,即65.536ms,所以直接用,所以直接用 TL0=(65536-10000)%256;/定時(shí)器不夠,需要用循環(huán)

25、處理定時(shí)器不夠,需要用循環(huán)處理 /定時(shí)定時(shí)10ms,然后循環(huán),然后循環(huán)10次后輸出次后輸出 1010=100ms i+; if(i=10) i=0; OUT=OUT; /用示波器可看到方波輸出用示波器可看到方波輸出 【拓展訓(xùn)練:定時(shí)器方式控制液位指示系統(tǒng)的實(shí)現(xiàn)】【拓展訓(xùn)練:定時(shí)器方式控制液位指示系統(tǒng)的實(shí)現(xiàn)】 1) 1) 功能要求功能要求 每每1s1s采樣一次液位信息,并通過采樣一次液位信息,并通過LEDLED發(fā)光二極管發(fā)光二極管顯示液位的高度信息,要求用定時(shí)器的定時(shí)中斷方式顯示液位的高度信息,要求用定時(shí)器的定時(shí)中斷方式實(shí)現(xiàn)。實(shí)現(xiàn)。 2) 2) 硬件電路實(shí)現(xiàn)硬件電路實(shí)現(xiàn) 具體硬件電路見第具體硬件

26、電路見第3 3章的圖章的圖3-73-7,無(wú)須做任何修改。,無(wú)須做任何修改。 3) 3) 系統(tǒng)程序?qū)崿F(xiàn)系統(tǒng)程序?qū)崿F(xiàn) 源程序如下源程序如下/*- 通過定時(shí)器控制液位指示通過定時(shí)器控制液位指示 晶振頻率:晶振頻率:12MHz-*/#include /包含頭文件包含頭文件/*- 定時(shí)器初始化子程序定時(shí)器初始化子程序-*/void Init_Timer0(void) TMOD |= 0 x01; /使用方式使用方式1,16位定時(shí)器位定時(shí)器 TH0=(65536-50000)/256; /裝入裝入50ms定時(shí)常數(shù)定時(shí)常數(shù) TL0=(65536-50000)%256; /裝入裝入50ms定時(shí)常數(shù)定時(shí)常數(shù) ET0=1; /定時(shí)器中斷打開定時(shí)器中斷

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論