單片機(jī)原理與接口技術(shù)(定時(shí)器、計(jì)數(shù)器)_第1頁
單片機(jī)原理與接口技術(shù)(定時(shí)器、計(jì)數(shù)器)_第2頁
單片機(jī)原理與接口技術(shù)(定時(shí)器、計(jì)數(shù)器)_第3頁
單片機(jī)原理與接口技術(shù)(定時(shí)器、計(jì)數(shù)器)_第4頁
單片機(jī)原理與接口技術(shù)(定時(shí)器、計(jì)數(shù)器)_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

定時(shí)器/計(jì)數(shù)器Timer/Counter(T/C)電子定時(shí)器機(jī)械定時(shí)器電子計(jì)步器機(jī)械計(jì)數(shù)器二、單片機(jī)的定時(shí)器/計(jì)數(shù)器時(shí)鐘電路總線控制CPUROM/EPROM/FLASH4K字節(jié)RAM128字節(jié)SFR21個(gè)定時(shí)/計(jì)數(shù)器2個(gè)中斷系統(tǒng)、5中斷源2優(yōu)先級(jí)串行口全雙工1個(gè)并行口4個(gè)RSTEAALEPSENXTAL2XTAL1P0P1P2P3VCCVSS√√√√√√與MCS-51單片機(jī)相關(guān)的21個(gè)SFR1、與CPU相關(guān)的(6個(gè))(√)

ACC、B、DPH、DPL、SP、PSW2、并行I/O口(√)相關(guān)SFR寄存器:P0、P1、P2、P33、中斷系統(tǒng)(√

)相關(guān)SFR寄存器:TCON、IE、IP、SCON4、定時(shí)器/計(jì)數(shù)器相關(guān)SFR寄存器:TMOD、TH1、TL1、TH0、TL0、TCON、IE、IP5、串行通信相關(guān)SFR寄存器:SCON、PCON、SBUF、IE、IP、TMOD、TCON、TH1、TL1名稱定義地址位功能和位地址復(fù)位值TCON定時(shí)器控制88H8F8E8D8C8B8A89880X00TF1TR1TF0TR0IE1IT1IE0IT0TMOD定時(shí)器模式89HGATECTM1M0GATECTM1M10X00TH0定時(shí)器0高字節(jié)8CH0X00TH1定時(shí)器1高字節(jié)8DH0X00TL0定時(shí)器0低字節(jié)8AH0X00TL1定時(shí)器低字節(jié)8BH0X00IE中斷允許控制A8HEA------ESET1EX1ET0EX00X00IP中斷優(yōu)先級(jí)控制B8H---------PSPT1PX1PT0PX00X0080C51與T/C相關(guān)的SFR有8個(gè)◆硬件定時(shí)-----就是利用硬件電路來實(shí)現(xiàn)用RC電路或邏輯部件定時(shí)如555電路,該方式除額外增加硬件資源外,使用起來靈活性也較差;◆軟件定時(shí)----就是讓CPU執(zhí)行一個(gè)程序段,這個(gè)程序段本身沒有具體的執(zhí)行目的,但由于執(zhí)行每條指令都需要時(shí)間,則重復(fù)執(zhí)行一個(gè)程序段就需要一個(gè)固定的時(shí)間。該方式簡(jiǎn)單但卻占用了CPU寶貴的時(shí)間資源,降低了CPU的利用率。(一般場(chǎng)合較常用)

◆采用單片機(jī)定時(shí)/計(jì)數(shù)器定時(shí):為了使用方便,解決上述兩種方式的弊端并增加單片機(jī)的控制功能,把定時(shí)/計(jì)數(shù)邏輯電路集成在單片機(jī)芯片中,稱之為定時(shí)/計(jì)數(shù)器。

定時(shí)一般有3種方法:1、硬件定時(shí)3、采用單片機(jī)定時(shí)/計(jì)數(shù)器定時(shí)2、軟件定時(shí)

概述二、定時(shí)器/計(jì)數(shù)器應(yīng)用定時(shí)器/計(jì)數(shù)器可以用于定時(shí)、計(jì)數(shù)和波特率發(fā)生器。

定時(shí)器(模式)可用于測(cè)量事件之間的時(shí)間間隔,如脈沖寬度。

123計(jì)數(shù)器(模式)可用于測(cè)定某個(gè)事件發(fā)生的次數(shù),如脈沖個(gè)數(shù)。

