《單片機系統(tǒng)設計及工程應用》課件第4章_第1頁
《單片機系統(tǒng)設計及工程應用》課件第4章_第2頁
《單片機系統(tǒng)設計及工程應用》課件第4章_第3頁
《單片機系統(tǒng)設計及工程應用》課件第4章_第4頁
《單片機系統(tǒng)設計及工程應用》課件第4章_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

4.151系列單片機的中斷系統(tǒng)4.2定時器/計數(shù)器習題44.1.1中斷的概念

所謂中斷,是指計算機在執(zhí)行某一程序的過程中,由于計算機系統(tǒng)內(nèi)部或外部的某種原因,CPU必須暫時停止現(xiàn)行程序的執(zhí)行,而自動轉(zhuǎn)去執(zhí)行預先安排好的處理該事件的

服務子程序,待處理結(jié)束之后,再回來繼續(xù)執(zhí)行被暫停程序的過程。實現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。4.151系列單片機的中斷系統(tǒng)中斷系統(tǒng)是計算機的重要組成部分。實時控制、故障自動處理、計算機與外部設備間傳送數(shù)據(jù)及實現(xiàn)人機對話通常采用中斷方式。中斷系統(tǒng)需要解決以下基本問題:

(1)中斷源:中斷請求信號的來源。包括中斷請求信號的產(chǎn)生及該信號怎樣被CPU有效地識別。要求中斷請求信號產(chǎn)生一次,只能被CPU接收處理一次,不能一次中斷申請被CPU多次響應,這就涉及到中斷請求信號的及時撤除問題。

(2)中斷響應與返回:CPU采集到中斷請求信號后,怎樣轉(zhuǎn)向特定的中斷服務子程序及執(zhí)行完中斷服務子程序怎樣返回被中斷的程序繼續(xù)執(zhí)行。中斷響應與返回的過程中涉及到CPU響應中斷的條件、現(xiàn)場保護、現(xiàn)場恢復等問題。

(3)優(yōu)先級控制:一個計算機應用系統(tǒng),特別是計算機實時測控系統(tǒng),往往有多個中斷源,各中斷源的重要程度又有輕重緩急之分。與人處理問題的思路一樣,希望重要緊急的事件優(yōu)先處理,而且如果當前處于正在處理某個事件的過程中,有更重要、更緊急的事件到來,就應當暫停當前事件的處理,轉(zhuǎn)去處理新事件。這就是中斷系統(tǒng)優(yōu)先級控制所要解決的問題。中斷優(yōu)先級的控制形成了中斷嵌套。51系列單片機中斷系統(tǒng)原理及組成如圖4.1所示。圖4.1

51系列單片機中斷系統(tǒng)原理及組成圖4.1.2中斷源

中斷源是指向CPU發(fā)出中斷請求的信號來源,中斷源可以人為設定,也可以為響應突發(fā)性隨機事件。51系列單片機有5個中斷源,見表4.1,其中兩個是外部中斷源,另外三個屬于內(nèi)部中斷。(注:52子系列有6個中斷源,增加了一個定時器/計數(shù)器T2的溢出中斷。)表4.1

MCS-51單片機的中斷源

1.外部中斷

外部中斷源有兩個,外部中斷0(

)和外部中斷1(

)。外部中斷請求有兩種觸發(fā)方式:電平觸發(fā)及邊沿觸發(fā)。這兩種觸發(fā)方式可以通過對特殊功能寄存器TCON(TCON稱為定時器/計數(shù)器控制寄存器)編程來選擇。下面給出TCON的位定義格式,并對與中斷有關的位予以說明。

定時器/計數(shù)器控制寄存器TCON:地址為88H

IT0:外部中斷0的觸發(fā)方式控制位。若IT0被設置為0,則選擇外部中斷0為電平觸發(fā)方式,即IT0=0時,低電平有效;若IT0被設置為1,則選擇外部中斷0為邊沿觸發(fā)方式,即IT0=1時,負沿有效。

IT1:外部中斷1的觸發(fā)方式控制位。若IT1被設置為0,則選擇外部中斷1為電平觸發(fā)方式,即IT1=0時,低電平有效;若IT1被設置為1,則選擇外部中斷1為邊沿觸發(fā)方式,即IT1=1時,負沿有效。

IE0:外部中斷0的中斷請求標志位。IE0=1,表示請求中斷;IE0=0,表示沒有請求中斷。當IT0=0時,外部中斷0為電平觸發(fā)方式。在這種方式下,CPU在每個機器周期的S5P2期間對(P3.2)引腳采樣。若為低電平,則認為有中斷申請,隨即使IE0標志置位,并以此向CPU請求中斷;若為高電平,則認為無中斷申請,或中斷申請已撤除,隨即使IE0標志復位。當IT0=1時,即外部中斷0為邊沿觸發(fā)方式時,若第一個機器周期采樣到引腳為高電平,第二個機器周期采樣到

引腳為低電平時,由硬件置位IE0,并以此向CPU請求中斷。當CPU響應中斷轉(zhuǎn)向中斷服務程序時,由硬件自動將IE0清零。

IE1:外部中斷1的中斷請求標志位,其作用與IE0類似。當IT1=0時,外部中斷1為電平觸發(fā)方式。在這種方式下,CPU在每個機器周期的S5P2期間對(P3.3)引腳采樣,若為低電平,則認為有中斷申請,隨即使IE1標志置位,并以此向CPU請求中斷;若為高電平,則認為無中斷申請,或中斷申請已撤除,隨即使IE1標志復位。

當IT1=1時,即外部中斷1為邊沿觸發(fā)方式時。若第一個機器周期采樣到引腳為高電平,第二個機器周期采樣到

