《單片機(jī)原理及應(yīng)用》課件第6章 定時(shí)計(jì)數(shù)器控制_第1頁(yè)
《單片機(jī)原理及應(yīng)用》課件第6章 定時(shí)計(jì)數(shù)器控制_第2頁(yè)
《單片機(jī)原理及應(yīng)用》課件第6章 定時(shí)計(jì)數(shù)器控制_第3頁(yè)
《單片機(jī)原理及應(yīng)用》課件第6章 定時(shí)計(jì)數(shù)器控制_第4頁(yè)
《單片機(jī)原理及應(yīng)用》課件第6章 定時(shí)計(jì)數(shù)器控制_第5頁(yè)
已閱讀5頁(yè),還剩62頁(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章定時(shí)/計(jì)數(shù)器控制6.18051定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理6.2定時(shí)/計(jì)數(shù)器的控制寄存器6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器用于外部中斷擴(kuò)展6.5定時(shí)/計(jì)數(shù)器應(yīng)用6.6定時(shí)器26.7看門狗6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)6.9思考與練習(xí)本章要點(diǎn)在單片機(jī)的應(yīng)用系統(tǒng)中,常常會(huì)有定時(shí)控制的需求,如定時(shí)輸出、定時(shí)檢測(cè)、定時(shí)掃描等;也經(jīng)常要對(duì)外部事件進(jìn)行計(jì)數(shù)。8051系列單片機(jī)片內(nèi)集成有兩個(gè)可編程的定時(shí)/計(jì)數(shù)器:T0和T1。它們既可以工作于定時(shí)模式,也可以工作于外部事件計(jì)數(shù)模式。此外,T1還可以作為串行接口的波特率發(fā)生器。要實(shí)現(xiàn)定時(shí)功能,可以采用下面三種方法:(1)采用軟件定時(shí):讓CPU循環(huán)執(zhí)行一段程序,通過(guò)選擇指令和安排循環(huán)次數(shù),以實(shí)現(xiàn)軟件定時(shí)。軟件定時(shí)不占用硬件資源,但占用了CPU時(shí)間,降低了CPU的利用率。(2)采用時(shí)基電路定時(shí):例如采用555電路,外接必要的元器件(電阻和電容),即可構(gòu)成硬件定時(shí)電路。此種方法實(shí)現(xiàn)容易,改變電阻和電容值,可以在一定范圍內(nèi)改變定時(shí)值。但在硬件連接好以后,定時(shí)值與定時(shí)范圍不能由軟件進(jìn)行控制和修改,即不可編程。中斷的基本概念8051中斷系統(tǒng)的結(jié)構(gòu)單片機(jī)中斷系統(tǒng)8051中斷的使用中斷服務(wù)程序本章要點(diǎn)(3)

采用可編程芯片定時(shí):這種定時(shí)芯片的定時(shí)值及定時(shí)范圍很容易用軟件來(lái)確定和修改,此種芯片定時(shí)功能強(qiáng),使用靈活。在單片機(jī)的定時(shí)/計(jì)數(shù)器不夠用時(shí),可以考慮進(jìn)行擴(kuò)展。典型的可編程定時(shí)芯片如Intel8253。本章要點(diǎn):定時(shí)和計(jì)數(shù)的基本概念定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)單片機(jī)定時(shí)/計(jì)數(shù)器的特點(diǎn)定時(shí)/計(jì)數(shù)器的使用(合理選擇定時(shí)/計(jì)數(shù)器工作方式,初始值的計(jì)算,初始化程序的設(shè)計(jì))中斷服務(wù)程序定時(shí)/計(jì)數(shù)器工程中運(yùn)用CONTNTS6.18051定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理6.18051定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理011.定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)圖6-1所示是定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)原理框圖。圖6-1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)原理框圖定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成(T0由TH0和TL0組成,T1由TH1和TL1組成)。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器,由它確定定時(shí)/計(jì)數(shù)器的工作方式和功能;TCON是定時(shí)/計(jì)數(shù)器的控制寄存器,用于控制T0、T1的啟動(dòng)和停止以及設(shè)置溢出標(biāo)志。6.18051定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理012.定時(shí)/計(jì)數(shù)器的工作原理作為定時(shí)/計(jì)數(shù)器的加1計(jì)數(shù)器,其輸入的計(jì)數(shù)脈沖有兩個(gè)來(lái)源,一個(gè)是由系統(tǒng)的時(shí)鐘振蕩器輸出脈沖經(jīng)12分頻后送來(lái),另一個(gè)是T0或T1引腳輸入的外部脈沖源。每來(lái)一個(gè)脈沖,計(jì)數(shù)器加1,當(dāng)加到計(jì)數(shù)器為全1時(shí),再輸入一個(gè)脈沖,就使計(jì)數(shù)器回0,且計(jì)數(shù)器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請(qǐng)求(定時(shí)/計(jì)數(shù)器中斷允許時(shí))。如果定時(shí)/計(jì)數(shù)器工作于定時(shí)模式,則表示定時(shí)時(shí)間已到;如果工作于計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿??梢?,由溢出時(shí)計(jì)數(shù)器的值減去計(jì)數(shù)初值才是加1計(jì)數(shù)器的計(jì)數(shù)值。6.18051定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理01設(shè)置為定時(shí)器模式時(shí),加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器周期計(jì)數(shù)(1個(gè)機(jī)器周期等于12個(gè)振蕩周期,即計(jì)數(shù)頻率為晶振頻率的1/12,12

MHz為1

μs、6

MHz為2

μs)。計(jì)數(shù)值乘以機(jī)器周期就是定時(shí)時(shí)間。設(shè)置為計(jì)數(shù)器模式時(shí),外部事件計(jì)數(shù)脈沖由T0(P3.4)或T1(P3.5)引腳輸入到計(jì)數(shù)器。在每個(gè)機(jī)器周期的S5P2期間采樣T0、T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一周期又采樣到一低電平輸入時(shí),則計(jì)數(shù)器加1,更新的計(jì)數(shù)值在下一個(gè)機(jī)器周期的S3P1期間裝入計(jì)數(shù)器。由于檢測(cè)一個(gè)從1到0的下降沿需要2個(gè)機(jī)器周期,因此要求被采樣的電平至少要維持一個(gè)機(jī)器周期,所以最高計(jì)數(shù)頻率為晶振頻率的1/24。當(dāng)晶振頻率為12