定時(shí)器(模式)還可以給串行端口提供波特率時(shí)鐘信號(hào)。(下一章節(jié)具體講)?UART?個(gè)正脈沖標(biāo)準(zhǔn)80C5116位定時(shí)器/計(jì)數(shù)器016位定時(shí)器/計(jì)數(shù)器1STC89C5216位定時(shí)器/計(jì)數(shù)器016位定時(shí)器/計(jì)數(shù)器116位定時(shí)器/計(jì)數(shù)器2看門狗定時(shí)器標(biāo)準(zhǔn)的80C51有2個(gè)16位定時(shí)器/計(jì)數(shù)器0和1,STC89C52在此之上增加了16位定時(shí)器/計(jì)數(shù)器2,以及看門狗定時(shí)器。本小節(jié)講述請(qǐng)參考數(shù)據(jù)手冊(cè)自行學(xué)習(xí)與定時(shí)器/計(jì)數(shù)器0相同,不講述請(qǐng)參考數(shù)據(jù)手冊(cè)自行學(xué)習(xí)80C51系列內(nèi)部有2個(gè)16位的定時(shí)/計(jì)數(shù)器T0、T180C52系列內(nèi)部有3個(gè)16位的定時(shí)/計(jì)數(shù)器T0、T1、T2用一個(gè)簡(jiǎn)單的框圖構(gòu)造它的模型:N位計(jì)數(shù)器構(gòu)成了電路的核心。

定時(shí)、計(jì)數(shù)兩種方式的區(qū)別在于計(jì)數(shù)器的脈沖來源。(1)如何控制定時(shí)還是計(jì)數(shù)?(2)何時(shí)控制啟動(dòng)計(jì)數(shù)?(3)如何控制定時(shí)/計(jì)數(shù)的長(zhǎng)短?振蕩器TF0啟動(dòng)控制溢出標(biāo)志中斷÷12GATE≥&TR0C/T=1TH0TL0N位

+1計(jì)數(shù)器C/T=0T0(P3.4)內(nèi)部時(shí)鐘脈沖(定時(shí))外部輸入脈沖(計(jì)數(shù))計(jì)數(shù)初值INT0(P3.2)二、80C51的T/C0工作原理時(shí)鐘源1111111111111111可以使用軟件查詢其狀態(tài),可以設(shè)置當(dāng)其由0變?yōu)?時(shí)觸發(fā)中斷016位定時(shí)器/計(jì)數(shù)器溢出標(biāo)志1再來一個(gè)時(shí)鐘脈沖當(dāng)定時(shí)器的值為0xFFFF時(shí)標(biāo)志位置位定時(shí)器清0000000000000000080C51的T/C1工作原理(與T/C0相似)振蕩器TF1啟動(dòng)控制溢出標(biāo)志中斷÷12GATE≥&TR1C/T=1TH1TL1N位+1計(jì)數(shù)器C/T=0T1(P3.5)內(nèi)部時(shí)鐘脈沖(定時(shí))外部輸入脈沖(計(jì)數(shù))計(jì)數(shù)初值INT1(P3.3)定時(shí)器與計(jì)數(shù)器標(biāo)準(zhǔn)80C51外部T0/T1功能引腳的時(shí)鐘源定時(shí)器/計(jì)數(shù)器內(nèi)部時(shí)鐘源

計(jì)數(shù)周期未知,甚至不具有周期性

計(jì)數(shù)周期固定為一個(gè)機(jī)器周期

當(dāng)選擇外部引腳時(shí)鐘源,稱作計(jì)數(shù)器

當(dāng)選擇內(nèi)部時(shí)鐘源(默認(rèn))時(shí),稱作定時(shí)器1.定時(shí)工作方式

★設(shè)置為定時(shí)工作方式時(shí),定時(shí)器計(jì)數(shù)的脈沖是由8051片內(nèi)振蕩器輸出經(jīng)12分頻后產(chǎn)生的。

如:當(dāng)8051采用12MHz晶體時(shí),每個(gè)機(jī)器周期為1μs,計(jì)數(shù)額率為1MHz?!锩總€(gè)機(jī)器周期使定時(shí)器(T0或T1)的數(shù)值+1直至計(jì)計(jì)數(shù)滿產(chǎn)生溢出。2.計(jì)數(shù)工作方式