引腳為低電平時,由硬件置位IE1,并以此向CPU請求中斷。當CPU響應中斷轉(zhuǎn)向中斷服務程序時,由硬件自動將IE1清零。若把外部中斷設置為邊沿觸發(fā)方式,CPU在每個機器周期都采樣。為了保證CPU能檢測到負跳變,輸入到引腳上的高電平與低電平至少應保持1個機器周期。對于電平觸發(fā)的外部中斷,由外部中斷的輸入信號直接控制中斷請求標志位IE0(IE1),CPU響應中斷后不能由硬件自動清除IE0(IE1)標志,也不能由軟件清除IE0(IE1)標志。因此,在中斷返回之前,需要外接電路來撤消中斷請求輸入引腳上的低電平,否則將再次中斷,導致一次中斷申請被CPU多次響應而出錯。圖4.2是電平觸發(fā)方式下外部中斷的請求、撤除電路。外部中斷請求信號通過D觸發(fā)器加到單片機X引腳上。當外部中斷請求信號使D觸發(fā)器的CLK端發(fā)生負跳變時,由

于D端接地,Q端輸出0,向單片機發(fā)出中斷請求。CPU響應中斷后,利用一根口線,如P1.0作應答線,用P1.0控制D觸發(fā)器的置1端。在中斷服務程序中用以下兩條指令來撤除中斷請求:

ANLP1.0#0FEH

ORLP1.0#01H第一條指令使P1.0為0,而P1口其他各位的狀態(tài)不變。由于P1.0與直接置1端相連,因此D觸發(fā)器Q=1,撤除了中斷請求信號。第二條指令將P1.0變成1,即置1端為1處于無效狀態(tài),使以后產(chǎn)生的新的外部中斷請求信號又能向單片機申請中斷。圖4.2外部中斷請求、撤除的電路

2.內(nèi)部中斷

內(nèi)部中斷是單片機芯片內(nèi)部產(chǎn)生的中斷。51系列單片機(51子系列)的內(nèi)部中斷有定時器/計數(shù)器T0、T1的溢出中斷,串行口的發(fā)送/接收中斷。當定時器/計數(shù)器T0、T1計數(shù)溢出時,由硬件自動置位TCON的TF0(定時器/計數(shù)器T0的中斷標志位)或TF1(定時器/計數(shù)器T1的中斷標志位),向CPU申請中斷。CPU響應中斷而轉(zhuǎn)向中斷服務程序時,由硬件自動將TF0或TF1清零,即CPU響應中斷后能自動撤除中斷請求信號。當串行口發(fā)送完或接收完一幀信息時,由接口硬件自動置位SCON的TI(發(fā)送中斷請求標志位)或RI(接收中斷請求標志位),以此向CPU申請中斷,CPU響應中斷后,接口硬件不能自動將TI或RI清零,即CPU響應中斷后不能自動撤除中斷請求信號,用戶必須采用軟件方法將TI或RI清零,來撤除中斷請求信號。4.1.3中斷控制

1.中斷允許控制

MCS-51單片機中沒有專設的開中斷和關中斷指令,對各中斷源的中斷開放或關閉是由內(nèi)部的中斷允許寄存器IE的各位來控制的。

中斷允許寄存器IE:地址為A8H

EX0:外部中斷0的中斷允許位。EX0=0,禁止外部中斷0中斷;EX0=1允許外部中斷0中斷。

ET0:定時器/計數(shù)器T0的溢出中斷允許位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。

EX1:外部中斷1的中斷允許位。EX1=0,禁止外部中斷1中斷;EX1=1,允許外部中斷1中斷。

ET1:定時器/計數(shù)器T1的溢出中斷允許位。ET1=0,禁止T1中斷;ET1=1,允許T1中斷。

ES:串行口中斷允許位。ES=0,禁止串行口中斷;ES=1允許串行口中斷。

ET2:定時器/計數(shù)器T2的溢出中斷允許位,只用于52子系列,51子系列無此位。ET2=0,禁止T2中斷;ET2=1,允許T2中斷。

EA:中斷允許總控位。EA=0,禁止所有的中斷請求;EA=1,開放所有的中斷請求,

但是否允許各中斷源的中斷的中斷請求,還要取決于各中斷源的中斷允許控制位的狀態(tài)。

注意:單片機系統(tǒng)復位后,IE中各中斷允許位均被清0,即禁止所有中斷。

2.中斷優(yōu)先級控制

51單片機的中斷源可設置為兩種中斷優(yōu)先級:高優(yōu)先級(優(yōu)先級)中斷和低優(yōu)先級(普通級)中斷,從而可實現(xiàn)多級中斷嵌套。中斷響應遵循如下規(guī)則:

(1)先高后低——對于不同優(yōu)先級的中斷源同時請求中斷時,CPU首先響應優(yōu)先級最高的中斷請求。

(2)約定順序——相同優(yōu)先級的中斷源同時請求中斷時,按約定順序響應。

(3)停低轉(zhuǎn)高——正在處理低優(yōu)先級中斷而又有高優(yōu)先級中斷源請求中斷時,中斷正在進行的操作,轉(zhuǎn)去響應高優(yōu)先級中斷,處理完成后再返回繼續(xù)處理低優(yōu)先級中斷。

(4)高不理低——CPU正在處理高優(yōu)先級中斷而又有低優(yōu)先級中斷源請求中斷時,繼續(xù)處理高優(yōu)先級中斷,而不理會低優(yōu)先級的中斷請求,待處理完高優(yōu)先級中斷后才響應低

優(yōu)先級的中斷請求。

中斷響應的上述規(guī)則,完全與現(xiàn)今社會中的上下級處理事務相類似。

專用寄存器IP為中斷優(yōu)先級控制寄存器,鎖存各中斷源優(yōu)先級控制位,IP中的每一位均可由軟件置1或清0,用來確定每個中斷源的中斷優(yōu)先級。置1表示對應中斷源為高優(yōu)先級中斷,清0表示低優(yōu)先級。其格式如下:中斷優(yōu)先級控制寄存器IP:地址為B8H