MHz時(shí),最高計(jì)數(shù)頻率不超過(guò)1/2

MHz,即計(jì)數(shù)脈沖的周期要大于2

μs。CONTNTS6.2

定時(shí)/計(jì)數(shù)器的控制寄存器6.2定時(shí)/計(jì)數(shù)器的控制寄存器028051系列單片機(jī)定時(shí)/計(jì)數(shù)器的工作由兩個(gè)特殊功能寄存器控制。TMOD用于設(shè)置其工作方式,TCON用于控制其啟動(dòng)和中斷申請(qǐng)。工作方式寄存器TMOD工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作方式,高4位用于T1,低4位用于T0。TMOD的結(jié)構(gòu)和各位名稱、功能見表6-1。表6-1 TMOD的結(jié)構(gòu)和各位名稱、功能(字節(jié)地址89H)6.2定時(shí)/計(jì)數(shù)器的控制寄存器02(1)GATE:門控位。GATE=0時(shí),只要用軟件使TCON中的TR0或TR1為1,就:可以啟動(dòng)定時(shí)/計(jì)數(shù)器工作;GATE=1時(shí),用軟件使TR0或TR1為1,同時(shí)外部中斷或也為高電平時(shí),才能啟動(dòng)定時(shí)/計(jì)數(shù)器工作。即此時(shí)定時(shí)器的啟動(dòng)條件加上了或?yàn)楦唠娖竭@一條件。(2):定時(shí)/計(jì)數(shù)模式選擇位。=0為定時(shí)模式,此時(shí)定時(shí)器計(jì)數(shù)的脈沖是由8051單片機(jī)片內(nèi)晶振器經(jīng)12分頻后產(chǎn)生的,每經(jīng)過(guò)一個(gè)機(jī)器周期定時(shí)器(T0或T1)的數(shù)值加1,直至計(jì)數(shù)器滿產(chǎn)生溢出。例如:當(dāng)8051采用6MHz晶振時(shí),每個(gè)機(jī)器周期為2s,計(jì)10個(gè)機(jī)器周期即為20s,即定時(shí)20s。=1為計(jì)數(shù)模式,通過(guò)引腳T0(P3.4v)和T1(P3.5)對(duì)外部脈沖信號(hào)計(jì)數(shù)。當(dāng)輸入脈沖信號(hào)由1至0的下降沿時(shí),計(jì)算器的值加1.在每個(gè)機(jī)器周期,CPU采樣T0和T1的輸入電平。雖然對(duì)輸入信號(hào)的占空比沒(méi)有特殊要求,但是為了確保某個(gè)電平在變化之前至少被采樣一次,要求電平保持時(shí)間至少是一個(gè)完整的機(jī)器周期,又由于檢測(cè)一個(gè)1至0的下跳變需要兩個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為fosc/24,即晶振頻率的1/24。6.2定時(shí)/計(jì)數(shù)器的控制寄存器02(3)M1M0:工作方式設(shè)置位。定時(shí)/計(jì)數(shù)器有4種工作方式,由M1M0進(jìn)行設(shè)置。見表6-2。特別需要注意,TMOD不能進(jìn)行位尋址,所以只能用字節(jié)指令設(shè)置定時(shí)/計(jì)數(shù)器的工作方式。CPU復(fù)位時(shí)TMOD所有位清0,上電復(fù)位后應(yīng)重新設(shè)置。6.2定時(shí)/計(jì)數(shù)器的控制寄存器022.控制寄存器TCONTCON的低4位用于控制外部中斷,已在前面介紹。高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與中斷申請(qǐng)。TCON的結(jié)構(gòu)、位名稱、位地址和功能見表6-3。(1)TF1:T1溢出中斷請(qǐng)求標(biāo)志。當(dāng)定時(shí)/計(jì)數(shù)器T1計(jì)數(shù)溢出后,由CPU內(nèi)硬件自動(dòng)置1,表示向CPU請(qǐng)求中斷。CPU響應(yīng)該中斷后,片內(nèi)硬件自動(dòng)對(duì)其清0。TF1也可由軟件程序查詢其狀態(tài)或由軟件置位清0。6.2定時(shí)/計(jì)數(shù)器的控制寄存器02(2)TF0:T0溢出中斷請(qǐng)求標(biāo)志。其意義和功能與TF1相似。(3)TR1:定時(shí)/計(jì)數(shù)器T1運(yùn)行控制位。TR1=1,T1運(yùn)行,TR1=0,T1停止。(4)TR0:定時(shí)/計(jì)數(shù)器T0運(yùn)行控制位。TR0=1,T0運(yùn)行,TR0=0,T0停止。CONTNTS6.3定時(shí)/計(jì)數(shù)器的工作方式6.3定時(shí)/計(jì)數(shù)器的工作方式038051系列單片機(jī)定時(shí)/計(jì)數(shù)器有4種工作方式,由TMOD中M1M0的狀態(tài)確定。前3種工作方式,T0和T1除所使用的寄存器、有關(guān)控制位、標(biāo)志不同外,其他操作完全相同。T1無(wú)方式3。下面以T0為例進(jìn)行分析。1. 工作方式0當(dāng)M1M0=00時(shí),定時(shí)/計(jì)數(shù)器工作于方式0,如圖6-2所示。在方式0情況下,內(nèi)部計(jì)數(shù)器為13位。由TL0低5位和TH08位組成,特別需要注意的是TL0低5位計(jì)數(shù)滿時(shí)不向TL0的第6位進(jìn)位,而是向TH0進(jìn)位,13位計(jì)滿溢出,TF0置1,最大計(jì)數(shù)值213=8192(計(jì)數(shù)器初值為0)。6.3定時(shí)/計(jì)數(shù)器的工作方式036.3定時(shí)/計(jì)數(shù)器的工作方式03GATE位決定定時(shí)器運(yùn)行口口那個(gè)值取決于TR0或TR0和INT0引腳。當(dāng)門控位GATE=0時(shí),由于GATE信號(hào)封鎖了或門,使引腳INT0信號(hào)無(wú)效,T0運(yùn)行控制由TR0單獨(dú)控制。當(dāng)TR0=1時(shí),接通模擬開關(guān),定時(shí)/計(jì)數(shù)器工作;當(dāng)TR0=0,則模擬開關(guān)斷開,定時(shí)/計(jì)數(shù)器停止工作。當(dāng)GATE=1時(shí),T0運(yùn)行控制由TR0和INT0兩個(gè)條件共同控制。如果TR0=1,同時(shí)INT0=1,與門輸出為1,定時(shí)/計(jì)數(shù)器方可工作。TF0是定時(shí)/計(jì)數(shù)器的溢出狀態(tài)標(biāo)志,溢出時(shí)由硬件置位,TF0溢出中斷被CPU響應(yīng)時(shí),轉(zhuǎn)入中斷時(shí)硬件清零,TF0也可由程序查詢和清“零”。工作方式0對(duì)定時(shí)/計(jì)數(shù)器高8位和低5位的初值計(jì)算很麻煩,易出錯(cuò)。方式0采用13位計(jì)數(shù)器是為了與早期的產(chǎn)品兼容,所以在實(shí)際應(yīng)用中常由16位的方式1取代。6.3定時(shí)/計(jì)數(shù)器的工作方式03【例6-1】設(shè)定時(shí)器T0選擇工作方式0,定時(shí)時(shí)間為1ms,fosc/=6MHz。試確定T0初值,計(jì)算最大定時(shí)時(shí)間T。解答過(guò)程:當(dāng)T0處于工作方式0時(shí),加1計(jì)數(shù)器為13位。設(shè)T0的初值為X,則轉(zhuǎn)換為二進(jìn)制數(shù):X=1111000001100BT0的低5位:01100B=0CHT0的高8位:11110000B=F0H6.3定時(shí)/計(jì)數(shù)器的工作方式03T0最大定時(shí)時(shí)間對(duì)應(yīng)于13位計(jì)數(shù)器T0的各位全為1,即(TH0=FFH),(TL0)=1FH。則6.3定時(shí)/計(jì)數(shù)器的工作方式032. 工作方式1當(dāng)M1M0=01時(shí),定時(shí)/計(jì)數(shù)器工作于方式1,如圖6-3所示。在方式1情況下,內(nèi)部計(jì)數(shù)器為16位。由TL0作低8位,TH0作高8位。16位計(jì)滿溢出時(shí),TF0置1。6.3定時(shí)/計(jì)數(shù)器的工作方式03方式1與方式0的區(qū)別在于方式0是13位計(jì)數(shù)器,最大計(jì)數(shù)值213=8