★設(shè)置為計(jì)數(shù)工作方式時(shí),通過引腳T0(P3.4)和T1(P3.5)對(duì)外部脈沖信號(hào)計(jì)數(shù)?!锂?dāng)輸入脈沖信號(hào)產(chǎn)生由1至0的下降沿時(shí),計(jì)數(shù)器的值加1,在每個(gè)機(jī)器周期的S5P2期間采樣T0或T1的輸入電平。若前一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。此后的機(jī)器周期S3P1期間,新的數(shù)值裝入計(jì)數(shù)器。

★檢測(cè)一個(gè)1至0的跳變需要2個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為振蕩頻率的1/24。計(jì)數(shù)器功能“注意事項(xiàng)”在實(shí)現(xiàn)“計(jì)數(shù)器”功能時(shí),計(jì)數(shù)器在每個(gè)機(jī)器周期對(duì)外部管腳采樣一次,現(xiàn)假設(shè)計(jì)數(shù)器0對(duì)下降沿計(jì)數(shù)。1個(gè)機(jī)器周期機(jī)器時(shí)鐘T0外部引腳情況1:正常檢測(cè)情況2:漏檢T0外部引腳T1時(shí)檢測(cè)到高電平計(jì)數(shù)管腳的計(jì)數(shù)高/低脈沖寬度必須至少保持一個(gè)機(jī)器周期,否則就有可能漏檢。!T2T0T1T3T4判斷為無下降沿,即漏檢T2時(shí)檢測(cè)到低電平判斷為下降沿T2時(shí)檢測(cè)到高電平T1時(shí)檢測(cè)到高電平無論是定時(shí)還是計(jì)數(shù),當(dāng)軟件設(shè)定了定時(shí)/計(jì)數(shù)器的工作方式,啟動(dòng)以后,定時(shí)/計(jì)數(shù)器就按規(guī)定的方式工作,不占用CPU的操作時(shí)間,此時(shí)CPU可執(zhí)行其他程序,到了計(jì)滿規(guī)定的時(shí)間或規(guī)定的個(gè)數(shù)(定時(shí)/計(jì)數(shù)器溢出),定時(shí)/計(jì)數(shù)器會(huì)給出溢出標(biāo)志,你可以通過查詢或中斷方式了解是否溢出。

這種工作的方式如同人帶的手表,人在工作或睡覺,而手表依然滴滴答答行走,你可以通過看表或設(shè)鬧鐘方式,到了規(guī)定的時(shí)間,干你想干的事。1、T0、T1定時(shí)/計(jì)數(shù)器方式控制寄存器(TMOD)三、定時(shí)器/計(jì)數(shù)器的控制寄存器(1)GATE:門控位(門控信號(hào)),設(shè)定T1、T0運(yùn)行時(shí)是否受、引腳輸入電平的控制。

GATE=0,運(yùn)行只受TCON中運(yùn)行控制位TR0/TR1的控制。

GATE=1,運(yùn)行同時(shí)受TR0/TR1和外中斷輸入信號(hào)的雙重控制。只有當(dāng)INT0/INT1=1且TR0/TR1=1,T0/T1才能運(yùn)行。TMOD字節(jié)地址89H,不能位操作,設(shè)置TMOD須用字節(jié)操作指令。振蕩器TF0啟動(dòng)控制溢出標(biāo)志中斷÷12GATE≥&TR0C/T=1TH0TL0N位

+1計(jì)數(shù)器C/T=0T0(P3.4)內(nèi)部時(shí)鐘脈沖(定時(shí))外部輸入脈沖(計(jì)數(shù))計(jì)數(shù)初值INT0(P3.2)(2)C/T:定時(shí)器/計(jì)數(shù)器選擇位

C/T=0,為定時(shí)器方式,計(jì)數(shù)器的輸入來自晶體振蕩器的脈沖÷12。 C/T=1,為計(jì)數(shù)器方式,計(jì)數(shù)器的輸入來自P3.4或P3.5的外部脈沖;(3)M1M0工作模式選擇位(工作方式選擇位)M1M0工作方式備注00方式0

13位計(jì)數(shù)器,使用了TLX(低5位)和THX(8位)。01方式1

16位計(jì)數(shù)器,使用了TLX(8位)和THX(8位)。10方式2

8位自動(dòng)裝載計(jì)數(shù)器,TL溢出時(shí)自動(dòng)裝載成TH的值11方式3

T0為2個(gè)8位計(jì)數(shù)器,T1停止工作。LSBMSBTF1TR1TF0TR0IE1IT1IE0IT0