PX0:外部中斷0的中斷優(yōu)先級控制位。

PT0:定時器/計數(shù)器T0的中斷優(yōu)先級控制位。

PX1:外部中斷1的中斷優(yōu)先級控制位。

PT1:定時器/計數(shù)器T1的中斷優(yōu)先級控制位。

PS:串行口的中斷優(yōu)先級控制位。

PT2:定時器/計數(shù)器T2的中斷優(yōu)先級控制位,只用于52子系列。

注意:

(1)當系統(tǒng)復位后,IP全部清0,所有中斷源均設定為低優(yōu)先級中斷。

(2)如果幾個同一優(yōu)先級的中斷源同時向CPU申請中斷,則CPU通過內(nèi)部硬件查詢邏輯,按自然優(yōu)先級約定順序確定先響應哪個中斷請求。自然中斷優(yōu)先級見表4.2。表4.2自然中斷優(yōu)先級4.1.4中斷響應

1.中斷響應的條件

單片機響應中斷時必須同時滿足以下5個條件:

(1)有中斷源發(fā)出中斷請求。

(2)中斷總允許位EA=1(CPU開中斷)。

(3)申請中斷的中斷源對應的中斷允許控制位為1。

(4)當前指令執(zhí)行完。正在執(zhí)行RETI中斷返回指令或訪問專用寄存器IE和IP的指令時,CPU執(zhí)行完該指令和緊隨其后的另一條指令后才會響應中斷。

(5)CPU沒有響應同級或高優(yōu)先級的中斷。

滿足以上基本條件,CPU才會響應中斷。

2.中斷響應過程

CPU響應中斷后,由硬件自動執(zhí)行如下的功能操作:

(1)保護斷點,即把程序計數(shù)器PC的內(nèi)容壓入堆棧保存

(2)清內(nèi)部硬件可清除的中斷請求標志位(IE0、IE1、TF0、TF1)。

(3)把被響應的中斷服務程序入口地址送入PC,從而轉(zhuǎn)向相應的中斷服務程序執(zhí)行。各中斷服務程序的入口地址見表4.3。表4.3

51系列單片機中斷入口地址

3.中斷響應時間

所謂中斷響應時間,是指CPU檢測到中斷請求信號到轉(zhuǎn)入中斷服務程序入口所需要的機器周期數(shù)。了解中斷響應時間對設計實時測控系統(tǒng)有重要的指導意義。

51系列單片機響應中斷的最短時間為3個機器周期。若CPU檢測到中斷請求信號時間正好是一條指令的最后一個機器周期,則不需等待就可以立即響應。所謂響應中斷,就

是由內(nèi)部硬件執(zhí)行一條長調(diào)用指令,需要2個機器周期,加上檢測需要1個機器周期,一共需要3個機器周期才開始執(zhí)行中斷服務程序。中斷響應的最長時間由下列情況所決定:若中斷檢測時正在執(zhí)行RETI或訪問IE或IP指令的第一個機器周期,則包括檢測在內(nèi)需要2個機器周期(以上3條指令均需2個機器周期);若緊接著要執(zhí)行的指令恰好是執(zhí)行時間最長的乘除法指令,則其執(zhí)行時間均為4個機器周期;再用2個機器周期執(zhí)行一條長調(diào)用指令才轉(zhuǎn)入中斷服務程序。這樣,總共需要8個機器周期。

因此,中斷響應時間一般為3~8個機器周期。4.1.5中斷系統(tǒng)的應用

1.必要工作

為了使讀者對中斷系統(tǒng)的應用有一個全面的了解,我們簡單歸納一下使用中斷系統(tǒng)時要做的工作:

(1)明確任務,確定采用哪些中斷源。

(2)確定中斷源觸發(fā)方式。

(3)中斷優(yōu)先級分配。

(4)中斷源及中斷標志位的撤除方法。

(5)中斷服務程序要完成的任務。

(6)中斷服務程序入口地址的設置。

(7)中斷允許設置。

2.相關寄存器

我們對中斷系統(tǒng)的設置實質(zhì)上就是對相關寄存器功能位的設置。與中斷系統(tǒng)相關的寄存器有:中斷允許寄存器IE、中斷優(yōu)先級控制寄存器IP、串行口控制寄存器SCON、

中斷標志位及外中斷觸發(fā)方式設置借助于定時器/計數(shù)器控制寄存器TCON,各個寄存器相關位的功能及使用方法前面已有介紹,讀者只需按要求設置即可,這里不再贅述。

3.中斷系統(tǒng)應用舉例

例4.1.1

利用中斷方式實現(xiàn)輸入/輸出。在圖4.3中,每按一次P按鈕便在的輸入端產(chǎn)生一個負脈沖,向CPU請求中斷,響應中斷后,讀取開關S0~S3上的數(shù)據(jù),輸出到發(fā)光二極管L0~L3顯示。當開關閉合時,對應的發(fā)光管點亮。

解主程序和中斷服務子程序如下:

ORG0000H

LJMPMAIN ;上電自動轉(zhuǎn)向主程序

ORG0003H

LJMPINT0SUB;指向INT0的中斷服務子程序

ORG0040HMAIN: SETBIT0 ;選擇INT0為負沿觸發(fā)方式

SETBEX0 ;允許INT0中斷

SETBEA ;開CPU中斷

HERE: LJMPHERE ;等待中斷

;INT0的中斷服務子程序INT0SUB:MOVP1,#0FH;數(shù)據(jù)送P1口,設置P1.0~P1.3

;為輸入

MOVA,P1 ;讀S0~S3上的數(shù)據(jù)

