中斷及定時系統(tǒng)課程課件_第1頁
中斷及定時系統(tǒng)課程課件_第2頁
中斷及定時系統(tǒng)課程課件_第3頁
中斷及定時系統(tǒng)課程課件_第4頁
中斷及定時系統(tǒng)課程課件_第5頁
已閱讀5頁,還剩77頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目6中斷及定時系統(tǒng)項目6中斷及定時系統(tǒng)16.1中斷系統(tǒng)6.1.1中斷的幾個概念概念1.中斷的定義 對于CPU來說,CPU在處理某一事件A時,發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生);CPU暫時中斷當前的工作,轉(zhuǎn)去處理事件B(中斷響應和中斷服務);待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。 所以我們把可以引起中斷的請求源稱之為中斷源。單片機中也有一些可以引起中斷的事件,8051中一共有5個中斷源:兩個外部中斷,兩個定時/計數(shù)器中斷,一個串行口中斷。2.中斷的嵌套與優(yōu)先級 8051單片機5個中斷源有兩個優(yōu)先級項目6中斷及定時系統(tǒng)6.1中斷系統(tǒng)6.1.1中斷的幾個概念概念項目6中斷及23.中斷的響應過程 五個中斷源,每個中斷產(chǎn)生后都到一個固定的地方去找處理這個中斷的程序,在去之前首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來的地方繼續(xù)往下執(zhí)行程序。中斷響應過程可以分為以下幾個步驟:1)保護斷點,即保存下一將要執(zhí)行的指令的地址,就是把這個地址送入堆棧;2)尋找中斷入口,根據(jù)5個不同的中斷源所產(chǎn)生的中斷,查找5個不同的中斷服務程序入口地址。在這5個入口地址處存放有中斷處理程序;3)執(zhí)行中斷處理程序;4)中斷返回:執(zhí)行完中斷處理程序后,就從中斷處返回到主程序,繼續(xù)執(zhí)行主程序。 中斷系統(tǒng)是計算機的重要組成部分。中斷系統(tǒng)可以提高CPU的工作效率,還可以提高實時數(shù)據(jù)的處理時效,所以實時控制、故障自動處理往往采用中斷系統(tǒng),計算機與外圍設(shè)備間傳送數(shù)據(jù)及實現(xiàn)人機聯(lián)系也常采用中斷方式。項目6中斷及定時系統(tǒng)3.中斷的響應過程項目6中斷及定時系統(tǒng)36.1.2中斷系統(tǒng)的結(jié)構(gòu)項目6中斷及定時系統(tǒng)6.1.2中斷系統(tǒng)的結(jié)構(gòu)項目6中斷及定時系統(tǒng)46.1.3中斷源和中斷標志1.中斷源 MCS-51的5個中斷源為兩個外部中斷、兩個定時器中斷和一個串行口中斷。 1)外部中斷請求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機上有兩個引腳,名稱為、,也就是P3.2、P3.3這兩個引腳。 2)內(nèi)部中斷請求源:兩個定時器中斷和串行口中斷。8051內(nèi)部有兩個16位的定時/計數(shù)器,對內(nèi)部定時脈沖或者T0/T1引腳上輸入的外部計數(shù)脈沖計數(shù),當定時時間到或計數(shù)脈沖滿時,自動向CPU提出中斷請求。串行口中斷分為串行口發(fā)送中斷和串行口接收中斷兩種,在串行口進行發(fā)送/接收數(shù)據(jù)時,每當串行口發(fā)送/接收完一組數(shù)據(jù),單片機自動使串行口控制寄存器SCON的RI或TI中斷標志置位,并且自動向CPU提出串行口中斷請求。項目6中斷及定時系統(tǒng)6.1.3中斷源和中斷標志項目6中斷及定時系統(tǒng)5