(1)TR0、TR1——計(jì)數(shù)運(yùn)行控制位。

TR0位(或TR1位)=

1,啟動(dòng)定時(shí)器/計(jì)數(shù)器工作的必要條件。(2)

TF0、TF1——計(jì)數(shù)溢出標(biāo)志位。當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),由硬件自動(dòng)使TFx置“1”。①使用查詢方式時(shí),此位作為狀態(tài)位供CPU查詢,但應(yīng)注意查詢有效后,應(yīng)使用軟件及時(shí)將該位清“0”。②使用中斷方式時(shí),此位作為中斷請(qǐng)求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。2、T0、T1定時(shí)/計(jì)數(shù)器控制寄存器TCONTCON(88H)與外部中斷和有關(guān)五、定時(shí)器/計(jì)數(shù)器的四種工作方式

前面已經(jīng)了解,對(duì)TMOD寄存器的M1、M0位的設(shè)置,可選擇四種工作方式,即方式0、方式1、方式2和方式3。M1M0工作方式備注00方式0

13位計(jì)數(shù)器,使用了TLX低5位和THX8位。01方式1

16位計(jì)數(shù)器,使用了TLX8位和THX8位。10方式2

8位自動(dòng)裝載計(jì)數(shù)器,TL溢出時(shí)自動(dòng)裝載成TH的值11方式3

T0為2個(gè)8位計(jì)數(shù)器,T1停止工作。P3.4引腳(T0)GATETR0INT0振蕩器÷12TH08位TL05位TF0中斷KC/T=0C/T=1控制定時(shí)/計(jì)數(shù)器方式0邏輯圖111“+1”中斷13位計(jì)數(shù)器TF0“+1”“+1”或門與門1、方式0M1M0=00工作原理定時(shí)器(T0或T1)工作于13位定時(shí)、計(jì)數(shù)方式。13位的定時(shí)計(jì)數(shù)器,由TH的8位和TL的低5位組成。(以T0為例T1原理相同)此種方式與是與早期的MCS-48系列兼容,如果不是為了兼容的目的,一般不用方式0。在實(shí)際應(yīng)用中完全可以用方式1代替。

設(shè):N為計(jì)數(shù)個(gè)數(shù)、x為計(jì)數(shù)初值

1、用于計(jì)數(shù)功能時(shí),計(jì)數(shù)個(gè)數(shù)N的計(jì)算公式:N=213-x

若初值X=0~8191范圍時(shí),計(jì)數(shù)范圍為:1~8192。

2、用于定時(shí)功能時(shí),定時(shí)時(shí)間t的計(jì)算公式為:

t=N×TM=(213-x)×TMx=213-t/TMTM=12TOSC=12/fOSC

若晶振頻率為12MHz,機(jī)器周期=1us,初值X=0~8191范圍時(shí),則可定時(shí)范圍為1~8192us。方式0---相關(guān)計(jì)算解:首先求出定時(shí)器T0初值。

t=N×TM=(213-x)×TM又由于fOSC=6MHz

∴1TM=12TOSC=12/6MHz=2μs

∴2000μs=(213-初值X)2μs

∴初值X=7192=1110000011000B,其中將:高8位11100000B=0xE0 賦給TH0,低5位11000B=00011000B=0x18賦給TL0。

TH0=0E0H,TL0=18H。例1:已知fOSC=6MHz,設(shè)定時(shí)器T0選擇工作方式0,定時(shí)時(shí)間為

2ms,試確定T0初值(TH0=?TL0=?)。2、方式1M1M0=01工作原理方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加“1”計(jì)數(shù)器

定時(shí)/計(jì)數(shù)器方式1邏輯圖TH0TL0振蕩器1/12(8位)(8位)TF0中斷啟動(dòng)控制P3.4(T0引腳)TR0GATEP3.2(INT0)C/T=0C/T=116位加1計(jì)數(shù)器(以T0為例T1原理相同)設(shè):N為計(jì)數(shù)個(gè)數(shù)

、x為計(jì)數(shù)初值

1、用于計(jì)數(shù)功能時(shí),計(jì)數(shù)個(gè)數(shù)N的計(jì)算公式:N=216-x

若初值X=0~65535范圍時(shí),計(jì)數(shù)范圍為:1~65536。

2、用于定時(shí)功能時(shí),定時(shí)時(shí)間t的計(jì)算公式為:

t=N×TM=(216-x)×TMx=216-t/TMTM=12TOSC=12/fOSC

若晶振頻率為12MHz,機(jī)器周期=1us,初值X=0~65535范圍時(shí),則可定時(shí)范圍為1~65536us。方式1---相關(guān)計(jì)算3、方式2M1M0=10定時(shí)/計(jì)數(shù)器方式2邏輯圖(以T0為例T1原理相同)

方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式,由TL0(TL1)做計(jì)數(shù)器,TH0(TH1)做初值寄存器。工作前TL0、TH0分別預(yù)置相同的初值。計(jì)數(shù)器TL0工作時(shí),每當(dāng)溢出產(chǎn)生中斷的同時(shí),將TH0中的初值自動(dòng)重裝。

T0(P3.5)

GATETR0INT0振蕩器1/12TL18位TF0中斷KC/T=0C/T=1控制TH08位重裝載重裝載1“+1”中斷TL08位TF0“+1”“+1”這種工作方式可省去用戶軟件中重裝常數(shù)的語句,并可產(chǎn)生相當(dāng)精確的定時(shí)時(shí)間,特別適合于串行口波特率發(fā)生器。設(shè):N為計(jì)數(shù)個(gè)數(shù)用表示、x為計(jì)數(shù)初值

1、用于計(jì)數(shù)功能時(shí),計(jì)數(shù)個(gè)數(shù)N的計(jì)算公式:N=28-x

若初值X=0~255范圍時(shí),計(jì)數(shù)范圍為:1~256。

2、用于定時(shí)功能時(shí),定時(shí)時(shí)間t的計(jì)算公式為:

t=N×TM=(28-x)×TMx=28-t/TMTM=12TOSC=12/fOSC

若晶振頻率為12MHz,機(jī)器周期=1us,初值X=0~255范圍時(shí),則可定時(shí)范圍為1~256us。方式2---相關(guān)計(jì)算T0分成2個(gè)8位定時(shí)器:TL0定時(shí)/計(jì)數(shù)器和TH0定時(shí)器

TL0占用T0控制位:C/T,TR0,GATE;

TH0占用T1控制位:TR1。注意:T1不能使用方式3工作4、方式3邏輯圖及工作原理(只有T0有)有興趣下來花仔細(xì)研究!TH0借用了T1的TR1和TF1,因此控制了T1的中斷,此時(shí)T1可作串行通信的波特率控制發(fā)生器(下周介紹)定時(shí)/計(jì)數(shù)器4種方式比較方式計(jì)數(shù)位數(shù)最大定時(shí)時(shí)間Tmax方式013位Tmax=8192×1μ?

=8.192ms方式116位Tmax=65536×1μ?=65.536ms方式2,38位Tmax=256×1μ?=0.256ms方式計(jì)數(shù)位數(shù)最大計(jì)數(shù)值方式013位Tmax=213=8192方式116位Tmax=216=65536方式2,38位Tmax=28=256由于:定時(shí)時(shí)間:t=N×TM,(或N=t/TM)而TM=12TOSC=12*1/fOSC,假設(shè)系統(tǒng)時(shí)鐘fOSC=12MHz,則有下表:

使用定時(shí)器/計(jì)數(shù)器的必須計(jì)算計(jì)數(shù)初值。假設(shè)t為定時(shí)時(shí)間,計(jì)數(shù)器位數(shù)為n,系統(tǒng)時(shí)鐘頻率為fosc,計(jì)數(shù)初值為x,則它們滿足下列關(guān)系式:五、定時(shí)/計(jì)數(shù)器應(yīng)用時(shí)的初值計(jì)算定時(shí)器的方式0時(shí):n=13, 方式1時(shí):n=16

方式2時(shí):n=8, 方式3時(shí):n=8例1:fOSC=12MHZ,試計(jì)算定時(shí)時(shí)間2ms(2000μs)所需的定時(shí)器的初值。TH0=?、TL0=?方式0:x=213-2000=6192=1830H=1100000110000BTH0=0XC1; TL0=0X10;(TH0=6192/32;TL0=6192%32;)方式1:x=216-2000=63536=0F830HTH0=0XF8、TL0=0X30 (TH0=63536/256;TL0=63536%256;)方式2、方式3:TMAX=256μs