SWAP A ;A的低4位與高4位交換

ORLA,#0FH

MOVP1,A ;數(shù)據(jù)送L0~L3

RETI ;中斷返回

END圖4.3利用中斷方式實現(xiàn)輸入/輸出

例4.1.2

利用中斷實現(xiàn)單步操作。

解可利用圖4.4的電路實現(xiàn)單步操作,把一個外部中斷(設為)設置為電平觸發(fā)方式,且允許INT1中斷。其中斷服務程序的末尾寫上如下幾條指令:

JNBP3.3,$ ;在INT1變高前原地等待

JBP3.3,$ ;在INT變低前原地等待

RETI ;返回并執(zhí)行主程序的一條指令圖4.4利用中斷實現(xiàn)單步操作平時,按鈕P未按下時,保持低電平,則CPU就進入外部中斷1服務程序,由于有上述幾條指令,它就會停在JNB處,原地等待。當P按下一次,端出現(xiàn)一個正脈沖(由低到高,再到低)時,程序就會往下執(zhí)行,執(zhí)行RETI后,將返回到主程序,往下執(zhí)行主程序的一條指令,然后又立即響應中斷,以等待端出現(xiàn)的下一個正脈沖。這樣,在

端每出現(xiàn)一個正脈沖,主程序就執(zhí)行一條指令,實現(xiàn)了單步執(zhí)行的目的。

例4.1.3

多中斷源擴展。

解51單片機有兩個外部中斷輸入端,當有2個以上中斷源時,它的中斷輸入端就不夠了。此時,可以采用中斷與查詢相結(jié)合的方法來實現(xiàn)多中斷源擴展。圖4.5中每個中斷源都接在同一個外部中斷輸入端上,同時利用P1口作為在多中斷源情況下各中斷源的識別。當擴展中斷源為高電平時,輸入端為低電平,向CPU請求中斷。響應中斷后,采用軟件查詢的方法進行相應的中斷服務,的中斷服務程序如下:

INT0SUB:

PUSHA;/INT0的中斷服務程序

JBP1.0,ZD1;軟件查詢

JBP1.1,ZD2

JBP1.2,ZD3

JBP1.3,ZD4GOBACK:POPACC

RETI ;中斷返回

ZD1:…

;擴展中斷源1的中斷服務程序

LJMPGOBACK

ZD2:…

;擴展中斷源2的中斷服務程序

LJMPGOBACK

LJMPGOBACK

ZD3:… ;擴展中斷源3的中斷服務程序

LJMPGOBACK

ZD4:…

;擴展中斷源4的中斷服務程序LJMPGOBACK圖4.5多中斷源擴展4.2.1定時器/計數(shù)器的基本原理

1.定時器/計數(shù)器的特點

對于定時器/計數(shù)器來說,不管是獨立的定時器芯片還是單片機內(nèi)的定時器,大都具有以下特點:

(1)定時器/計數(shù)器有多種工作方式,可以是計數(shù)方式也可以是定時方式。

4.2定時器/計數(shù)器

(2)定時器/計數(shù)器的計數(shù)值是可變的,當然計數(shù)的最大值是有限的,這取決于計數(shù)器的位數(shù)。計數(shù)的最大值也就確定了作為定時器時的最大定時范圍。

(3)能夠在到達設定的定時或計數(shù)值時發(fā)出中斷申請,以便實現(xiàn)定時控制。

51單片機(51子系列)中的兩個16位定時器/計數(shù)器T0和T1,它們均可作為定時器或計數(shù)器使用,其原理如圖4.6所示。圖4.6定時器/計數(shù)器原理框圖

2.定時器/計數(shù)器工作原理

51單片機的定時器/計數(shù)器采用加法計數(shù)方式工作。兩個定時器/計數(shù)器T0和T1的內(nèi)部均有一個16位加法計數(shù)器(TH0,TL0和TH1,TL1),用來完成加1計數(shù)。當加法計數(shù)器產(chǎn)生溢出時,硬件自動產(chǎn)生溢出中斷標志信號,可向CPU申請中斷。由于加法計數(shù)器的初值可以由程序設定,因此其計數(shù)/定時范圍就可利用軟件來編程。當處于計數(shù)方式時,定時器/計數(shù)器對加在T0(P3.4)、T1(P3.5)引腳的脈沖信號進行加1計數(shù),我們可以通過設置不同的初值來控制計數(shù)次數(shù)。

當處于定時方式時,定時器/計數(shù)器對內(nèi)部機器周期Tc進行加1計數(shù),因此其計數(shù)最小單位就是1個機器周期。例如,當我們的應用系統(tǒng)采用的時鐘頻率為12MHz時,其機器周期

Tc=1μs,其基本定時單位就是1μs。

在定時/計數(shù)過程中,可以用指令將加法計數(shù)器的值讀回CPU。4.2.2定時器/計數(shù)器的控制方式

1.定時器方式寄存器TMOD

TMOD稱為定時器方式寄存器,用來設置定時器/計數(shù)器的工作方式、是否需要門控信號等,其地址為89H。定時器/計數(shù)器T0、T1都有4種工作方式,可通過對方式寄存器TMOD設置來選擇工作方式。TMOD的低4位用于設置定時器/計數(shù)器T0的工作方式,高4位用于設置定時器/計數(shù)器1的工作方式,各位定義如圖4.7所示。

M1、M0:工作方式選擇位,其值與工作方式對應關系見表4.4。圖4.7

TMOD功能圖表4.4定時器/計數(shù)器工作方式

C/T:功能選擇位,當C/T=1時為計數(shù)方式;當C/T=0時為定時方式。

GATE:門控位,用于控制定時器/計數(shù)器的啟動是否受外部中斷請求信號的影響。