192;方式1是16位計(jì)數(shù)器,最大計(jì)數(shù)值為216=65

536。用作定時(shí)器時(shí),若fOSC=12

MHz,則方式0最大定時(shí)時(shí)間為8

192

μs,方式1最大定時(shí)時(shí)間為65

536

μs。6.3定時(shí)/計(jì)數(shù)器的工作方式033.工作方式2當(dāng)M1M0=10時(shí),定時(shí)/計(jì)數(shù)器工作于方式2,如圖6-4所示。在方式2情況下,定時(shí)/計(jì)數(shù)器為8位,能自動(dòng)恢復(fù)定時(shí)/計(jì)數(shù)器初值。在方式0、方式l時(shí),定時(shí)/計(jì)數(shù)器的初值不能自動(dòng)恢復(fù),計(jì)滿后若要恢復(fù)原來(lái)的初值,必須在程序指令中重新給TH0、TL0賦值。但方式2與方式0、方式1不同。方式2僅用TL0計(jì)數(shù),最大計(jì)數(shù)值為28=256。計(jì)滿溢出后,進(jìn)位TF0,使溢出標(biāo)志TF0=1,同時(shí)原來(lái)裝在TH0中的初值自動(dòng)裝入TL0(TH0中的初值允許與TL0不同)。所以,方式2既有優(yōu)點(diǎn),又有缺點(diǎn)。優(yōu)點(diǎn)是定時(shí)初值可自動(dòng)恢復(fù),缺點(diǎn)是計(jì)數(shù)范圍小。因此,方式2適用于需要重復(fù)定時(shí),而定時(shí)范圍不大的應(yīng)用場(chǎng)合,特別適合于用作較精確的脈沖信號(hào)發(fā)生器。6.3定時(shí)/計(jì)數(shù)器的工作方式036.3定時(shí)/計(jì)數(shù)器的工作方式034.工作方式3當(dāng)M1M0=11時(shí),定時(shí)/計(jì)數(shù)器工作于方式3,但方式3僅適用于T0,T1無(wú)方式3。(1)T0方式3。在方式3情況下,T0被拆成2個(gè)獨(dú)立的8位計(jì)數(shù)器TL0、TH0,如圖6-5所示。6.3定時(shí)/計(jì)數(shù)器的工作方式03①TL0使用T0原有的控制寄存器資源:TF0、TR0、GATE、、,組成一個(gè)8位的定時(shí)/計(jì)數(shù)器。②TH0借用T1的中斷溢出標(biāo)志TF1、TR1,只能對(duì)機(jī)內(nèi)機(jī)器周期脈沖計(jì)數(shù),組成一個(gè)8位定時(shí)器。(2)T0方式3情況下的T1。T1由于TF1、TR1被T0的TH0占用,計(jì)數(shù)器溢出時(shí),只能將輸出送至串行口,即用作串行口波特率發(fā)生器,但T1工作方式仍可設(shè)置為方式0、方式1、方式2,控制位仍可使T1工作在定時(shí)/計(jì)數(shù)器方式,如圖6-6所示。從圖6-6(c)中看出,T0方式3情況下的T1方式2,因定時(shí)初值能自動(dòng)恢復(fù),用作波特率發(fā)生器更為合適。6.3定時(shí)/計(jì)數(shù)器的工作方式03圖6-6T0方式3情況下的T1工作方式6.3定時(shí)/計(jì)數(shù)器的工作方式03在這種情況下,定時(shí)/計(jì)數(shù)器通常作為串行口的波特率發(fā)生器使用,以確定串行通信的速率,因?yàn)橐褯](méi)有TF1被定時(shí)/計(jì)數(shù)器0借用了,只能把計(jì)數(shù)溢出直接送給串行口。把定時(shí)/計(jì)數(shù)器1當(dāng)作波特率發(fā)生器使用時(shí),只需設(shè)置好工作方式,即可自動(dòng)運(yùn)行。如果停止它的工作,需送入一個(gè)把它設(shè)置為方式3的方式控制字即可,這是因?yàn)槎〞r(shí)/計(jì)數(shù)器本身就不能工作在方式3,如果硬把它設(shè)置為方式3,自然會(huì)停止工作。CONTNTS6.4