所以必須將工作方式方式0或方式1:否則就需要進(jìn)行多次定時(shí)最后求和。例2:要求實(shí)現(xiàn)8個(gè)LED的實(shí)現(xiàn)交替閃爍,間隔時(shí)間為100ms(設(shè)使用的晶振頻率為6MHz。)(1)計(jì)算計(jì)數(shù)初值X

∵定時(shí)時(shí)間t=(2n-x)×TM

又∵

fOSC=6MHz∴TM=12/fOSC=12/6MHz=2μs

本設(shè)計(jì)選用定時(shí)器的工作方式1,∴n=16。

∴(216-x)×2μs=100ms=100000us

∴x=216-50000=65536-50000=15536=0x3CB0TH0=0x3C;TL0=0xB0;或TH0=15536/256;TL0=15536%256;#include<regx51.H>bitflag=0;voidmain(){ TMOD=0x01; //設(shè)定T0工作方式(方式1)

TH0=15536/256; //設(shè)置T0初始值

TL0=15536%256; TR0=1; //啟動(dòng)定時(shí)器0 while(1) {

if(TF0==1) //查詢定時(shí)器溢出標(biāo)志位是否為1

{ TF0=0; flag=~flag;

if(falg==0) P0=0X55; else P0=0XAA;

TH0=15536/256; TL0=15536%256;

} }}#include<regx51.h>bitflag=0;voidmain()

{ TMOD=0X01; //設(shè)定定時(shí)器的相關(guān)條件

TH0=15536/256; //準(zhǔn)備初始值

TL0=155336%256; ET0=1; //允許定時(shí)器0中斷

EA=1; //開放總中斷

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

}voidTIMER0_ISR()interrupt1//中斷服務(wù)函數(shù){ TH0=15536/256; //準(zhǔn)備初始值

TL0=15536%256; flag=~flag; if(flag==0) P0=0X55;else P0=0XAA;}10ms20ms10ms例2:要求:采用定時(shí)器T1的方式1,從P2.0引腳上輸出周期為20ms的方波(占空比為50%),已知fOSC=12MHz。周期為20ms的方波要求P2.0上的電平每10ms變更一次。(1)計(jì)算計(jì)數(shù)初值X

∵定時(shí)時(shí)間t=(2n-x)×TM

又∵

fOSC=12MHz∴TM=12/fOSC=12/12MHz=1μs

本設(shè)計(jì)選用定時(shí)器的工作方式1,∴n=16。

∴(216-x)×1μs=10ms=10000us

∴x=216-10000=65536-10000=55536=0xD8F0TH1=0xD8;TL1=0xF0;TH1=55536/256;TL1=55536%256;#include<regx51.H>voidmain(){ TMOD|=0x10;//設(shè)定T1工作方式

TH1=0xD8; //設(shè)置T1初始值

TL1=0xF0; TR1=1; //啟動(dòng)定時(shí)器1 while(1) { if(TF1==1)//查詢定時(shí)器0溢出標(biāo)志位是否為1 {

TF1=0; //清除定時(shí)器1溢出標(biāo)志位

P2_0=~P2_0 //P2.0取反產(chǎn)生方波

TH1=0xD8; //設(shè)置T0初始值

TL1=0xF0;

} }}方法一:查詢方式實(shí)現(xiàn)#include<regx51.h>voidmain() { TMOD|=0X10; //設(shè)定定時(shí)器的相關(guān)條件

TH1=0XD8; //裝入初值

TL1=0XF0; ET1=1; //允許定時(shí)器1中斷

EA=1; //開放總中斷

TR1=1;//啟動(dòng)定時(shí)器1 while(1); //等待中斷信號(hào)申請(qǐng)

}voidTimer1_ISR()interrupt3//定時(shí)器1中斷服務(wù)函數(shù){

TH0=0XD8; //重新賦值,保證下次定時(shí)的時(shí)間任然為10ms TL0=0XF0;

P2_0=~P2_0;//信號(hào)取反}方法二:中斷方式實(shí)現(xiàn)【解題思路】

周期為10ms的方波要求P2.0上的電平每5ms變更一次,但在方式2,T0的最大定時(shí)為256us,因此不能直接實(shí)現(xiàn),可用T0產(chǎn)生250us定時(shí),再用軟件計(jì)數(shù)20次,實(shí)現(xiàn)5ms定時(shí)。5ms10ms5ms例3:要求:采用定時(shí)器T0的方式2,從P2.0上輸出一個(gè)周期性周期為10ms方波(占空比為50%),已知晶振12MHz。(1)計(jì)算計(jì)數(shù)初值X