(1)對定時器/計數(shù)器0來講,當GATE=0時,只要定時器控制寄存器TCON中的軟件控制位TR0=1,就可啟動定時器T0,與外部中斷請求信號無關。如果GATE=1,必須使軟件控制位TR0=1,且為高電平方可啟動定時器T0。即定時器/計數(shù)器T0的啟動要受外部中斷請求信號的影響,只有在沒有外部中斷請求信號的情況下才允許啟動定時器T0。

(2)對定時器/計數(shù)器1來講,當GATE=0時,只要TR1=1即可啟動定時器T1,與外部中斷請求信號無關。如果GATE=1,必須使TR1=1,且為高電平方可啟動定時器T1。即定時器/計數(shù)器T1的啟動要受外部中斷請求信號的影響,只有在沒有外部中斷請求信號的情況下才允許啟動定時器T1。

注意:與其他寄存器(如TCON、IP、IE等)不同,定時器方式寄存器TMOD不能進行位尋址。只能用字節(jié)地址向TMOD中寫命令字來設置T1和T0的工作方式。復位時,TMOD所有位均清0。

2.定時器的控制寄存器TCON

定時器的控制寄存器TCON地址為88H,可以進行位尋址。用來控制定時器/計數(shù)器開始定時/計數(shù)、設置中斷及中斷響應等。TCON控制寄存器各位定義如下:

TF0(TF1):定時器/計數(shù)器T0(T1)的中斷標志位。當T0(T1)計數(shù)溢出時,由硬件置位,在允許中斷的情況下,向CPU發(fā)出中斷請求信號,CPU響應中斷轉(zhuǎn)向中斷服務程序

時,由硬件自動將該位清零。

TR0(TR1):T0(T1)的啟動控制位。當TR0(TR1)=1時,可啟動T0(T1);當TR0(TR1)=0時,關閉T0(T1)。該位由軟件進行設置,一般情況下,在定時器/計數(shù)器初始化完成后,設

置為不需門控時,用指令將該位置為1即可啟動T0(T1)。

IE0(IE1):外部中斷0(外部中斷1)請求標志位。

IT0(IT1):外部中斷0(外部中斷1)觸發(fā)方式選擇位。4.2.3定時器/計數(shù)器的工作方式

1.工作方式1

將方式寄存器TMOD的方式選擇位M1M0設置為01時,定時器/計數(shù)器設定為方式1,由TH0和TL0(或TH1和TL1)構成了16位的計數(shù)器。圖4.8給出了定時器T0在方式1時的工作原理框圖,T1在方式1時的工作原理與此類似。圖4.8定時器/計數(shù)器0方式1的邏輯結(jié)構如果C/T=1,圖4.8中開關S1自動地接在下面,定時器/計數(shù)器工作在計數(shù)狀態(tài),TH0、TL0構成了一個16位的加法計數(shù)器,它對T0(P3.4)引腳上的外部脈沖計數(shù)。當計數(shù)到全1(FFFFH),再來一個外部脈沖便計數(shù)到0,計數(shù)器溢出使TF0=1,以此作為定時器/計數(shù)器的中斷標志向CPU請求中斷。在方式1下,計數(shù)長度為16位二進制數(shù),最大計數(shù)值M=216=65536。如果要讓計數(shù)器計數(shù)N次,則事先應向計數(shù)器中寫入的計數(shù)初值X為計數(shù)初值X=最大計數(shù)值M-計數(shù)次數(shù)

N=216-N=65536-N

(4.1)在式(4.1)中,M是計數(shù)器的最大計數(shù)值,N為計次數(shù),X是應寫入TH0、TL0的計數(shù)初值。例如,讓計數(shù)器計數(shù)5次,計數(shù)次數(shù)N=5,則計數(shù)初值X為

計數(shù)初值X=216-N=65536-5=65531=FFFBH

此例中應向TH0寫入FFH、向TL0寫入FBH才可實現(xiàn)5次計數(shù)。

當計數(shù)初值X=65535(FFFFH)時,只計數(shù)1次便產(chǎn)生溢出中斷,所以65535是方式1時的最小計數(shù)初值;X=0時,計數(shù)器從1計數(shù)到65536,計數(shù)器溢出請求中斷,所以0是方式1時的最大計數(shù)初值,最大計數(shù)次數(shù)N=65536。

CPU在每個機器周期的S5P2期間采樣T0(P3.4)引腳的輸入信號,若一個機器周期的采樣值為1,下一個機器周期的采樣值為0,則計數(shù)器加1。由于識別一個高電平到低

電平的跳變需兩個機器周期2Tc,因此外部計數(shù)脈沖的頻率應低于1/(2Tc)=fosc/24,且高電平與低電平的延續(xù)時間均不得小于1個機器周期。

C/T=0時為定時器方式,圖4.8中開關S1接在上面,加法計數(shù)器對機器周期Tc計數(shù),每個機器周期計數(shù)器加1。根據(jù)計數(shù)次數(shù)N便可計算出定時時間,定時時間由下式確定:

T=N×Tc=(65536-X)Tc

(4.2)式中Tc為單片機的機器周期。如果振蕩頻率fosc=12MHz,則Tc=1μs,定時范圍為1~65536μs。

定時器/計數(shù)器0的啟動或停止受3個條件的制約:控制寄存器TCON中的TR0位、門控位GATE及外部中斷請求信號INT0。當GATE=0時,只要用軟件置TR0=1,圖4.8中開關S2閉合,定時器/計數(shù)器就開始工作;當置TR0=0時,第二個開關分開,定時器/計數(shù)器停止工作。所以把TR0稱為定時器/計數(shù)器0的啟動控制位。