80C51單片機的中斷系統(tǒng)提供了5個中斷源,具有2個中斷優(yōu)先級,可實現(xiàn)兩級中斷嵌套。 80C51單片機的5個中斷源分別是:2個外部中斷(由、引腳輸入中斷請求信號)、2個片內(nèi)定時器/計數(shù)器溢出中斷(T0、T1)和1個片內(nèi)串行口中斷。TCON、SCON是用來存放各中斷源的中斷申請標志的寄存器;IE是用來設(shè)置是否允許中斷源中斷的寄存器;IP是用來設(shè)置中斷源優(yōu)先級別的寄存器;硬件查詢是相同優(yōu)先級的中斷源再進行排隊的硬件電路。項目6中斷及定時系統(tǒng) 80C51單片機的中斷系統(tǒng)提供了5個中斷源,具有2個中斷6(1)定時器控制寄存器TCON(TimerControlRegister)IE0:外部中斷0請求標志位。當CPU檢測到引腳上出現(xiàn)下降沿信號或低電平信號時,由內(nèi)部硬件置位IE0(IE0=1),向CPU請求中斷。IE1:外部中斷1請求標志位。當CPU檢測到引腳上出現(xiàn)下降沿信號或低電平信號時,由內(nèi)部硬件置位IE1(IE1=1),向CPU申請中斷。TF0:定時器/計數(shù)器T0的溢出中斷請求標志位。當T0計數(shù)溢出時,由內(nèi)部硬件置位TF0(TF0=1),向CPU申請中斷。TF1:定時器/計數(shù)器T1的溢出中斷請求標志位。當T1計數(shù)溢出時,由內(nèi)部硬件置位TF1(TF1=1),向CPU申請中斷。IT0:外部中斷0觸發(fā)方式控制位。當IT0=0時,電平觸發(fā),低電平有效;當IT0=1時,邊沿觸發(fā),下降沿有效。IT1:外部中斷1觸發(fā)方式控制位。當IT1=0時,電平觸發(fā),低電平有效;當IT1=1時,邊沿觸發(fā),下降沿有效。項目6中斷及定時系統(tǒng)(1)定時器控制寄存器TCON(TimerControl7(2)串行口控制寄存器SCON(SerialControlRegister)TI:串行口發(fā)送中斷請求標志位。當串行口發(fā)送完一個數(shù)據(jù)幀時,將TI置位(TI=1),向CPU申請中斷。RI:串行口接收中斷請求標志位。當串行口接收完一個數(shù)據(jù)幀時,將RI置位(RI=1),向CPU申請中斷。項目6中斷及定時系統(tǒng)(2)串行口控制寄存器SCON(SerialControl86.1.4對中斷請求的控制1.對中斷允許的控制 計算機中斷系統(tǒng)有兩種不同類型的中斷:一類稱為非屏蔽中斷,另一類稱為可屏蔽中斷。對非屏蔽中斷,用戶不能用軟件的方法加以禁止,一旦有中斷申請,CPU必須予以響應。對可屏蔽中斷,用戶則可以通過軟件方法來控制是否允許某中斷源的中斷,允許中斷稱中斷開放,不允許中斷稱中斷屏蔽。MCS-51系列單片機的5個中斷源都是可屏蔽中斷項目6中斷及定時系統(tǒng)6.1.4對中斷請求的控制項目6中斷及定時系統(tǒng)9 EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中斷;EA=1,中斷總允許,置1后,各中斷源的中斷允許由各個控制位進行設(shè)置。 EX0、EX1:外部中斷允許控制位。EX0(EX1)=0,表示禁止外中斷INT0(INT1)的中斷申請;EX0(EX1)=1,表示允許外中斷INT0(INT1)的中斷申請。 ET0、ET1:定時/計數(shù)中斷允許控制位。ET0(ET1)=0,表示禁止定時/計數(shù)器0(1)的中斷申請;ET0(ET1)=1,表示允許定時/計數(shù)器0(1)的中斷申請; ES:串行口中斷允許控制位。ES=0,禁止串口中斷;ES=1,允許串口中斷。MCS-51單片機各個中斷源均為可屏蔽中斷。 中斷允許寄存器IE的單元地址是A8H,各控制位可以位尋址,也可以字節(jié)尋址。例如可以采用位指令開放外部中斷的溢出中斷:SETBEASETBEX0 若改為字節(jié)傳送指令,則僅需采用一條指令:MOVIE,#81H項目6中斷及定時系統(tǒng) EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中10例:設(shè)允許定時器/計數(shù)器T1的溢出中斷的中斷請求,禁止其它中斷源的中斷請求,寫出設(shè)置IE的指令。分析:根據(jù)設(shè)定條件,則IE寄存器的EA=1,ET1=1,其它位為0,IE的值應為10001000B,即88H。用字節(jié)傳送指令可寫為:MOVIE,#88H或MOV0A8H,#88H若改用位操作指令,則需兩條指令:SETBET1;允許T1溢出中斷SETBEA;CPU允許所有中斷源中斷項目6中斷及定時系統(tǒng)例:設(shè)允許定時器/計數(shù)器T1的溢出中斷的中斷請求,禁止其它中11(4)中斷優(yōu)先級寄存器IP(InterruptPriorityRegister)80C51單片機的5個中斷源,均可由程序設(shè)置為高優(yōu)先級中斷或低優(yōu)先級中斷,誰的優(yōu)先級別高,就先響應誰。每個中斷源的中斷優(yōu)先級都通過中斷優(yōu)先級寄存器IP統(tǒng)一設(shè)置。項目6中斷及定時系統(tǒng)(4)中斷優(yōu)先級寄存器IP(InterruptPriori12PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級控制位;PX1是外部中斷1的中斷優(yōu)先級控制位。PT0和PT1:PT0為定時器/計數(shù)器T0的溢出中斷優(yōu)先級控制位;PT1為定時器/計數(shù)器T1的溢出中斷優(yōu)先級控制位。PS:串行口中斷優(yōu)先級控制位。注意:當某個中斷源的優(yōu)先級控制位為1時,設(shè)置為高優(yōu)先級中斷;為0時,設(shè)置為低優(yōu)先級中斷。項目6中斷及定時系統(tǒng)PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級控制位;項目613 8051單片機共有5個中斷源,在單片機工作過程中,若出現(xiàn)三個或者更多的中斷請求源,那么同一優(yōu)先級別中的中斷源就不止一個,這個時候也有中斷優(yōu)先級排隊的問題,8051單片機對此有統(tǒng)一規(guī)定,如表6-1所示。可對中斷系統(tǒng)的規(guī)定概括為以下兩條基本規(guī)則: 1)低優(yōu)先級中斷系統(tǒng)的規(guī)定被高級中斷系統(tǒng)中斷,反之不能; 2)當多個中斷源同時發(fā)出申請時,級別高的優(yōu)先級先服務(先按高低優(yōu)先級區(qū)分,再按輔助優(yōu)先級區(qū)分)。高低中斷源同一級別的優(yōu)先級外部中斷0定時/計數(shù)器0溢出中斷外部中斷1定時/計數(shù)器1溢出中斷串行口中斷表6-18051各個中斷源中斷優(yōu)先級順序項目6中斷及定時系統(tǒng) 8051單片機共有5個中斷源,在單片機工作過程中,若出現(xiàn)14例:設(shè)80C51單片機的外部中斷為高優(yōu)先級,內(nèi)部中斷為低優(yōu)先級,寫出設(shè)置IP的指令。分析:由給定的條件可知:IP寄存器中,PX1=1,PX0=1,其余位為0,即IP=00000101B=05H。用字節(jié)傳送指令設(shè)置:MOVIP,#05H或MOV0B8H,#05H用位操作指令設(shè)置:SETBPX0SETBPX1CLRPT0CLRPT1CLRPS項目6中斷及定時系統(tǒng)例:設(shè)80C51單片機的外部中斷為高優(yōu)先級,內(nèi)部中斷為低優(yōu)156.1.5中斷處理過程 中斷處理過程可分為中斷響應、中斷處理和中斷返回三個階段。1.中斷響應 中斷響應是CPU對中斷源中斷請求的響應,包括保護斷點和將程序轉(zhuǎn)向中斷服務程序的入口地址(通常稱矢量地址)。CPU并非任何時刻都響應中斷請求,而是在中斷響應條件滿足之后才會響應。 1)中斷響應條件 (1)有中斷源發(fā)出中斷請求。(2)中斷總允許位EA=1。(3)申請中斷的中斷源允許。 滿足以上基本條件,CPU一般會響應中斷,但CPU正在響應同級或高優(yōu)先級的中斷、正在執(zhí)行RETI中斷返回指令以及訪問專用寄存器IE和IP的指令時,CPU不響應中斷請求而在下一機器周期繼續(xù)查詢,否則,CPU在下一機器周期響應中斷。項目6中斷及定時系統(tǒng)6.1.5中斷處理過程項目6中斷及定時系統(tǒng)162)中斷響應過程 中斷響應過程包括保護斷點和將程序轉(zhuǎn)向中斷服務程序的入口地址。首先把中斷點的地址(斷點地址)壓入堆棧保護,然后將對應的中斷入口地址裝入程序計數(shù)器PC(由硬件自動執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,執(zhí)行中斷服務程序。MCS-51系列單片機各中斷源的入口地址由硬件事先設(shè)定,分配如表6-2所示。 因為5個中斷源的入口地址之間,只相隔8個存儲單元,一般的中斷服務程序是容納不下的,使用時通常在這些中斷入口地址處存放一條絕對跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到存儲器其他的任何空間,并且將中斷服務程序安排在相應的空間中。例如,若采用定時器T0中斷,其中斷入口地址為000BH,中斷服務程序名為TIME00,因此,指令形式為:ORG 000BH;T1中斷入口AJMP TIME00;轉(zhuǎn)向中斷服務程序中斷源入口地址外部中斷00003H定時/計數(shù)器0溢出中斷000BH外部中斷10013H定時/計數(shù)器1溢出中斷001BH串行口中斷0023H項目6中斷及定時系統(tǒng)2)中斷響應過程中斷源入口地址外部中斷00003H定時/計數(shù)172.中斷處理中斷處理就是執(zhí)行中斷服務程序。中斷服務程序從中斷入口地址開始執(zhí)行,到返回指令“RETI”為止,一般包括兩部分內(nèi)容,一是保護現(xiàn)場,二是完成中斷源請求的服務。 通常,主程序和中斷服務程序都會用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器,當CPU進入中斷服務程序用到上述寄存器時,會破壞原來存儲在寄存器中的內(nèi)容,一旦中斷返回,將會導致主程序的混亂,因此,在進入中斷服務程序后,一般要先保護現(xiàn)場,然后,執(zhí)行中斷處理程序,在中斷返回之前再恢復現(xiàn)場。例如:TIME00:;中斷服務程序CLREA;關(guān)中斷PUSHPSW;保護現(xiàn)場PUSHACCPUSHB........;中斷處理PUSHB;恢復現(xiàn)場PUSHACCPUSHPSWSETBEA;開中斷RETI;中斷返回項目6中斷及定時系統(tǒng)2.中斷處理項目6中斷及定時系統(tǒng)18編寫中斷服務程序時還需注意以下幾點: 1)各中斷源的中斷入口地址之間只相隔8個字節(jié),容納不下普通的中斷服務程序,因此,在中斷入口地址單元通常存放一條無條件轉(zhuǎn)移指令,可將中斷服務程序轉(zhuǎn)至存儲器的其它任何空間。 2)若要在執(zhí)行當前中斷程序時禁止其它更高優(yōu)先級中斷,需先用軟件關(guān)閉CPU中斷,或用軟件禁止相應高優(yōu)先級的中斷,在中斷返回前再開放中斷。 3)在保護和恢復現(xiàn)場時,為了不使現(xiàn)場數(shù)據(jù)遭到破壞或造成混亂,一般規(guī)定此時CPU不再響應新的中斷請求。因此,在編寫中斷服務程序時,要注意在保護現(xiàn)場前關(guān)中斷,在保護現(xiàn)場后若允許高優(yōu)先級中斷,則應開中斷。同樣,在恢復現(xiàn)場前也應先關(guān)中斷,恢復之后再開中斷。項目6中斷及定時系統(tǒng)編寫中斷服務程序時還需注意以下幾點:項目6中斷及定時系統(tǒng)193.中斷返回 中斷返回是指中斷服務完后,計算機返回原來斷開的位置(即斷點),繼續(xù)執(zhí)行原來的程序。中斷返回由中斷返回指令RETI來實現(xiàn)。該指令的功能是把斷點地址從堆棧中彈出,送回到程序計數(shù)器PC,此外,還通知中斷系統(tǒng)已完成中斷處理,并同時清除優(yōu)先級狀態(tài)觸發(fā)器。項目6中斷及定時系統(tǒng)3.中斷返回項目6中斷及定時系統(tǒng)204.中斷請求的撤除CPU響應中斷請求后即進入中斷服務程序,在中斷返回前,應撤除該中斷請求,否則,會重復引起中斷而導致錯誤。MCS-51各中斷源中斷請求撤消的方法各不相同,分別為:1)定時器中斷請求的撤除 對于定時器0或1溢出中斷,CPU在響應中斷后即由硬件自動清除其中斷標志位TF0或TF1,無需采取其它措施。2)串行口中斷請求的撤除 對于串行口中斷,CPU在響應中斷后,硬件不能自動清除中斷請求標志位TI、RI,必須在中斷服務程序中用軟件將其清除。例如:CLRTI;撤除發(fā)送中斷CLRRI;撤除接收中斷3)外部中斷請求的撤除 外部中斷可分為邊沿觸發(fā)型和電平觸發(fā)型,對于這兩種不同的中斷觸發(fā)方式,51單片機撤除它們的中斷請求的方法是不同的。 (1)對于邊沿觸發(fā)的外部中斷0或1,CPU在響應中斷后由硬件自動清除其中斷標志位IE0或IE1,無需采取其它措施。 (2)對于電平觸發(fā)的外部中斷,其中斷請求撤除方法較復雜。因為對于電平觸發(fā)外中斷,CPU在響應中斷后,硬件不會自動清除其中斷請求標志位IE0或IE1,同時,也不能用軟件將其清除,所以,在CPU響應中斷后,應立即撤除或引腳上的低電平。否則,就會引起重復中斷而導致錯誤。而CPU又不能控制或引腳的信號,因此,只有通過硬件再配合相應軟件才能解決這個問題。項目6中斷及定時系統(tǒng)4.中斷請求的撤除項目6中斷及定時系統(tǒng)21【例6.1】電路如圖6-3所示,按鍵控制信號燈,試利用兩個外部中斷編程實現(xiàn)以下功能:K0單獨按下,黃燈亮;K1單獨按下,綠燈亮。項目6中斷及定時系統(tǒng)【例6.1】電路如圖6-3所示,按鍵控制信號燈,試利用兩個外226.2定時/計數(shù)器6.2.1關(guān)于定時/計數(shù)器的幾個概念1.計數(shù)的概念 所謂計數(shù),就是計算事件發(fā)生的次數(shù)。2.定時的概念 生活中常見的定時有很多,如電視機定時關(guān)機、空調(diào)定時開關(guān)、微波爐定時加熱等等。 單片機中的定時器和計數(shù)器是一個東西,只不過計數(shù)器是記錄的外界發(fā)生的事情,而定時器則是由單片機提供一個非常穩(wěn)定的計數(shù)源。這個計數(shù)源就是由單片機的晶振經(jīng)過12分頻后獲得的一個脈沖源。在晶振位12MHz的情況下,這個計數(shù)脈沖的時間間隔就是1。項目6中斷及定時系統(tǒng)6.2定時/計數(shù)器6.2.1關(guān)于定時/計數(shù)器的幾個概念項233.計數(shù)器的容量 8051單片機中有兩個計數(shù)器,分別稱之為T0和T1,這兩個計數(shù)器都是16位,所以最大的計數(shù)量是65536,即0000H~FFFFH。 計數(shù)器的容量是16位,最大的計數(shù)量是65536,因此計到65536個就會產(chǎn)生溢出。問題是我們現(xiàn)實生活中,經(jīng)常會有少于65536個計數(shù)值的要求,如定時100s? 比如說,一個容器可以裝1000滴水,再裝的話就溢出了。現(xiàn)在要求裝只能100滴水,再裝的話就溢出了,怎么實現(xiàn)?對了,我們可以先裝900滴水就可以了。這種方式在單片機里面稱為預置數(shù),我要計100,那我就先放進65436,再來100個脈沖,就可以到65536了。 定時也是如此,每個脈沖是1,則計滿65536個脈沖需時65.536ms,如果我只要10ms怎么辦?10個ms為10000個,所以只要在計數(shù)器里面放進55536就可以了。項目6中斷及定時系統(tǒng)3.計數(shù)器的容量項目6中斷及定時系統(tǒng)246.2.2定時/計數(shù)器的結(jié)構(gòu)

從上一節(jié)我們已經(jīng)得知,單片機中的定時/計數(shù)器都可以有多種用途,下面我們具體了解它們的內(nèi)部結(jié)構(gòu)。 8051單片機內(nèi)部有兩個16位的可編程定時器/計數(shù)器,稱為定時器0(T0)和定時器1(T1),可編程選擇其作為定時器用或作為計數(shù)器用。此外,工作方式、定時時間、計數(shù)值、啟動、中斷請求等都可以由程序設(shè)定,其邏輯結(jié)構(gòu)如圖6-7所示。項目6中斷及定時系統(tǒng)6.2.2定時/計數(shù)器的結(jié)構(gòu)項目6中斷及定時系統(tǒng)256.2.3定時器/計數(shù)器的控制 上文提到的兩個特殊功能寄存器,TMOD和TCON,通過設(shè)置這兩個特殊功能寄存器來讓定時/計數(shù)器為我們服務。1.定時/計數(shù)器方式寄存器TMOD TMOD為T1、T2的工作方式寄存器,TMOD的低4位為T0的方式字段,高4位為T1的方式字段,它們的含義完全相同,其格式如下:項目6中斷及定時系統(tǒng)6.2.3定時器/計數(shù)器的控制項目6中斷及定時系統(tǒng)26GATE:門控位。用于控制T0或T1的啟動。當GATE=0時,計數(shù)器的啟動不受外部引腳信號或控制,只受定時器控制寄存器TCON中的啟動位TR0或TR1的控制;當GATE=1時,計數(shù)器的啟動不僅受TR0或TR1的控制,還要受外部引腳信號或控制。

C/T:功能選擇位。當=0時,定時功能,其計數(shù)脈沖為時鐘振蕩信號的12分頻,即對機器周期計數(shù);當=1時,計數(shù)功能,其計數(shù)脈沖是從T0(P3.4)或T1(P3.5)端輸入的外部脈沖。M1和M0:工作方式選擇位。定時器/計數(shù)器有4種工作方式,通過M1、M0的組合設(shè)置為不同的工作方式項目6中斷及定時系統(tǒng)GATE:門控位。用于控制T0或T1的啟動。當GATE=027M1M0工作方式說明00方式013位定時器/計數(shù)器01方式116位定時器/計數(shù)器10方式2自動重裝載8位定時器/計數(shù)器11方式3T0被拆為兩個8位的定時器/計數(shù)器;T1停止計數(shù)TMOD不能位尋址,只能用字節(jié)指令設(shè)置定時器工作方式,高4位定義T1,低4位定義T0。復位時,TMOD所有位均置0。項目6中斷及定時系統(tǒng)M1M0工作方式說明00方式013位定時器/計數(shù)器01282.定時器/計數(shù)器控制寄存器TCON(TimerControlRegister)項目6中斷及定時系統(tǒng)2.定時器/計數(shù)器控制寄存器TCON(TimerContr291)TF1:定時器1溢出標志位。當定時器1計數(shù)滿產(chǎn)生溢出時,由硬件自動置TF1=1。在中斷允許時,向CPU發(fā)出定時器1的中斷請求,進入中斷服務程序后,由硬件自動清0。在中斷屏蔽時,TF1可作查詢測試用,此時只能由軟件清0。2)TR1:定時器1運行控制位。由軟件置1或清0來啟動或關(guān)閉定時器1。當GATE=1,且為高電平時,TR1置1啟動定時器1;當GATE=0時,TR1置1即可啟動定時器1。3)TF0:定時器0溢出標志位。其功能及操作情況同TF1。4)TR0:定時器0運行控制位。其功能及操作情況同TR1。5)IE1:外部中斷1()請求標志位。6)IT1:外部中斷1觸發(fā)方式選擇位。7)IE0:外部中斷0()請求標志位。8)IT0:外部中斷0觸發(fā)方式選擇位。TCON中的低4位用于控制外部中斷,與定時器/計數(shù)器無關(guān)。當系統(tǒng)復位時,TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標志位或啟動定時器都可以用位操作指令。如SETBTR1、JBCTF1,LOOP等等。項目6中斷及定時系統(tǒng)1)TF1:定時器1溢出標志位。當定時器1計數(shù)滿產(chǎn)生溢出時306.2.4定時器/計數(shù)器的工作方式通過對定時器/計數(shù)器方式控制寄存器TMOD的介紹,已經(jīng)知道定時器/計數(shù)器有四種工作方式。1.工作方式0當TMOD的M1、M0位為00時,定時器/計數(shù)器就工作在方式0。方式0的計數(shù)器是由TL0的低5位與TH0的8位組成的13位計數(shù)器結(jié)構(gòu),TL0的高3位未用。當TL0的低5位進位時,TH0加1;TH0的最高位進位,產(chǎn)生溢出,使TF0=1,向CPU申請中斷。若CPU響應中斷,系統(tǒng)自動將TF0復位。圖6-9方式0中的13位計數(shù)器分配項目6中斷及定時系統(tǒng)6.2.4定時器/計數(shù)器的工作方式圖6-9方式0中的1331當=0時,多路開關(guān)連接12分頻器輸出,T0對機器周期計數(shù),此時T0為定時器。其定時時間為:當=1時,多路開關(guān)與T0(P3.4)相連,外部計數(shù)脈沖由T0腳輸入,當外部信號電平發(fā)生由0到1的負跳變時,計數(shù)器加1,此時T0為計數(shù)器。定時器初值計數(shù):設(shè)定時時間為t,計數(shù)初值為X,晶體振蕩器產(chǎn)生的振蕩信號的頻率為fosc,則定時時間的計算公式為:t=(計數(shù)最大值-X)×12/fosc方式0為13位計數(shù)器結(jié)構(gòu),其計數(shù)最大值為213=8192。設(shè)fosc為12MHz,經(jīng)12分頻后,每個計數(shù)脈沖的周期為1μs。當計數(shù)初值X為0時,定時時間最長,則方式0的最大定時時間為:tmax=(213-0)×12/fosc=8192×1μs=8.192ms項目6中斷及定時系統(tǒng)當=0時,多路開關(guān)連接12分頻器輸出,T032計數(shù)器初值計算:設(shè)計數(shù)次數(shù)為C,計數(shù)初值為X,則計數(shù)次數(shù)的計算公式如下:C=計數(shù)最大值-X當計數(shù)初值X為0時,計數(shù)次數(shù)最多,則方式0的最大計數(shù)次數(shù)為:Cmax=213-0=8192項目6中斷及定時系統(tǒng)計數(shù)器初值計算:項目6中斷及定時系統(tǒng)33【例6.2】用定時器0的工作方式0實現(xiàn)1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時器0的工作方式0實現(xiàn)1ms的定時,則:M1M0=00,T0工作在方式0;=0,此時T0為定時狀態(tài);GATE=0,此時定時器與外部中斷無關(guān);其余各位可以任意設(shè)置,這里取0值,即TMOD=00000000B=00H。第二步,計算初值,此時晶振頻率為12MHz。根據(jù)公式,得出得=1C18H=0001110000011000B因13位計數(shù)器中TL0的高3位未用,應填寫0,TH0占高8位,所以X的實際填寫值應為:=1110000011000=E018H即:TH0=E0H,TL0=18H。項目6中斷及定時系統(tǒng)【例6.2】用定時器0的工作方式0實現(xiàn)1ms的定時,在P1.34第三步,程序采用查詢的方式,如下:ORG00HLJMPMAINORG0100HMAIN:MOVTMOD,#00H;設(shè)定時器0為工作方式0SETBTR0;啟動定時器LOOP:MOVTH0,#0E0H;預置數(shù),裝入計數(shù)初值MOVTL0,#18HJNBTF0,$;T0沒有溢出,等待溢出CLRTF0CPLP1.0;P1.0取反輸出方波LJMPLOOPEND項目6中斷及定時系統(tǒng)第三步,程序采用查詢的方式,如下:項目6中斷及定時系統(tǒng)352.方式1 定時器工作于方式1時,構(gòu)成一個16位定時器/計數(shù)器,其最大計數(shù)值為216=65536,其結(jié)構(gòu)與操作幾乎完全與方式0相同,只是將M1M0設(shè)為01,唯一差別是二者計數(shù)位數(shù)不同。作為定時器用時,其定時時間為: 既然方式0和方式1的結(jié)構(gòu)與操作基本一樣,為什么還要用13位的方式0呢?為什么不都用16位方式1?這是為了和51機的前輩48系列兼容而設(shè)的一種工作式,當然我們可以都用方式1,不用方式0。項目6中斷及定時系統(tǒng)2.方式1項目6中斷及定時系統(tǒng)36【例6.3】用定時器0的工作方式1實現(xiàn)50ms的定時,在P1.0引腳上輸出周期為100ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時器0的工作方式1實現(xiàn)50ms的定時,則:M1M0=01,T0工作在方式1;其余與例6.2相同,即TMOD=00000001B=01H。第二步,計算初值,此時晶振頻率為12MHz。根據(jù)公式,得出得=2^16-50000=15536=3CB0H即:TH0=3CH,TL0=B0H。項目6中斷及定時系統(tǒng)【例6.3】用定時器0的工作方式1實現(xiàn)50ms的定時,在P137第三步,程序采用中斷的方式,如下:ORG0000HLJMPMAINORG000BHLJMPTIME00ORG0100HMAIN:MOVTMOD,#01H;設(shè)定時器0為工作方式1MOVTH0,#3CH;預置數(shù),裝入計數(shù)初值MOVTL0,#0B0HSETBEA;開總中斷SETBET0;開定時器中斷SETBTR0;啟動定時器T0LOOP:SJMP$;等待中斷TIME00:CPLP1.0;P1.0取反輸出方波MOVTH0,#3CH;預置數(shù),重新裝入計數(shù)初值MOVTL0,#0B0HRETIEND項目6中斷及定時系統(tǒng)第三步,程序采用中斷的方式,如下:項目6中斷及定時系統(tǒng)383.方式2在例6.2中,當定時時間到了以后,定時器的值變成了0,下一次將要計滿65536后才會溢出,而我們的要求是定時產(chǎn)生方波,所以我們要做溢出后做一個重置預置數(shù)的工作,如在中斷服務程序中重新裝入計數(shù)初值,做這樣的工作影響定時精度不說,還需要時間,一般來說這點時間不算什么,可是有一些場合我們還是要計較的,所以就有了工作方式2,自動再裝入預置數(shù)的工作方式。 方式2中16位定時/計數(shù)器被分割為兩個,TL0(TL1)用作8位計數(shù)器,TH0(TH1)用以保持初值。TH0(TH1)作為一個8位的寄存器使用,存放計數(shù)器的初始值;TL0(TL1)作為一個8位加1計數(shù)器; 當TL0(TL1)計數(shù)溢出時,不僅溢出中斷標志TF0(TF1)置1,而且還自動把TH0(TH1)中的內(nèi)容重裝到TL0(TL1)中。 程序初始化時,TL0(TL1)和TH0(TH1)由軟件賦予相同的初值。一旦TL0(TL1)計數(shù)溢出,TF0(TF1)將被置位,同時,TH0(TH1)中的初值裝入TL0(TL1),從而進入新一輪計數(shù),如此重復循環(huán)不止。用于定時工時方式時,其定時時間是:項目6中斷及定時系統(tǒng)3.方式2項目6中斷及定時系統(tǒng)39【例6.4】用定時器0的工作方式2實現(xiàn)100s的定時,在P1.0引腳上輸出周期為200s的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時器0的工作方式2實現(xiàn)100s的定時,則:M1M0=10,T0工作在方式2;其余與例6.2相同,即TMOD=00000010B=02H。第二步,計算初值,此時晶振頻率為12MHz。根據(jù)公式,得出得=2^8-100=156=9CH即:TH0=9CH,TL0=9CH。第三步,程序采用中斷的方式,如下:ORG0000HLJMPMAINORG000BHCPLP1.0;P1.0取反輸出方波RETIORG0100HMAIN:MOVTMOD,#02H;設(shè)定時器0為工作方式1MOVTH0,#9CH;預置數(shù),裝入計數(shù)初值MOVTL0,#9CHMOVIE,#82H;開中斷SETBTR0;啟動定時器T0LOOP:SJMP$;等待中斷END項目6中斷及定時系統(tǒng)【例6.4】用定時器0的工作方式2實現(xiàn)100s的定時,在P1406.2.4定時器/計數(shù)器的工作方式 上文提到,,通過對TMOD寄存器中M0、M1位進行設(shè)置,可選擇4種工作方式,即方式0、方式1、方式2和方式3。在方式0、1和2時,T0和T1的工作方式相同;在方式3時,兩個定時器的工作方式不同,1.方式0方式0構(gòu)成一個13位定時器/計數(shù)器,其最大計數(shù)值為213=8192。項目6中斷及定時系統(tǒng)6.2.4定時器/計數(shù)器的工作方式項目6中斷及定時系統(tǒng)41項目6中斷及定時系統(tǒng)項目6中斷及定時系統(tǒng)426.1中斷系統(tǒng)6.1.1中斷的幾個概念概念1.中斷的定義 對于CPU來說,CPU在處理某一事件A時,發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生);CPU暫時中斷當前的工作,轉(zhuǎn)去處理事件B(中斷響應和中斷服務);待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。 所以我們把可以引起中斷的請求源稱之為中斷源。單片機中也有一些可以引起中斷的事件,8051中一共有5個中斷源:兩個外部中斷,兩個定時/計數(shù)器中斷,一個串行口中斷。2.中斷的嵌套與優(yōu)先級 8051單片機5個中斷源有兩個優(yōu)先級項目6中斷及定時系統(tǒng)6.1中斷系統(tǒng)6.1.1中斷的幾個概念概念項目6中斷及433.中斷的響應過程 五個中斷源,每個中斷產(chǎn)生后都到一個固定的地方去找處理這個中斷的程序,在去之前首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來的地方繼續(xù)往下執(zhí)行程序。中斷響應過程可以分為以下幾個步驟:1)保護斷點,即保存下一將要執(zhí)行的指令的地址,就是把這個地址送入堆棧;2)尋找中斷入口,根據(jù)5個不同的中斷源所產(chǎn)生的中斷,查找5個不同的中斷服務程序入口地址。在這5個入口地址處存放有中斷處理程序;3)執(zhí)行中斷處理程序;4)中斷返回:執(zhí)行完中斷處理程序后,就從中斷處返回到主程序,繼續(xù)執(zhí)行主程序。 中斷系統(tǒng)是計算機的重要組成部分。中斷系統(tǒng)可以提高CPU的工作效率,還可以提高實時數(shù)據(jù)的處理時效,所以實時控制、故障自動處理往往采用中斷系統(tǒng),計算機與外圍設(shè)備間傳送數(shù)據(jù)及實現(xiàn)人機聯(lián)系也常采用中斷方式。項目6中斷及定時系統(tǒng)3.中斷的響應過程項目6中斷及定時系統(tǒng)446.1.2中斷系統(tǒng)的結(jié)構(gòu)項目6中斷及定時系統(tǒng)6.1.2中斷系統(tǒng)的結(jié)構(gòu)項目6中斷及定時系統(tǒng)456.1.3中斷源和中斷標志1.中斷源 MCS-51的5個中斷源為兩個外部中斷、兩個定時器中斷和一個串行口中斷。 1)外部中斷請求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機上有兩個引腳,名稱為、,也就是P3.2、P3.3這兩個引腳。 2)內(nèi)部中斷請求源:兩個定時器中斷和串行口中斷。8051內(nèi)部有兩個16位的定時/計數(shù)器,對內(nèi)部定時脈沖或者T0/T1引腳上輸入的外部計數(shù)脈沖計數(shù),當定時時間到或計數(shù)脈沖滿時,自動向CPU提出中斷請求。串行口中斷分為串行口發(fā)送中斷和串行口接收中斷兩種,在串行口進行發(fā)送/接收數(shù)據(jù)時,每當串行口發(fā)送/接收完一組數(shù)據(jù),單片機自動使串行口控制寄存器SCON的RI或TI中斷標志置位,并且自動向CPU提出串行口中斷請求。項目6中斷及定時系統(tǒng)6.1.3中斷源和中斷標志項目6中斷及定時系統(tǒng)46