定時(shí)/計(jì)數(shù)器用于外部中斷擴(kuò)展6.4定時(shí)/計(jì)數(shù)器用于外部中斷擴(kuò)展04實(shí)際應(yīng)用系統(tǒng)中如需有兩個(gè)以上的外部中斷源,而片內(nèi)定時(shí)/計(jì)數(shù)器未使用時(shí),可利用定時(shí)/計(jì)數(shù)器來(lái)擴(kuò)展外部中斷源。擴(kuò)展方法是,將定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)器方式,計(jì)數(shù)初值設(shè)定為滿程,將待擴(kuò)展的外部中斷源接到定時(shí)/計(jì)數(shù)器的外部計(jì)數(shù)引腳。從該引腳輸入一個(gè)下降沿信號(hào),計(jì)數(shù)器加1后便產(chǎn)生定時(shí)/計(jì)數(shù)器溢出中斷。因此,可把定時(shí)/計(jì)數(shù)器的外部計(jì)數(shù)引腳作為擴(kuò)展中斷源的中斷輸入端。例如,利用T0擴(kuò)展一個(gè)外部中斷源。將T0設(shè)置為計(jì)數(shù)器方式,按方式2工作,TH0、TL0的初值均為0FFH,T0允許中斷,CPU開放中斷。其初始化程序如下:6.4定時(shí)/計(jì)數(shù)器用于外部中斷擴(kuò)展04對(duì)應(yīng)的C語(yǔ)言初始化程序如下:當(dāng)T0(P3.4)引腳上出現(xiàn)外部中斷請(qǐng)求信號(hào)(一個(gè)下降沿信號(hào))時(shí),TL0計(jì)數(shù)加1,產(chǎn)生溢出,將TF0置1,向CPU發(fā)出中斷請(qǐng)求。同時(shí),TH0的內(nèi)容0FFH又自動(dòng)裝入TL0,作為下一輪的計(jì)數(shù)初值。這樣,P3.4引腳每輸入一個(gè)下降沿脈沖,都將TF0置1,向CPU發(fā)出中斷請(qǐng)求。這就相當(dāng)于又多了一個(gè)邊沿觸發(fā)的外部中斷源。CONTNTS6.5