GATE=1為門控方式。此時,僅當TR0=1且T0(P3.4)引腳上出現(xiàn)高電平(即無外部中斷請求信號)時,開關S2才閉合,定時器/計數(shù)器開始工作。如果引腳上出現(xiàn)低電平(即有外部中斷請求信號),則停止工作。所以,門控方式下,定時器/計數(shù)器的啟動受外部中斷請求的影響,常用來測量引腳上出現(xiàn)正脈沖的寬度。

2.工作方式0

將方式寄存器TMOD的方式選擇位M1M0設置為00時,定時器/計數(shù)器設定為工作方式0,由TH的8位和TL的低5位構成了13位的計數(shù)器。圖4.9給出了定時器T1在方式0時的工作原理框圖,定時器T0在方式0時的工作原理與此類似。圖4.9定時器/計數(shù)器1方式0的邏輯結(jié)構如果C/T=1,定時器/計數(shù)器1工作在計數(shù)狀態(tài),則由TH1、TL1構成的13位加法計數(shù)器對T1(P3.5)引腳上的外部脈沖計數(shù)。當計數(shù)到全1(即8191或1FFFH),再來一個外部脈沖便計數(shù)到0,計數(shù)器溢出使TF1=1,以此作為定時器/計數(shù)器的中斷標志。

在方式0下,計數(shù)長度為13位二進制數(shù),最大計數(shù)值M=213=8192。如果要讓計數(shù)器計數(shù)N次,則應向計數(shù)器中寫入的計數(shù)初值X為

計數(shù)初值X=最大計數(shù)值M-計數(shù)次數(shù)N

=213-N=8192-N(4.3)例如,設置計數(shù)器計數(shù)1000次,計數(shù)次數(shù)N=1000,則計數(shù)初值X為

計數(shù)初值X=213-N=8192-1000=7192

=11100000,11000B

但應注意,上述13位計數(shù)初值的高8位寫入TH1,而13位計數(shù)初值的低5位二進制數(shù)前面要加3個0,湊成8位二進制數(shù)后寫入TL1。此例中應向TH1寫入的數(shù)據(jù)是:

11100000B(E0H),向TL1寫入的數(shù)據(jù)是:00011000B(18H),即計數(shù)初值X=E018H。

在方式0下,X=8191時是最小計數(shù)初值;X=0時,計數(shù)器從1計數(shù)到8192,X=0是方式0時的最大計數(shù)初值,最大計數(shù)次數(shù)N=8192。如果C/T=0,為定時器方式,加法計數(shù)器對機器周期Tc計數(shù),每個機器周期計數(shù)器加1。根據(jù)計數(shù)次數(shù)N便可計算出定時時間,定時時間由下式確定:

T=N×Tc=(8192-X)Tc

(4.4)

式中Tc為單片機的機器周期。如果振蕩頻率fosc=12MHz,則Tc=1μs,定時范圍為1~8192μs。

定時器/計數(shù)器1的啟動或停止受3個條件的制約:控制寄存器TCON中的TR1位、門控位GATE及外部中斷請求信號。

3.工作方式2

將方式寄存器TMOD的方式選擇位M1M0設置為10時,定時器/計數(shù)器設定為工作方式2,作為自動重新裝入初值的8位定時器/計數(shù)器工作方式,通常用作為方波發(fā)生器。

方式0和方式1都必須在每次定時/計數(shù)結(jié)束后重新裝入初值,而方式2是一種自動裝入初值的工作方式。方式2在程序初始化時,TL0和TH0由軟件賦予相同的計數(shù)初值。

TL0用作加1計數(shù),TH0用來保存初值,一旦TL0計數(shù)溢出,TF0將被置位,同時,TH0中的初值會自動重新裝入TL0,從而進入新一輪計數(shù),如此循環(huán)。用方式2來產(chǎn)生方波

非常方便,通常被用來作為串行通信口的波特率發(fā)生器,其內(nèi)部結(jié)構如圖4.10所示。

圖中以T0為描述對象,T1的工作原理與此類似。圖4.10定時器/計數(shù)器0方式2的邏輯結(jié)構在工作方式2時,計數(shù)范圍為1~256。計數(shù)器的計數(shù)初值和定時時間分別由下式確定:

計數(shù)初值X=最大計數(shù)值M-計數(shù)次數(shù)N

=28-N=256-N(4.5)

T=N×Tc=(256-X)Tc(4.6)4.工作方式3

將方式寄存器TMOD的方式選擇位M1M0設置為11時,定時器/計數(shù)器設定為工作方式3,其邏輯結(jié)構如圖4.11所示。圖4.11定時器/計數(shù)器0方式3的邏輯結(jié)構在工作方式3時,定時器T0被分解成兩個獨立的8位計數(shù)器TL0和TH0。其中,TL0占用原定時器T0的控制位和中斷標志位:GATE、TR0和TF0,也占用原定時器0的引腳T0(P3.4)

和INT0(P3.2)。除計數(shù)位數(shù)不同于方式0、方式1外,其功能、操作與方式0、方式1完全相同,可定時亦可計數(shù)。TH0占用原T1的控制位TF1和TR1,同時還占用了定時器1的中斷源,其啟動和關閉僅受TR1置1或清0控制。此時,TH0只能對機器周期進行計數(shù),因此,TH0只能用作簡單的內(nèi)部定時,不能用作對外部脈沖計數(shù),它是定時器0附加的一個8位定時器。在工作方式3時,計數(shù)范圍為1~256。計數(shù)初值和定時時間分別由式(4.5)和式(4.6)確定。

定時器1無工作方式3。當定時器0工作于方式3時,定時器1可設置為方式0、方式1或方式2,但由于TR1、TF1及T1的中斷源已被定時器0占用,此時,定時器T1只能用于不需要中斷的場合,如T1常常用作串行口波特率發(fā)生器。

通常情況下,也只有T1作為串行口波特率發(fā)生器使用時,為了充分利用單片機資源,才將T0設置為方式3使用。4.2.4定時器/計數(shù)器的應用