∵定時(shí)時(shí)間t=(2n-x)×TM

又∵

fOSC=12MHz

∴TM=12/fOSC=12/12MHz=1μs

本設(shè)計(jì)選用定時(shí)器的工作方式2,∴n=8。

∴(28-x)×1μs=250us

∴x=28-250=256-250=6=06HTH0=0x06;TL0=0x06;#include<regx51.H>unsignedcharcount=0;voidmain(){ TMOD|=0x02; //設(shè)定T0工作方式

TH0=0x06;//設(shè)置T0初始值

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

while(1) { if(TF0==1) //查詢定時(shí)器溢出標(biāo)志位是否為1 {

TF0=0; count++;

if(count==20) { count=0; P2_0=~P2_0 //P2.0取反產(chǎn)生方波

}

} }}方法一:查詢方式實(shí)現(xiàn)#include<regx51.h>voidmain(){ TMOD=0X02; TH0=0X06; TL0=0X06; ET0=1; //開放外部中斷0 EA=1; //開放總中斷

TR0=1;

while(1);//等待中斷申請(qǐng),即等待TF0=1}voidTimer0_ISR()

interrupt1

{

count++;

if(count==20) { count=0; P2_0=~P2_0 }}方法二:中斷方式實(shí)現(xiàn)例4:設(shè)fosc=6MHz,利用單片機(jī)的T/C實(shí)現(xiàn)從P2.0端口引腳輸出1000個(gè)脈沖,脈沖周期為2ms。

P2.0T1(P3.5)AT89S51分析:由于fOSC=6MHz

∴TM=12/fOSC=12/6MHz=2μs

本設(shè)計(jì)選取T0定時(shí);T1計(jì)數(shù)。

設(shè)T0采用中斷方式產(chǎn)生周期為2ms方波,T1對(duì)該方波計(jì)數(shù),當(dāng)輸出至第1000個(gè)脈沖時(shí),使TF1置1。在主程序中用查詢方法,檢測(cè)到TF1變1時(shí),關(guān)掉T0,停止輸出方波。1ms2ms1msT0、T1參數(shù)的確定:

(1)選用T0方式1實(shí)現(xiàn)定時(shí):脈寬為脈沖周期的一半為1ms。 ∵(216-初值X)×TM=定時(shí)時(shí)間 ∴(65536-初值X)×2μs=1000us

∴初值X=65536-500=0xFE0C TH0=0xFE;TL0=0x0C;

(2)選用T1方式1實(shí)現(xiàn)計(jì)數(shù):N=1000; ∵N=216-初值X

則X=65536-1000=64536=0xFC18 TH1=0xFC;TL1=0x18;例4:設(shè)fosc=6MHz,利用單片機(jī)的T/C實(shí)現(xiàn)從P2.0端口引腳輸出1000個(gè)脈沖,脈沖周期為2ms。#include<regx51.h>voidmain(){ TMOD=0X51;

//設(shè)定T0,T1工作方式

TH0=0xFE;//賦定時(shí)初值

TL0=0x0C; TH1=0xFC;//賦計(jì)數(shù)初值

TL1=0x18;

ET0=1; EA=1; TR0=1; TR1=1;

while(TF1==0);//查詢1000個(gè)脈沖計(jì)夠沒有?

EA=0; //關(guān)閉總中斷

TR0=0;//關(guān)閉定時(shí)器0 TR1=0;//關(guān)閉定時(shí)器1 while(1);}//中斷產(chǎn)生周期為2MS的方波信號(hào)voidT0_ser()interrupt1using1{

TH0=0xFE; TL0=0x0C;

P2_0=~P2_0 }1ms2ms1ms例5、脈沖參數(shù)測(cè)量——GATE功能的使用。89S51P3.2P3.31被測(cè)信號(hào)21a3T0計(jì)數(shù)T1計(jì)數(shù)

試編程測(cè)量下圖所示,脈沖高電平(計(jì)數(shù))長(zhǎng)度值存于X中,脈沖低電平長(zhǎng)度存于Y中。電路連接如下圖所示。大家試想為什么要加非門?振蕩器TF0啟動(dòng)控制溢出標(biāo)志中斷÷12GATE≥&TR0C/T=1TH0TL0N位

+1計(jì)數(shù)器C/T=0T0(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論