定時(shí)/計(jì)數(shù)器應(yīng)用6.5定時(shí)/計(jì)數(shù)器應(yīng)用05在工程應(yīng)用中,常常會(huì)遇到要求系統(tǒng)定時(shí)或?qū)ν獠渴录?jì)數(shù)等類似問(wèn)題,若用CPU直接進(jìn)行定時(shí)或計(jì)數(shù)不但降低了CPU的效率,而且會(huì)無(wú)法響應(yīng)實(shí)時(shí)事件。靈活運(yùn)用定時(shí)/計(jì)數(shù)器不但可減輕CPU的負(fù)擔(dān),簡(jiǎn)化外圍電路,而且可以提高系統(tǒng)的實(shí)時(shí)性,能快速響應(yīng)和處理外部事件。由于定時(shí)/計(jì)數(shù)器的功能是由軟件編程實(shí)現(xiàn)的,因此一般在使用定時(shí)/計(jì)數(shù)器前都要對(duì)其進(jìn)行初始化。所謂初始化,實(shí)際上就是確定相關(guān)寄存器的值。初始化步驟如下:(1)確定工作方式。對(duì)TMOD賦值。根據(jù)任務(wù)性質(zhì)明確工作方式及類型,從而確定TMOD寄存器的值。例如,要求定時(shí)/計(jì)數(shù)器T0完成16位定時(shí)功能,TMOD的值就應(yīng)為01H,用指令MOVTMOD,#01H即可完成工作方式的設(shè)定。(2)預(yù)置定時(shí)/計(jì)數(shù)器的計(jì)數(shù)初值。依據(jù)以上確定的工作方式和要求的計(jì)數(shù)次數(shù),計(jì)算出相應(yīng)的計(jì)數(shù)初值。直接將計(jì)數(shù)初值寫入TH0、TL0或TH1、TL1。(3)根據(jù)需要開放定時(shí)/計(jì)數(shù)器中斷。直接對(duì)IE寄存器賦值。(4)啟動(dòng)定時(shí)/計(jì)數(shù)器工作。將TR0或TR1置1。GATE=0時(shí),直接由軟件置位啟動(dòng);GATE=l時(shí),除軟件置位外,還必須在外中斷引腳處加上相應(yīng)的電平值才能啟動(dòng)。6.5定時(shí)/計(jì)數(shù)器應(yīng)用05【例6-2】設(shè)單片機(jī)的振蕩頻率為12MHz,用定時(shí)器/計(jì)數(shù)器0的模式1編程,在P1.0引腳產(chǎn)生一個(gè)50Hz的方波,定時(shí)器T0采用中斷的處理方式。題意分析定時(shí)器的分析過(guò)程:需要產(chǎn)生周期信號(hào)時(shí),選擇定時(shí)方式。定時(shí)時(shí)間到了對(duì)輸出端進(jìn)行周期性的輸出即可。周期為50Hz的方波要求定時(shí)器的定時(shí)時(shí)間為10ms,每次溢出時(shí),將P1.0引腳的輸出取反,就可以在P1.0上產(chǎn)生所需要的方波。解答過(guò)程:定時(shí)器初值計(jì)算:振蕩頻率為12MHz,則機(jī)器周期為1μs。設(shè)定時(shí)初值為X,(65536-X)×1μs=10ms,則X=55536=D8F0H定時(shí)器的初值為:TH0=0D8H,TL0=0F0H6.5定時(shí)/計(jì)數(shù)器應(yīng)用05C語(yǔ)言程序:6.5定時(shí)/計(jì)數(shù)器應(yīng)用05【例6-3】用定時(shí)器控制P1.1所接的LED每100ms亮或滅一次,設(shè)系統(tǒng)的晶振為6MHZ。采用查詢方式實(shí)現(xiàn)。分析過(guò)程:要使用單片機(jī)的定時(shí)器,首先要設(shè)置定時(shí)器的工作方式,然后給定時(shí)器賦初值,即進(jìn)行定時(shí)器的初始化。解答過(guò)程:這里選擇定時(shí)器T0定時(shí),方式1,不使用門控位。由此可以確定定時(shí)器的工作方式字TMOD應(yīng)為00000001B,即0x01。定時(shí)初值為:由于fosc=6MHz,Tm=2μs,因此時(shí)間常數(shù)的計(jì)算為:6.5定時(shí)/計(jì)數(shù)器應(yīng)用05初始化定時(shí)器后,要定時(shí)器工作,必須將TR0=1。下面用查詢方式完成。6.5定時(shí)/計(jì)數(shù)器應(yīng)用05當(dāng)定時(shí)時(shí)間到,TF0被置為1。因此,只需要查詢TF0是否等于1,即可得知定時(shí)時(shí)間是否到達(dá),程序中“if(TF0==1)”來(lái)判斷。如果TF0=0,則條件滿足,大括號(hào)中的程序不會(huì)被執(zhí)行;當(dāng)定時(shí)時(shí)間到,TF1=1,條件滿足,執(zhí)行大括號(hào)中的程序,首先將TF0清零,然后重置定時(shí)初值,最后是執(zhí)行規(guī)定動(dòng)作,取反P1.1的狀態(tài)。CONTNTS6.6

定時(shí)器26.6定時(shí)器206除了定時(shí)器0和定時(shí)器1外,52系列單片機(jī)還有另外一個(gè)定時(shí)器——定時(shí)器2。下面我們簡(jiǎn)單介紹一下定時(shí)器2的用法。定時(shí)器2是一個(gè)16位的定時(shí)器/計(jì)數(shù)器。T2CON中的2/TC位決定定時(shí)器2是用作定時(shí)器還是計(jì)數(shù)器。定時(shí)器2有三種工作模式:捕捉模式、自動(dòng)重載(增或減計(jì)數(shù))模式和波特率發(fā)生器模式。定時(shí)器2的工作模式由T2CON決定,詳見表6-6。定時(shí)器2有兩個(gè)8位的寄存器TH2和TL2。在定時(shí)器功能中,每個(gè)機(jī)器周期TL2都會(huì)增1。由于一個(gè)機(jī)器周期由12個(gè)振蕩周期組成,所以定時(shí)器2的計(jì)數(shù)速率為振蕩頻率的1/12。與定時(shí)器2有關(guān)的寄存器為T2CON和T2MOD。T2CON寄存器的組成見表6-4。6.6定時(shí)器206詳細(xì)介紹如下。TF2:定時(shí)器2溢出標(biāo)志位。定時(shí)器2溢出時(shí)置位。必須由軟件清零。當(dāng)RCLK=1或TCLK=1時(shí),TF2不會(huì)置位。EXF2:定時(shí)器2外部標(biāo)志位。當(dāng)EXEN2=1,且T2EX引腳發(fā)生電平的負(fù)跳變引起捕捉或重載時(shí)被置位。當(dāng)允許定時(shí)器2中斷時(shí),EXF2=1會(huì)使CPU跳轉(zhuǎn)到定時(shí)器2的中斷處理函數(shù)中。EXF2必須由軟件清零。在增/減計(jì)數(shù)模式下(DCEN=1),EXF2不會(huì)引起中斷。RCLK:接收時(shí)鐘使能。置位時(shí),在串行通信模式1和模式3中,串口將使用定時(shí)器2的溢出脈沖作為接收時(shí)鐘。RCLK=0將使串口使用定時(shí)器1的溢出脈沖作為接收時(shí)鐘。?