80C51單片機的中斷系統(tǒng)提供了5個中斷源,具有2個中斷優(yōu)先級,可實現(xiàn)兩級中斷嵌套。 80C51單片機的5個中斷源分別是:2個外部中斷(由、引腳輸入中斷請求信號)、2個片內(nèi)定時器/計數(shù)器溢出中斷(T0、T1)和1個片內(nèi)串行口中斷。TCON、SCON是用來存放各中斷源的中斷申請標志的寄存器;IE是用來設(shè)置是否允許中斷源中斷的寄存器;IP是用來設(shè)置中斷源優(yōu)先級別的寄存器;硬件查詢是相同優(yōu)先級的中斷源再進行排隊的硬件電路。項目6中斷及定時系統(tǒng) 80C51單片機的中斷系統(tǒng)提供了5個中斷源,具有2個中斷47(1)定時器控制寄存器TCON(TimerControlRegister)IE0:外部中斷0請求標志位。當CPU檢測到引腳上出現(xiàn)下降沿信號或低電平信號時,由內(nèi)部硬件置位IE0(IE0=1),向CPU請求中斷。IE1:外部中斷1請求標志位。當CPU檢測到引腳上出現(xiàn)下降沿信號或低電平信號時,由內(nèi)部硬件置位IE1(IE1=1),向CPU申請中斷。TF0:定時器/計數(shù)器T0的溢出中斷請求標志位。當T0計數(shù)溢出時,由內(nèi)部硬件置位TF0(TF0=1),向CPU申請中斷。TF1:定時器/計數(shù)器T1的溢出中斷請求標志位。當T1計數(shù)溢出時,由內(nèi)部硬件置位TF1(TF1=1),向CPU申請中斷。IT0:外部中斷0觸發(fā)方式控制位。當IT0=0時,電平觸發(fā),低電平有效;當IT0=1時,邊沿觸發(fā),下降沿有效。IT1:外部中斷1觸發(fā)方式控制位。當IT1=0時,電平觸發(fā),低電平有效;當IT1=1時,邊沿觸發(fā),下降沿有效。項目6中斷及定時系統(tǒng)(1)定時器控制寄存器TCON(TimerControl48(2)串行口控制寄存器SCON(SerialControlRegister)TI:串行口發(fā)送中斷請求標志位。當串行口發(fā)送完一個數(shù)據(jù)幀時,將TI置位(TI=1),向CPU申請中斷。RI:串行口接收中斷請求標志位。當串行口接收完一個數(shù)據(jù)幀時,將RI置位(RI=1),向CPU申請中斷。項目6中斷及定時系統(tǒng)(2)串行口控制寄存器SCON(SerialControl496.1.4對中斷請求的控制1.對中斷允許的控制 計算機中斷系統(tǒng)有兩種不同類型的中斷:一類稱為非屏蔽中斷,另一類稱為可屏蔽中斷。對非屏蔽中斷,用戶不能用軟件的方法加以禁止,一旦有中斷申請,CPU必須予以響應。對可屏蔽中斷,用戶則可以通過軟件方法來控制是否允許某中斷源的中斷,允許中斷稱中斷開放,不允許中斷稱中斷屏蔽。MCS-51系列單片機的5個中斷源都是可屏蔽中斷項目6中斷及定時系統(tǒng)6.1.4對中斷請求的控制項目6中斷及定時系統(tǒng)50 EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中斷;EA=1,中斷總允許,置1后,各中斷源的中斷允許由各個控制位進行設(shè)置。 EX0、EX1:外部中斷允許控制位。EX0(EX1)=0,表示禁止外中斷INT0(INT1)的中斷申請;EX0(EX1)=1,表示允許外中斷INT0(INT1)的中斷申請。 ET0、ET1:定時/計數(shù)中斷允許控制位。ET0(ET1)=0,表示禁止定時/計數(shù)器0(1)的中斷申請;ET0(ET1)=1,表示允許定時/計數(shù)器0(1)的中斷申請; ES:串行口中斷允許控制位。ES=0,禁止串口中斷;ES=1,允許串口中斷。MCS-51單片機各個中斷源均為可屏蔽中斷。 中斷允許寄存器IE的單元地址是A8H,各控制位可以位尋址,也可以字節(jié)尋址。例如可以采用位指令開放外部中斷的溢出中斷:SETBEASETBEX0 若改為字節(jié)傳送指令,則僅需采用一條指令:MOVIE,#81H項目6中斷及定時系統(tǒng) EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中51例:設(shè)允許定時器/計數(shù)器T1的溢出中斷的中斷請求,禁止其它中斷源的中斷請求,寫出設(shè)置IE的指令。分析:根據(jù)設(shè)定條件,則IE寄存器的EA=1,ET1=1,其它位為0,IE的值應為10001000B,即88H。用字節(jié)傳送指令可寫為:MOVIE,#88H或MOV0A8H,#88H若改用位操作指令,則需兩條指令:SETBET1;允許T1溢出中斷SETBEA;CPU允許所有中斷源中斷項目6中斷及定時系統(tǒng)例:設(shè)允許定時器/計數(shù)器T1的溢出中斷的中斷請求,禁止其它中52(4)中斷優(yōu)先級寄存器IP(InterruptPriorityRegister)80C51單片機的5個中斷源,均可由程序設(shè)置為高優(yōu)先級中斷或低優(yōu)先級中斷,誰的優(yōu)先級別高,就先響應誰。每個中斷源的中斷優(yōu)先級都通過中斷優(yōu)先級寄存器IP統(tǒng)一設(shè)置。項目6中斷及定時系統(tǒng)(4)中斷優(yōu)先級寄存器IP(InterruptPriori53PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級控制位;PX1是外部中斷1的中斷優(yōu)先級控制位。PT0和PT1:PT0為定時器/計數(shù)器T0的溢出中斷優(yōu)先級控制位;PT1為定時器/計數(shù)器T1的溢出中斷優(yōu)先級控制位。PS:串行口中斷優(yōu)先級控制位。注意:當某個中斷源的優(yōu)先級控制位為1時,設(shè)置為高優(yōu)先級中斷;為0時,設(shè)置為低優(yōu)先級中斷。項目6中斷及定時系統(tǒng)PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級控制位;項目654 8051單片機共有5個中斷源,在單片機工作過程中,若出現(xiàn)三個或者更多的中斷請求源,那么同一優(yōu)先級別中的中斷源就不止一個,這個時候也有中斷優(yōu)先級排隊的問題,8051單片機對此有統(tǒng)一規(guī)定,如表6-1所示。可對中斷系統(tǒng)的規(guī)定概括為以下兩條基本規(guī)則: 1)低優(yōu)先級中斷系統(tǒng)的規(guī)定被高級中斷系統(tǒng)中斷,反之不能; 2)當多個中斷源同時發(fā)出申請時,級別高的優(yōu)先級先服務(先按高低優(yōu)先級區(qū)分,再按輔助優(yōu)先級區(qū)分)。高低中斷源同一級別的優(yōu)先級外部中斷0定時/計數(shù)器0溢出中斷外部中斷1定時/計數(shù)器1溢出中斷串行口中斷表6-18051各個中斷源中斷優(yōu)先級順序項目6中斷及定時系統(tǒng) 8051單片機共有5個中斷源,在單片機工作過程中,若出現(xiàn)55例:設(shè)80C51單片機的外部中斷為高優(yōu)先級,內(nèi)部中斷為低優(yōu)先級,寫出設(shè)置IP的指令。分析:由給定的條件可知:IP寄存器中,PX1=1,PX0=1,其余位為0,即IP=00000101B=05H。用字節(jié)傳送指令設(shè)置:MOVIP,#05H或MOV0B8H,#05H用位操作指令設(shè)置:SETBPX0SETBPX1CLRPT0CLRPT1CLRPS項目6中斷及定時系統(tǒng)例:設(shè)80C51單片機的外部中斷為高優(yōu)先級,內(nèi)部中斷為低優(yōu)566.1.5中斷處理過程 中斷處理過程可分為中斷響應、中斷處理和中斷返回三個階段。1.中斷響應 中斷響應是CPU對中斷源中斷請求的響應,包括保護斷點和將程序轉(zhuǎn)向中斷服務程序的入口地址(通常稱矢量地址)。CPU并非任何時刻都響應中斷請求,而是在中斷響應條件滿足之后才會響應。 1)中斷響應條件 (1)有中斷源發(fā)出中斷請求。(2)中斷總允許位EA=1。(3)申請中斷的中斷源允許。 滿足以上基本條件,CPU一般會響應中斷,但CPU正在響應同級或高優(yōu)先級的中斷、正在執(zhí)行RETI中斷返回指令以及訪問專用寄存器IE和IP的指令時,CPU不響應中斷請求而在下一機器周期繼續(xù)查詢,否則,CPU在下一機器周期響應中斷。項目6中斷及定時系統(tǒng)6.1.5中斷處理過程項目6中斷及定時系統(tǒng)572)中斷響應過程 中斷響應過程包括保護斷點和將程序轉(zhuǎn)向中斷服務程序的入口地址。首先把中斷點的地址(斷點地址)壓入堆棧保護,然后將對應的中斷入口地址裝入程序計數(shù)器PC(由硬件自動執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,執(zhí)行中斷服務程序。MCS-51系列單片機各中斷源的入口地址由硬件事先設(shè)定,分配如表6-2所示。 因為5個中斷源的入口地址之間,只相隔8個存儲單元,一般的中斷服務程序是容納不下的,使用時通常在這些中斷入口地址處存放一條絕對跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到存儲器其他的任何空間,并且將中斷服務程序安排在相應的空間中。例如,若采用定時器T0中斷,其中斷入口地址為000BH,中斷服務程序名為TIME00,因此,指令形式為:ORG 000BH;T1中斷入口AJMP TIME00;轉(zhuǎn)向中斷服務程序中斷源入口地址外部中斷00003H定時/計數(shù)器0溢出中斷000BH外部中斷10013H定時/計數(shù)器1溢出中斷001BH串行口中斷0023H項目6中斷及定時系統(tǒng)2)中斷響應過程中斷源入口地址外部中斷00003H定時/計數(shù)582.中斷處理中斷處理就是執(zhí)行中斷服務程序。中斷服務程序從中斷入口地址開始執(zhí)行,到返回指令“RETI”為止,一般包括兩部分內(nèi)容,一是保護現(xiàn)場,二是完成中斷源請求的服務。 通常,主程序和中斷服務程序都會用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器,當CPU進入中斷服務程序用到上述寄存器時,會破壞原來存儲在寄存器中的內(nèi)容,一旦中斷返回,將會導致主程序的混亂,因此,在進入中斷服務程序后,一般要先保護現(xiàn)場,然后,執(zhí)行中斷處理程序,在中斷返回之前再恢復現(xiàn)場。例如:TIME00:;中斷服務程序CLREA;關(guān)中斷PUSHPSW;保護現(xiàn)場PUSHACCPUSHB........;中斷處理PUSHB;恢復現(xiàn)場PUSHACCPUSHPSWSETBEA;開中斷RETI;中斷返回項目6中斷及定時系統(tǒng)2.中斷處理項目6中斷及定時系統(tǒng)59編寫中斷服務程序時還需注意以下幾點: 1)各中斷源的中斷入口地址之間只相隔8個字節(jié),容納不下普通的中斷服務程序,因此,在中斷入口地址單元通常存放一條無條件轉(zhuǎn)移指令,可將中斷服務程序轉(zhuǎn)至存儲器的其它任何空間。 2)若要在執(zhí)行當前中斷程序時禁止其它更高優(yōu)先級中斷,需先用軟件關(guān)閉CPU中斷,或用軟件禁止相應高優(yōu)先級的中斷,在中斷返回前再開放中斷。 3)在保護和恢復現(xiàn)場時,為了不使現(xiàn)場數(shù)據(jù)遭到破壞或造成混亂,一般規(guī)定此時CPU不再響應新的中斷請求。因此,在編寫中斷服務程序時,要注意在保護現(xiàn)場前關(guān)中斷,在保護現(xiàn)場后若允許高優(yōu)先級中斷,則應開中斷。同樣,在恢復現(xiàn)場前也應先關(guān)中斷,恢復之后再開中斷。項目6中斷及定時系統(tǒng)編寫中斷服務程序時還需注意以下幾點:項目6中斷及定時系統(tǒng)603.中斷返回 中斷返回是指中斷服務完后,計算機返回原來斷開的位置(即斷點),繼續(xù)執(zhí)行原來的程序。中斷返回由中斷返回指令RETI來實現(xiàn)。該指令的功能是把斷點地址從堆棧中彈出,送回到程序計數(shù)器PC,此外,還通知中斷系統(tǒng)已完成中斷處理,并同時清除優(yōu)先級狀態(tài)觸發(fā)器。項目6中斷及定時系統(tǒng)3.中斷返回項目6中斷及定時系統(tǒng)614.中斷請求的撤除CPU響應中斷請求后即進入中斷服務程序,在中斷返回前,應撤除該中斷請求,否則,會重復引起中斷而導致錯誤。MCS-51各中斷源中斷請求撤消的方法各不相同,分別為:1)定時器中斷請求的撤除 對于定時器0或1溢出中斷,CPU在響應中斷后即由硬件自動清除其中斷標志位TF0或TF1,無需采取其它措施。2)串行口中斷請求的撤除 對于串行口中斷,CPU在響應中斷后,硬件不能自動清除中斷請求標志位TI、RI,必須在中斷服務程序中用軟件將其清除。例如:CLRTI;撤除發(fā)送中斷CLRRI;撤除接收中斷3)外部中斷請求的撤除 外部中斷可分為邊沿觸發(fā)型和電平觸發(fā)型,對于這兩種不同的中斷觸發(fā)方式,51單片機撤除它們的中斷請求的方法是不同的。 (1)對于邊沿觸發(fā)的外部中斷0或1,CPU在響應中斷后由硬件自動清除其中斷標志位IE0或IE1,無需采取其它措施。 (2)對于電平觸發(fā)的外部中斷,其中斷請求撤除方法較復雜。因為對于電平觸發(fā)外中斷,CPU在響應中斷后,硬件不會自動清除其中斷請求標志位IE0或IE1,同時,也不能用軟件將其清除,所以,在CPU響應中斷后,應立即撤除或引腳上的低電平。否則,就會引起重復中斷而導致錯誤。而CPU又不能控制或引腳的信號,因此,只有通過硬件再配合相應軟件才能解決這個問題。項目6中斷及定時系統(tǒng)4.中斷請求的撤除項目6中斷及定時系統(tǒng)62【例6.1】電路如圖6-3所示,按鍵控制信號燈,試利用兩個外部中斷編程實現(xiàn)以下功能:K0單獨按下,黃燈亮;K1單獨按下,綠燈亮。項目6中斷及定時系統(tǒng)【例6.1】電路如圖6-3所示,按鍵控制信號燈,試利用兩個外636.2定時/計數(shù)器6.2.1關(guān)于定時/計數(shù)器的幾個概念1.計數(shù)的概念 所謂計數(shù),就是計算事件發(fā)生的次數(shù)。2.定時的概念 生活中常見的定時有很多,如電視機定時關(guān)機、空調(diào)定時開關(guān)、微波爐定時加熱等等。 單片機中的定時器和計數(shù)器是一個東西,只不過計數(shù)器是記錄的外界發(fā)生的事情,而定時器則是由單片機提供一個非常穩(wěn)定的計數(shù)源。這個計數(shù)源就是由單片機的晶振經(jīng)過12分頻后獲得的一個脈沖源。在晶振位12MHz的情況下,這個計數(shù)脈沖的時間間隔就是1。項目6中斷及定時系統(tǒng)6.2定時/計數(shù)器6.2.1關(guān)于定時/計數(shù)器的幾個概念項643.計數(shù)器的容量 8051單片機中有兩個計數(shù)器,分別稱之為T0和T1,這兩個計數(shù)器都是16位,所以最大的計數(shù)量是65536,即0000H~FFFFH。 計數(shù)器的容量是16位,最大的計數(shù)量是65536,因此計到65536個就會產(chǎn)生溢出。問題是我們現(xiàn)實生活中,經(jīng)常會有少于65536個計數(shù)值的要求,如定時100s? 比如說,一個容器可以裝1000滴水,再裝的話就溢出了。現(xiàn)在要求裝只能100滴水,再裝的話就溢出了,怎么實現(xiàn)?對了,我們可以先裝900滴水就可以了。這種方式在單片機里面稱為預置數(shù),我要計100,那我就先放進65436,再來100個脈沖,就可以到65536了。 定時也是如此,每個脈沖是1,則計滿65536個脈沖需時65.536ms,如果我只要10ms怎么辦?10個ms為10000個,所以只要在計數(shù)器里面放進55536就可以了。項目6中斷及定時系統(tǒng)3.計數(shù)器的容量項目6中斷及定時系統(tǒng)656.2.2定時/計數(shù)器的結(jié)構(gòu)

從上一節(jié)我們已經(jīng)得知,單片機中的定時/計數(shù)器都可以有多種用途,下面我們具體了解它們的內(nèi)部結(jié)構(gòu)。 8051單片機內(nèi)部有兩個16位的可編程定時器/計數(shù)器,稱為定時器0(T0)和定時器1(T1),可編程選擇其作為定時器用或作為計數(shù)器用。此外,工作方式、定時時間、計數(shù)值、啟動、中斷請求等都可以由程序設(shè)定,其邏輯結(jié)構(gòu)如圖6-7所示。項目6中斷及定時系統(tǒng)6.2.2定時/計數(shù)器的結(jié)構(gòu)項目6中斷及定時系統(tǒng)666.2.3定時器/計數(shù)器的控制 上文提到的兩個特殊功能寄存器,TMOD和TCON,通過設(shè)置這兩個特殊功能寄存器來讓定時/計數(shù)器為我們服務。1.定時/計數(shù)器方式寄存器TMOD TMOD為T1、T2的工作方式寄存器,TMOD的低4位為T0的方式字段,高4位為T1的方式字段,它們的含義完全相同,其格式如下:項目6中斷及定時系統(tǒng)6.2.3定時器/計數(shù)器的控制項目6中斷及定時系統(tǒng)67GATE:門控位。用于控制T0或T1的啟動。當GATE=0時,計數(shù)器的啟動不受外部引腳信號或控制,只受定時器控制寄存器TCON中的啟動位TR0或TR1的控制;當GATE=1時,計數(shù)器的啟動不僅受TR0或TR1的控制,還要受外部引腳信號或控制。

C/T:功能選擇位。當=0時,定時功能,其計數(shù)脈沖為時鐘振蕩信號的12分頻,即對機器周期計數(shù);當=1時,計數(shù)功能,其計數(shù)脈沖是從T0(P3.4)或T1(P3.5)端輸入的外部脈沖。M1和M0:工作方式選擇位。定時器/計數(shù)器有4種工作方式,通過M1、M0的組合設(shè)置為不同的工作方式項目6中斷及定時系統(tǒng)GATE:門控位。用于控制T0或T1的啟動。當GATE=068M1M0工作方式說明00方式013位定時器/計數(shù)器01方式116位定時器/計數(shù)器10方式2自動重裝載8位定時器/計數(shù)器11方式3T0被拆為兩個8位的定時器/計數(shù)器;T1停止計數(shù)TMOD不能位尋址,只能用字節(jié)指令設(shè)置定時器工作方式,高4位定義T1,低4位定義T0。復位時,TMOD所有位均置0。項目6中斷及定時系統(tǒng)M1M0工作方式說明00方式013位定時器/計數(shù)器01692.定時器/計數(shù)器控制寄存器TCON(TimerControlRegister)項目6中斷及定時系統(tǒng)2.定時器/計數(shù)器控制寄存器TCON(TimerContr701)TF1:定時器1溢出標志位。當定時器1計數(shù)滿產(chǎn)生溢出時,由硬件自動置TF1=1。在中斷允許時,向CPU發(fā)出定時器1的中斷請求,進入中斷服務程序后,由硬件自動清0。在中斷屏蔽時,TF1可作查詢測試用,此時只能由軟件清0。2)TR1:定時器1運行控制位。由軟件置1或清0來啟動或關(guān)閉定時器1。當GATE=1,且為高電平時,TR1置1啟動定時器1;當GATE=0時,TR1置1即可啟動定時器1。3)TF0:定時器0溢出標志位。其功能及操作情況同TF1。4)TR0:定時器0運行控制位。其功能及操作情況同TR1。5)IE1:外部中斷1()請求標志位。6)IT1:外部中斷1觸發(fā)方式選擇位。7)IE0:外部中斷0()請求標志位。8)IT0:外部中斷0觸發(fā)方式選擇位。TCON中的低4位用于控制外部中斷,與定時器/計數(shù)器無關(guān)。當系統(tǒng)復位時,TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標志位或啟動定時器都可以用位操作指令。如SETBTR1、JBCTF1,LOOP等等。項目6中斷及定時系統(tǒng)1)TF1:定時器1溢出標志位。當定時器1計數(shù)滿產(chǎn)生溢出時716.2.4定時器/計數(shù)器的工作方式通過對定時器/計數(shù)器方式控制寄存器TMOD的介紹,已經(jīng)知道定時器/計數(shù)器有四種工作方式。1.工作方式0當TMOD的M1、M0位為00時,定時器/計數(shù)器就工作在方式0。方式0的計數(shù)器是由TL0的低5位與TH0的8位組成的13位計數(shù)器結(jié)構(gòu),TL0的高3位未用。當TL0的低5位進位時,TH0加1;TH0的最高位進位,產(chǎn)生溢出,使TF0=1,向CPU申請中斷。若CPU響應中斷,系統(tǒng)自動將TF0復位。圖6-9方式0中的13位計數(shù)器分配項目6中斷及定時系統(tǒng)6.2.4定時器/計數(shù)器的工作方式圖6-9方式0中的1372當=0時,多路開關(guān)連接12分頻器輸出,T0對機器周期計數(shù),此時T0為定時器。其定時時間為:當=1時,多路開關(guān)與T0(P3.4)相連,外部計數(shù)脈沖由T0腳輸入,當外部信號電平發(fā)生由0到1的負跳變時,計數(shù)器加1,此時T0為計數(shù)器。定時器初值計數(shù):設(shè)定時時間為t,計數(shù)初值為X,晶體振蕩器產(chǎn)生的振蕩信號的頻率為fosc,則定時時間的計算公式為:t=(計數(shù)最大值-X)×12/fosc方式0為13位計數(shù)器結(jié)構(gòu),其計數(shù)最大值為213=8192。設(shè)fosc為12MHz,經(jīng)12分頻后,每個計數(shù)脈沖的周期為1μs。當計數(shù)初值X為0時,定時時間最長,則方式0的最大定時時間為:tmax=(213-0)×12/fosc=8192×1μs=8.192ms項目6中斷及定時系統(tǒng)當=0時,多路開關(guān)連接12分頻器輸出,T073計數(shù)器初值計算:設(shè)計數(shù)次數(shù)為C,計數(shù)初值為X,則計數(shù)次數(shù)的計算公式如下:C=計數(shù)最大值-X當計數(shù)初值X為0時,計數(shù)次數(shù)最多,則方式0的最大計數(shù)次數(shù)為:Cmax=213-0=8192項目6中斷及定時系統(tǒng)計數(shù)器初值計算:項目6中斷及定時系統(tǒng)74【例6.2】用定時器0的工作方式0實現(xiàn)1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時器0的工作方式0實現(xiàn)1ms的定時,則:M1M0=00,T0工作在方式0;=0,此時T0為定時狀態(tài);GATE=0,此時定時器與外部中斷無關(guān);其余各位可以任意設(shè)置,這里取0值,即TMOD=00000000B=00H。第二步,計算初值,此時晶振頻率為12MHz。根據(jù)公式,得出得=1C18H=0001110000011000B因13位計數(shù)器中TL0的高3位未用,應填寫0,TH0占高8位,所以X的實際填寫值應為:=1110000011000=E018H即:TH0=E0H,TL0=18H。項目6中斷及定時系統(tǒng)【例6.2】用定時器0的工作方式0實現(xiàn)1ms的定時,在P1.75第三步,程序采用查詢的方式,如下:ORG00HLJMPMAINORG0100HMAIN:MOVTMOD,#00H;設(shè)定時器0為工作方式0SETBTR0;啟動定時器LOOP:M

溫馨提示

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

評論

0/150

提交評論