由于定時器/計數(shù)器的功能是由軟件編程實現(xiàn)的,因此一般在使用定時器/計數(shù)器前都要對其進行初始化。所謂初始化,實際上就是確定相關寄存器的值。初始化步驟如下:

(1)確定工作方式——對TMOD賦值。

根據(jù)任務性質(zhì)明確工作方式及類型,從而確定TMOD寄存器的值。例如,要求定時器/計數(shù)器T0完成16位定時功能,TMOD的值就應為01H,用指令

MOVTMOD,#01H

即可完成工作方式的設定。

(2)預置定時器/計數(shù)器的計數(shù)初值——寫入計數(shù)初值。

依據(jù)以上確定的工作方式和要求的計數(shù)次數(shù),由算式(4.1)~(4.6)計算出相應的計數(shù)初值。直接將計數(shù)初值寫入TH0、TL0或TH1、TL1。

(3)根據(jù)需要開放定時器/計數(shù)器中斷——直接對IE寄存器賦值。

(4)啟動定時/計數(shù)器工作——將TR0或TR1置“1”。

GATE=0時,直接由軟件置位啟動;GATE=1時,除軟件置位外,還必須在外中斷引腳處加上相應的電平值才能啟動。4.2.5應用實例

在工程應用中,常常會遇到要求系統(tǒng)定時或?qū)ν獠渴录嫈?shù)等類似問題,若用CPU直接進行定時或計數(shù)不但降低了CPU的效率,而且會無法響應實時事件。靈活運用定時器/計數(shù)器不但可減輕CPU的負擔,簡化外圍電路,而且可以提高系統(tǒng)的實時性,能快速響應和處理外部事件。

例4.2.1

方式0的應用。設單片機晶振頻率為12MHz,利用定時器/計數(shù)器T0,在P1.0引腳輸出周期為2ms的方波。解2ms的方波可由間隔1ms的高低電平相間而成,因而只要每1ms對P1.0取反一次即可得到這個方波,如圖4.12所示??蛇x用定時器/計數(shù)器T0工作為定時方式來實現(xiàn)1ms的定時。定時器工作在定時方式時,計數(shù)器對機器周期Tc計數(shù),每個機器周期計數(shù)器加1。因為單片機晶振頻率為12MHz,所以機器周期為

Tc=12×振蕩周期=12÷fosc=1μs要實現(xiàn)1ms的定時,定時器0在1ms內(nèi)需要計數(shù)N次:

N=1ms÷1μs=1000次

設定時器0工作在方式0,則計數(shù)初值X為

X=最大計數(shù)值M-計數(shù)次數(shù)N=213-N

=8192-1000=7192=1110000011000B圖4.12

2ms方波

13位的計數(shù)初值的高8位寫入TH0,低5位二進制數(shù)前要加3個0,湊成8位二進制數(shù)后寫入TL0。即向TH0寫入的數(shù)據(jù)是:11100000B(E0H),向TL0寫入的數(shù)據(jù)是:

00011000B(18H)。

TMOD初始化:TMOD=00000000B=00H,(GATE=0,C/T=0,M1=0,M0=0)TCON初始化:TR0=1,啟動T0

IE初始化:開放中斷,EA=1;允許定時器T0中斷,ET0=1程序如下:

ORG0000H

LJMPSTART ;復位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG0040H

START: MOVSP,#60H;初始化程序

MOVTH0,#0E0H ;T0賦初值

MOVTL0,#18H

MOVTMOD,#00H;T0為方式0定時。注,

;不能對TMOD位操作

SETBTR0 ;啟動T0SETBET0 ;開T0中斷

SETBEA ;開總允許中斷

SJMP$ ;等待中斷

T0INT:MOVTL0,#0E0H;T0中斷服務子程序,T0賦初

;值,再次啟動T0

MOVTH0,#18H

CPLP1.0 ;輸出周期為2ms的方波

RETI ;中斷返回

注意:T0溢出時中斷標志位TF0=1請求中斷,CPU響應中斷時,由硬件自動將該位清零。但在中斷服務程序中,必須重新寫入計數(shù)初值方可再次啟動定時器。

例4.2.2

軟件計數(shù)器的應用。設單片機時鐘頻率為12MHz,利用定時器/計數(shù)器T0在引腳P1.0和P1.1分別輸出周期為2ms和6ms的方波,如圖4.13所示。圖4.13輸出不同周期的方波

解在例4.2.1中,T0每1ms中斷一次,對P1.0取反一次得周期為2ms的方波。

讓例4.2.1中的主程序不變,只要對T0中斷服務子程序略加修改,使用片內(nèi)RAM的30H單元進行軟件計數(shù),每計數(shù)(中斷)3次,對P1.1取反一次可得到周期為6ms的方波。

修改后的T0中斷服務子程序如下(設30H單元的初值為0):

T0INT:MOVTL0,#0E0H;T0中斷服務子程序,T0

;賦初值,再次啟動T0 MOVTH0,#18H

CPLP1.0 ;輸出周期為2ms的方波

INC30H ;每1ms軟件計數(shù)值加1

MOVA,30H

CJNEA,#03,RETURN

CPLP1.1;每3ms對P1.1取反一次

MOV30H,00H ;軟件計數(shù)初值為0

RETURN:RETI ;中斷返回

例4.2.3

方式1的應用。設單片機晶振頻率為12MHz,用定時器/計數(shù)器0控制在P1.0引腳輸出周期為20ms的方波。解20ms的方波可由間隔10ms的高低電平相間而成,只要每10ms對P1.0取反一次即可得到這個方波。若單片機晶振頻率為12MHz,則機器周期為1μs。要實現(xiàn)10ms的定時,在10ms內(nèi)需要計數(shù)N次:

N=10ms÷1μs=10000次定時器工作在方式0時,其最大計數(shù)值M=213=8192,無法實現(xiàn)10ms的定時,即無法實現(xiàn)10000次的計數(shù)。所以,必須使定時器/計數(shù)器0工作在方式1下,此時計數(shù)初值X為

X=最大計數(shù)值M-計數(shù)次數(shù)N

=216-N=65536-10000=55536=D8F0H

即向TH0寫入計數(shù)初值D8H,向TL0寫入計數(shù)初值F0H。TMOD初始化:TMOD=00000001B=01H,(GATE=0,C/T=0,M1=0,M0=1);

TCON初始化:TR0=1,啟動T0;

IE初始化:開放中斷EA=1,允許定時器T0中斷ET0=1。程序清單如下:

ORG0000H

LJMPSTART ;復位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG0040H

START: MOVTH0,#0D8H ;T0賦初值

MOVTL0,#0F0H

MOVTMOD,#01H ;T0為方式1定時

SETBTR0 ;啟動T0

SETBET0 ;開T0中斷

SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T0INT:MOVTL0,#0D8H;T0中斷服務子程序,T0

;賦初值,再次啟動T0

MOVTH0,#0F0H

CPLP1.0 ;輸出周期為20ms的方波RETI ;中斷返回圖4.14生產(chǎn)過程控制

例4.2.4

利用定時器/計數(shù)器對生產(chǎn)過程進行控制。圖4.14給出了一個生產(chǎn)過程的示意圖。當生產(chǎn)線上無工件傳送時,在光線的照射下,光敏管導通,T1為低電平;當工件通過光源時工件會遮擋光線,光敏管截止,T1為高電平。每傳送一個工件,T1端會出現(xiàn)一個正脈沖。利用定時器/計數(shù)器1對生產(chǎn)過程進行控制,每生產(chǎn)出10000個工件,使P1.7輸出一個正脈沖,用于啟動下一個工序。

解設置定時器/計數(shù)器1工作在方式1,對工件進行計數(shù)。計數(shù)次數(shù)N=10000,則計數(shù)初值X為

X=最大計數(shù)值M-計數(shù)次數(shù)N=216-N

=65536-10000=55536=D8F0H

初始化:TMOD=01010000B=50H(GATE=0,C/T=1,M1M==01);

TCON初始化:TR1=1,啟動T1;

IE初始化:開放中斷EA=1,允許定時器T1中斷ET1=1。程序清單如下:

ORG0000H

LJMPSTART ;復位入口

ORG001BH

LJMPT1INT;T1中斷入口

ORG0040H

START: CLRP1.7 ;初始化P1.7=0

MOVTH1,#0D8H ;T0賦初值

MOVTL1,#0F0H

MOVTMOD,#50H ;T1為方式1計數(shù) SETBTR1 ;啟動T1

SETBET1 ;開T1中斷

SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T1INT:MOVTL1,#0D8H;T1中斷服務子程序,T1賦初

;值,再次啟動T1

MOVTH1,#0F0H

SETBP1.7 ;使P1.7輸出正脈沖,啟動下一

;個工序NOP

CLRP1.7

RETI ;中斷返回圖4.15顯示電路

例4.2.5

方式2的應用。設單片機晶振頻率為12MHz,在P1.7引腳接有一個發(fā)光二極管(如圖4.15所示),用定時器/計數(shù)器控制,使發(fā)光二極管亮1秒滅1秒,周而復始。

解由于定時間隔太長,用一個定時器/計數(shù)器無法直接實現(xiàn)1秒的定時??墒苟〞r器工作在方式1,得到10ms的定時間隔,再進行軟件計數(shù)100次,便可實現(xiàn)1秒的定時,讀者可參照例4.2.3和例4.2.2來完成。在此,我們采用多個定時器/計數(shù)器復合使用的方法完成此題??蓪⒍〞r器T0設定為10ms的定時間隔,當T0定時時間到時,把P1.0的輸出取反,再把P1.0的輸出信號加到定時器T1的計數(shù)脈沖的輸入端進行計數(shù)。只要T1計數(shù)50次,便可實現(xiàn)1s的定時:

(10ms+10ms)×50=1000ms=1s

因為T1的計數(shù)次數(shù)N=50,所以令定時器T1工作在方式2,計數(shù)器的計數(shù)初值由下式確定:

X=最大計數(shù)值M-計數(shù)次數(shù)N=28-N=256-50=206=CEH

即把CEH同時寫入TH1和TL1。

TMOD初始化:TMOD=01100001B=61H,T0為方式1定時,T1為方式2計數(shù)。

IE初始化:IE=10001010B,開放中斷EA=1,允許定時器T0中斷ET0=1,允許定時器T1中斷ET1=1。

中斷允許寄存器IE:程序清單如下:

ORG0000H

LJMPSTART ;復位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG001BH

LJMPT1INT;T1中斷入口

ORG0040HSTART: MOVTH0,#0D8H ;T0賦初值

MOVTL0,#0F0H

MOVTH1,#0CEH ;T1賦初值

MOVTL1,#0CEH

MOVTMOD,#61H;T0為方式1定時,T1為

;方式2計數(shù)

SETBTR0 ;啟動T0

SETBTR1 ;啟動T1

SETBET0 ;開T0中斷

SETBET1 ;開T1中斷 SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T0INT:MOVTL0,#0D8H;T0中斷服務子程序,T0賦初值,再次啟動T0

MOVTH0,#0F0H

CPLP1.0 ;P1.0輸出周期為20ms的方波

RETI [DW3];中斷返回

T1INT:CPLP1.0 ;T1中斷服務子程序

[DW3];P1.7使發(fā)光二極管亮1秒滅1秒,周而復始

RETI [DW3];中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論