TCLK:發(fā)送時(shí)鐘使能。置位時(shí),在串行通信模式1和模式3中,串口將使用定時(shí)器2的溢出脈沖作為發(fā)送時(shí)鐘。TCLK=0將使串口使用定時(shí)器1的溢出脈沖作為發(fā)送時(shí)鐘。? EXEN2:定時(shí)器2外部信號(hào)使能。置位時(shí),如果定時(shí)器2并沒(méi)有用作串口的波特率發(fā)生器,T2EX引腳的電平負(fù)跳變將發(fā)生捕捉或重載。6.6定時(shí)器206TR2:定時(shí)器2啟動(dòng)/停止控制位。TR2=1將啟動(dòng)定時(shí)器2。C/T2:定時(shí)器/計(jì)數(shù)器選擇位。C/T2=0時(shí)用作定時(shí)器,C/T2=1時(shí)用作計(jì)數(shù)器(下降沿觸發(fā))。CP/RL2:捕捉/重載選擇位。CP/RL2=1時(shí),如果EXEN2=1,將在T2EX引腳發(fā)生電平負(fù)跳變時(shí)產(chǎn)生捕捉事件。02/=RLCP時(shí),當(dāng)定時(shí)器2溢出或T2EX引腳發(fā)生電平負(fù)跳變時(shí)(如果EXEN2=1)發(fā)生重載。當(dāng)RCLK或TCLK=1時(shí),這一位將被忽略,定時(shí)器2溢出時(shí)會(huì)被強(qiáng)行自動(dòng)重載。T2MOD寄存器的組成見表6-5。具體說(shuō)明如下。T2OE:定時(shí)器2輸出使能位。DCEN:置位時(shí),定時(shí)器2可設(shè)置成增/減計(jì)數(shù)器。6.6定時(shí)器2066.6定時(shí)器2061.捕捉模式在捕捉模式中,要設(shè)置T2CON中的EXEN2位。如果EXEN2=0,那么定時(shí)器2是一個(gè)16位的定時(shí)器或計(jì)數(shù)器,當(dāng)它溢出時(shí),T2CON中的TF2置位,并可產(chǎn)生中斷。如果EXEN2=1,那么定時(shí)器2的操作是一樣的,但單片機(jī)的T2EX引腳的從1到0的電平變化會(huì)把當(dāng)前TH2和TL2的值分別捕捉到RCAP2H和RCAP2L中。此外,T2EX引腳的電平變化會(huì)使T2CON中的EXF2位置位。EXF2和TF2一樣,都可以產(chǎn)生中斷。2.自動(dòng)重載(增或減計(jì)數(shù))模式在16位自動(dòng)重載模式中,定時(shí)器2可以設(shè)置成增計(jì)數(shù)或減計(jì)數(shù)。這一功能由T2MOD中的DCEN(減計(jì)數(shù)使能)位設(shè)置(見表3.13)。當(dāng)單片機(jī)復(fù)位時(shí),DCEN被置0,定時(shí)器為增計(jì)數(shù)方式。當(dāng)DCEN被置位時(shí),定時(shí)器2可以為增計(jì)數(shù)或減計(jì)數(shù),這要取決于T2EX引腳的值。

當(dāng)DCEN=0時(shí),定時(shí)器2處于增計(jì)數(shù)方式。在這種模式下,如果EXEN2=0,那么定時(shí)器2增計(jì)數(shù)至0xFFFF,當(dāng)定時(shí)器溢出時(shí),把TF2位置位。定時(shí)器溢出會(huì)使定時(shí)器的寄存器值自動(dòng)從RCAP2H和RCAP2L自動(dòng)重載。6.6定時(shí)器206RCAP2H和RCAP2L的值由軟件預(yù)設(shè)。如果EXEN2=1,那么定時(shí)器寄存器的重載除由定時(shí)器溢出觸發(fā)外,還可以被T2EX引腳的從1到0的電平變化觸發(fā)。這一電平變化還會(huì)把EXF2位置位。如果中斷被允許,TF2和EXF2的置位都可以產(chǎn)生中斷。把DCEN位置1使定時(shí)器2可以增計(jì)數(shù)或減計(jì)數(shù)。在這種模式下,T2EX引腳的電平控制計(jì)數(shù)的方向。當(dāng)T2EX引腳為高電平時(shí),定時(shí)器2增計(jì)數(shù)。當(dāng)定時(shí)器計(jì)數(shù)至0xFFFF溢出并把TF2置位,同時(shí)RCAP2H和RCAP2L的值會(huì)被分別自動(dòng)重載至定時(shí)器的寄存器TH2和TL2。當(dāng)T2EX引腳為低電平時(shí),定時(shí)器2減計(jì)數(shù)。當(dāng)TH2和TL2分別與RCAP2H和RCAP2L相等時(shí),定時(shí)器下溢出,TF2置位,0xFFFF被重載至定時(shí)器的寄存器中。在這種模式下,EXF2位在定時(shí)器2上溢出或下溢出時(shí)翻轉(zhuǎn),可以被用作定時(shí)器的第17位。這時(shí)EXF2并不作為中斷的標(biāo)志位。6.6定時(shí)器2063. 波特率發(fā)生器模式通過(guò)設(shè)置T2CON中的TCLK和(或)RCLK位,定時(shí)器2可用作波特率發(fā)生器。注意如果把定時(shí)器2僅用作發(fā)送或接收而把定時(shí)器1用作另一功能,那么發(fā)送和接收的波特率可以不一樣。波特率發(fā)生器模式與自動(dòng)重載模式相似,TH2的溢出會(huì)引起定時(shí)器2的定時(shí)器值被由軟件預(yù)設(shè)的RCAP2H和RCAP2L自動(dòng)重載。串行通信模式1和模式3中的波特率由定時(shí)器2的溢出速率決定:

6.6定時(shí)器206這時(shí),定時(shí)器2可以被設(shè)置作定時(shí)器或計(jì)數(shù)器。在大多數(shù)應(yīng)用中,定時(shí)器2都被設(shè)置作定時(shí)器。當(dāng)定時(shí)器2被設(shè)置作波特率發(fā)生器時(shí),它的定時(shí)器操作是不一樣的。通常,作為一個(gè)定時(shí)器,它每個(gè)機(jī)器周期增1(以振蕩頻率的1/12的速率增1)。但作為波特率發(fā)生器,定時(shí)器每2個(gè)振蕩周期增1。波特率的計(jì)算公式如下:

其中(RCAP2H,RCAP2L)是由RCAP2H和RCAP2L組成的16位無(wú)符號(hào)整數(shù)。在使用要注意TH2的溢出并不會(huì)使TF2置位,也不會(huì)產(chǎn)生中斷。另外,如果EXEN2被置位,T2EX引腳處的從1到0的電平變化會(huì)把EXF2置位,但不會(huì)引起(RCAP2H,RCAP2L)重載到(TH2,TL2)。因此,當(dāng)定時(shí)器2被用作波特率發(fā)生器時(shí),T2EX可以用作額外的外部中斷。當(dāng)定時(shí)器2在波特率發(fā)生器模式下運(yùn)行(TR2=1)時(shí),TH2和TL2不應(yīng)被讀寫。RCAP2寄存器可以讀,但不應(yīng)被寫入。在訪問(wèn)定時(shí)器2的寄存器或RCAP2寄存器前,應(yīng)先把定時(shí)器停掉(把TR2清0)。6.6定時(shí)器206定時(shí)器/計(jì)數(shù)器T2作為波特率發(fā)生器使用時(shí)的編程方法如下:6.6定時(shí)器2064.可編程時(shí)鐘輸出P1.0可用作輸出50%占空比的方波。這一引腳除了常規(guī)的I/O外,還有兩個(gè)其它功能。它可以用作定時(shí)器2的外部時(shí)鐘輸入,也可以用作輸出從61Hz到4MHz(振蕩頻率為16MHz時(shí))的占空比為50%的方波。要把定時(shí)器2設(shè)置成時(shí)鐘發(fā)生器,要把2/TC清0和把T2OE(T2MOD.1)置1。TR2位(T2CON.2)用于開始或停止定時(shí)器。時(shí)鐘的輸出頻率取決于振蕩器頻率和定時(shí)器2的捕捉寄存器(RCAP2H和RCAP2L):在時(shí)鐘發(fā)生器模式下,定時(shí)器2的溢出不會(huì)產(chǎn)生中斷??梢酝瑫r(shí)把定時(shí)器2用作波特率發(fā)生器和時(shí)鐘發(fā)生器。

但是,

波特率和時(shí)鐘頻率不能分別確定,

因?yàn)樗鼈児灿肦CAP2H和RCAP2L。6.6定時(shí)器206【例6-4】用定時(shí)器/計(jì)數(shù)器2從P1.0產(chǎn)生一個(gè)5000Hz的方波,假設(shè)晶振頻率fosc為12MHz。分析過(guò)程:當(dāng)T2MOD的T2OE=1,T2CON的C/T2=0時(shí),T2工作于時(shí)鐘輸出方式。T2溢出信號(hào)自動(dòng)觸發(fā)T2(P1.0)引腳狀態(tài)翻轉(zhuǎn)從P1.0引腳輸出頻率可調(diào)、精度高的方波信號(hào)。解答過(guò)程:溢出后,RCAP2H和RCAP2L寄存器內(nèi)容裝入TH2和TL2寄存器中,重新計(jì)數(shù),以便獲得準(zhǔn)確的溢出信號(hào)。輸出信號(hào)頻率為:6.6定時(shí)器206C語(yǔ)言程序:CONTNTS6.7

看門狗6.7看門狗07看門狗是S5x系列單片機(jī)比C5x系列多出來(lái)的功能之一??撮T狗可以在CPU死機(jī)時(shí)重啟CPU??撮T狗由一個(gè)14位的計(jì)數(shù)器和看門狗寄存器WDTRST組成。單片機(jī)復(fù)位后,看門狗是處于禁用狀態(tài)的。要使能看門狗,就要連續(xù)向WDTRST寄存器寫入0x1e和0xe1。當(dāng)看門狗使能且振蕩器工作時(shí),看門狗計(jì)數(shù)器每個(gè)機(jī)器周期增1。使能看門狗后,除了復(fù)位(硬件復(fù)位或看門狗溢出復(fù)位)外沒(méi)有辦法禁用看門狗。當(dāng)看門狗計(jì)數(shù)器溢出時(shí),它會(huì)在RST引腳產(chǎn)生一個(gè)高電平脈沖,迫使單片機(jī)復(fù)位。當(dāng)看門狗使能后,程序必須不斷地向WDTRST寫0x1e和0xe1以避免看門狗溢出(通常稱為“喂狗”)??撮T狗的14位計(jì)數(shù)器在數(shù)到16383(0x3FFF)后溢出,這時(shí)單片機(jī)會(huì)復(fù)位。這意味著程序必須最多16383機(jī)器周期內(nèi)喂一次狗。CONTNTS6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)08利用單片機(jī)的T0、T1的定時(shí)/計(jì)數(shù)功能,完成對(duì)輸入的信號(hào)的頻率進(jìn)行測(cè)量,測(cè)量的結(jié)果通過(guò)8位動(dòng)態(tài)數(shù)碼管顯示出來(lái)。這里要求實(shí)現(xiàn)對(duì)0~200KHz的信號(hào)頻率進(jìn)行準(zhǔn)確測(cè)量,測(cè)量誤差不超過(guò)±1Hz。頻率計(jì)的功能,是測(cè)出1s內(nèi)的輸入信號(hào)的周期個(gè)數(shù),再用數(shù)字的方式顯示出來(lái),也就是需要完成定時(shí)1s、對(duì)輸入的脈沖計(jì)數(shù)和數(shù)字顯示的硬件電路和相應(yīng)的程序。6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)086.8.1

應(yīng)用環(huán)境數(shù)字頻率計(jì)是一種用十進(jìn)制數(shù)字顯示被測(cè)信號(hào)頻率的數(shù)字測(cè)量?jī)x器。根據(jù)電信號(hào)的頻率的定義,就是在1s鐘內(nèi)信號(hào)變化的周期數(shù)。在一個(gè)單片機(jī)系統(tǒng)中,為了實(shí)現(xiàn)頻率的測(cè)量,就是要對(duì)外部信號(hào)進(jìn)行計(jì)數(shù),每到1s時(shí),將計(jì)數(shù)所得的數(shù)值送到顯示器上。6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)086.8.2實(shí)現(xiàn)過(guò)程1.硬件電路分析從設(shè)計(jì)要求可以得出,定時(shí)1s,可以通過(guò)單片機(jī)內(nèi)部的定時(shí)器來(lái)完成,不需要額外的硬件電路。同樣,對(duì)脈沖的計(jì)數(shù)也可能用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器來(lái)完成,也不需要另外的硬件電路,只需要將外部的計(jì)數(shù)脈沖連接對(duì)應(yīng)的引腳上,本訓(xùn)練中選擇T0作為計(jì)數(shù)用,所以將計(jì)數(shù)脈沖連接到對(duì)應(yīng)的T0引腳(P3.4,第二功能)。顯示頻率的數(shù)字,可以采用各種顯示器件,如LED、LCD等,本設(shè)計(jì)中采用LED的動(dòng)態(tài)顯示電路,P0口接七段顯示器的段碼輸入端,P2口接位碼控制端。輸出脈沖的P1.0(采用定時(shí)器2產(chǎn)生脈沖)作為信號(hào)源。(可以參考后面的顯示器設(shè)計(jì)一章)6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)082.程序設(shè)計(jì)分析通過(guò)任務(wù)分析,要求單片機(jī)要完成三個(gè)實(shí)時(shí)任務(wù),分別是:對(duì)輸入信號(hào)周期進(jìn)行計(jì)數(shù)、1s定時(shí)、動(dòng)態(tài)顯示,以及頻率計(jì)算及頻率轉(zhuǎn)換為顯示數(shù)據(jù)。要同時(shí)完成三個(gè)實(shí)時(shí)任務(wù),只有使用中斷的方式進(jìn)行任務(wù)分割,可以用定時(shí)器T0、T1及其中斷服務(wù)程序和主程序來(lái)分別完成每一個(gè)任務(wù)。其中,動(dòng)態(tài)顯示因人的視覺(jué)的不敏感,對(duì)實(shí)時(shí)要求最低,因而使用主程序完成,同時(shí)將數(shù)據(jù)的運(yùn)算也放在主程序中。剩下的兩個(gè)任務(wù)分別用T0完成輸入信號(hào)的計(jì)數(shù)和T1完成1s的定時(shí)。(1)定時(shí)1sT1工作在定時(shí)狀態(tài)下,最大定時(shí)時(shí)間約為65ms,達(dá)不到1s的定時(shí),所以采用定時(shí)50ms,共定時(shí)20次,即可完成1s的定時(shí)功能。因電路晶振fOSC=11.0592MHz,所以T1的初值的裝入語(yǔ)句如下:6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)08每定時(shí)1s鐘時(shí)間到了,就停止T0的計(jì)數(shù),而從T0的計(jì)數(shù)單元中讀取計(jì)數(shù)的數(shù)值,然后進(jìn)行數(shù)據(jù)處理,送到數(shù)碼管顯示出來(lái)。定時(shí)器1的中斷服務(wù)程序如下所示:6.8實(shí)踐訓(xùn)練—簡(jiǎn)易頻率計(jì)設(shè)計(jì)08(2)輸入的脈沖計(jì)數(shù)T0是工作在計(jì)數(shù)狀態(tài)下,對(duì)輸入的頻率信號(hào)進(jìn)行計(jì)數(shù)。在本任務(wù)中,由于單片機(jī)的工作頻率fOSC=11.0592MHz,工作在計(jì)數(shù)狀態(tài)

溫馨提示

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