第5章單片機的中斷系統(tǒng)_第1頁
第5章單片機的中斷系統(tǒng)_第2頁
第5章單片機的中斷系統(tǒng)_第3頁
第5章單片機的中斷系統(tǒng)_第4頁
第5章單片機的中斷系統(tǒng)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第5章章 單片機的中斷系統(tǒng)單片機的中斷系統(tǒng) 51單片機的中斷系統(tǒng)是8位機中功能較強的,可以提供5個中斷源(52系列是6個),具有兩個中斷優(yōu)先級,可以實現(xiàn)兩級中斷嵌套。5.1 中斷的基本知識中斷的基本知識 5.1.1 中斷源及中斷結(jié)構(gòu) MCS-51單片機的5個中斷源分為兩種類型:一類是外部中斷源,包括 和 ;一類是內(nèi)部中斷源,包括兩個定時器/計數(shù)器(T0和T1)的溢出中斷和串行口的發(fā)送/接收中斷。MCS-51單片機中斷系統(tǒng)結(jié)構(gòu)圖5-1所示。0INT1INT1講圖圖5-1 MCS-51 單片機中斷系統(tǒng)結(jié)構(gòu)單片機中斷系統(tǒng)結(jié)構(gòu) 1. 外部中斷 它們的中斷請求信號有效方式分為電平觸發(fā)和脈沖觸發(fā)兩種。電

2、平方式是低電平有效,脈沖方式為負跳變觸發(fā)有效。對于電平方式,只要檢測到低電平信號即為有效申請。對于脈沖方式 ,則需要比較兩次檢測到的信號,才能確定中斷請求信號是否有效。中斷請求信號高低電平的狀態(tài)都應(yīng)該至少維持一個機器周期,以確保電平變化能被單片機檢測到。 2. 內(nèi)部中斷除外部中斷外,內(nèi)部還有TF0、TF1、TI/RI分別為定時/計數(shù)器溢出中斷和串行口的發(fā)送/接收中斷的中斷源。5.1.2 5.1.2 中斷控制中斷控制 MCS-51單片機設(shè)置了4個專用寄存器用于中斷控制,用戶通過設(shè)置其狀態(tài)來管理中斷系統(tǒng)。 1. 定時器控制寄存器(TCON) TCON的格式如圖5-2所示。 IT0IE0IT1IE1

3、TR0 TF0 TR1TF1D7 D6 D5 D4 D3 D2 D1 D0 TCON(88H)圖圖5-2 TCON的格式的格式 在該寄存器中,TR1、TR0用于定時/計數(shù)器的啟動控制,其余6位用于中斷控制,其作用如下: 1) IT0為外中斷0請求信號方式控制位。IT0=1為脈沖觸發(fā)方式(負跳變有效),IT0=0為電平方式(低電平有效)。 2) IE0為外部中斷0請求標志位。當CPU檢測到(P3.2)端有中斷請求信號時,由硬件置位,使IE0=1請求中斷,中斷響應(yīng)后轉(zhuǎn)向中斷服務(wù)程序時,由硬件自動清零。 3) IT1為外部中斷1請求信號方式控制位,其作用同IT0。 4) IE1為外部中斷1請求標志位

4、,其作用同IE0。 5) TF0(TF1)為定時/計數(shù)器溢出標志位,此標志的作用將在5.3節(jié)說明。 2. 串行口控制寄存器(SCON)SCON的格式如圖5-3所示。RITIRB8TB8REN SM2 SM1SM0 D7 D6 D5 D4 D3 D2 D1 D0 TCON (98H)圖圖5-3 SCON的格式的格式 SCON中的高6位用于串行口控制,低2位(RI、TI)用于中斷控制,其作用如下: 1) TI為串行口發(fā)送中斷請求標志位,發(fā)送完一幀串行數(shù)據(jù)后,由硬件置1,其清零必須由軟件完成。 2) RI為串行口接收中斷請求標志位,接收完一幀串行數(shù)據(jù)后,由硬件置1,其清零必須由軟件完成。 在在MCS

5、-51單片機串行口中,以單片機串行口中,以TI和和RI的邏輯的邏輯“或或”作為一作為一個內(nèi)部中斷源,二者之一置位就可以產(chǎn)生串行口中斷請求,然后個內(nèi)部中斷源,二者之一置位就可以產(chǎn)生串行口中斷請求,然后在中斷服務(wù)程序中測試這兩個標志位,以決定是發(fā)送中斷還是接在中斷服務(wù)程序中測試這兩個標志位,以決定是發(fā)送中斷還是接收中斷。收中斷。3. 中斷允許控制寄存器(IE)中斷允許控制寄存器的格式如圖5-4所示。EX0ET0EX1ET1ES EA D7 D6 D5 D4 D3 D2 D1 D0 IE (A8H)圖圖5-4 中斷允許控制寄存器的格式中斷允許控制寄存器的格式 寄存器中用于控制中斷的共6位,實現(xiàn)中斷管

6、理,其作用如下。EA為中斷允許總控制位。EA=1時,CPU開放中斷;EA=0時,CPU屏蔽所有中斷請求。ES、ET1、EX1、ET0、EX0為對應(yīng)的串行口中斷、定時/計數(shù)器1中斷、外部中斷1中斷、定時器/計數(shù)器0中斷、外部中斷0中斷的中斷允許位。對應(yīng)位為1時,允許其中斷,對應(yīng)位為0時,禁止其中斷。MCS-51單片機中斷系統(tǒng)的管理是由中斷允許總控制EA和各中斷源的控制位聯(lián)合作用實現(xiàn)的,缺一不可。MCS-51單片機系統(tǒng)復(fù)位后,IE各位均清零,即禁止所有中斷。 4. 中斷優(yōu)先級控制寄存器(IP)中斷優(yōu)先級控制寄存器的格式如圖5-5所示。PX0PT0PX1PT1PS D7 D6 D5 D4 D3 D2

7、 D1 D0 IP (B8H)圖圖5-5 中斷優(yōu)先級控制寄存器的格式中斷優(yōu)先級控制寄存器的格式圖5-5 中斷優(yōu)先級控制寄存器的格式 MCS-51單片機規(guī)定了兩個中斷優(yōu)先級:高級中斷和低級中斷。用中斷優(yōu)先級寄存器(IP)的5位狀態(tài)管理5個中斷源的優(yōu)先級別,即PS、PT1、TX1、PT0、PX0分別對應(yīng)串行口中斷、定時器/計數(shù)器1中斷、外部中斷1中斷、定時器/計數(shù)器0中斷、外部中斷0中斷。當相應(yīng)位為1時,設(shè)置其為高級中斷;相應(yīng)位為0時,設(shè)置其為低級中斷。5.1.3 中斷優(yōu)先級結(jié)構(gòu) MCS-51中斷系統(tǒng)具有兩級優(yōu)先級(由IP寄存器把各中斷源的優(yōu)先級分為高優(yōu)先級和低優(yōu)先級),它們遵循下列兩條基本原則:

8、1). 為了實現(xiàn)中斷嵌套,高優(yōu)先級中斷請求可以中斷低優(yōu)先級的中斷服務(wù),反之,則不允許;2). 同等優(yōu)先級中斷源之間不能中斷對方的中斷服務(wù)過程。為了實現(xiàn)上述兩條原則,中斷系統(tǒng)內(nèi)部包含兩個不可尋址的優(yōu)先級狀態(tài)觸發(fā)器。其中一個用來指示某個高優(yōu)先級的中斷源正在得到服務(wù),并阻止所有其他中斷的響應(yīng);另一個觸發(fā)器則指出某低優(yōu)先級的中斷正得到服務(wù),所有同級的中斷都被阻止,但不阻止高優(yōu)先級中斷源。當同時收到幾個同一優(yōu)先能的中斷時,響應(yīng)哪一個中斷源取決于內(nèi)部查詢順序。其優(yōu)先級排列如圖5-6所示。中斷源外部中斷0定時器/計數(shù)器0溢出定時器/計數(shù)器1溢出串行口外部中斷1同級內(nèi)中斷優(yōu)先級別最高最低 圖圖5-6 中斷優(yōu)先

9、級排列中斷優(yōu)先級排列5.1.4 中斷服務(wù)程序入口地址 MCS-51單片機5個中斷源的中斷服務(wù)程序入口地址如表5-1所示。表表5-1 MCS-51中斷服務(wù)程序入口地址表中斷服務(wù)程序入口地址表5.1.5 中斷請求的撤除在中斷請求被響應(yīng)前,中斷源發(fā)出的中斷請求由CPU鎖存在特殊功能寄存器TCON和SCON的相應(yīng)中斷標志位中。一旦某個中斷請求得到響應(yīng),CPU必須把它的響應(yīng)標志位復(fù)位成0狀態(tài),否則MCS-51就會因中斷未能得到及時撤除而重復(fù)響應(yīng)同一中斷請求,這是絕對不允許的。MCS-51單片機有5個中斷源,但實際上只分屬于3種中斷類型。這3種類型是:外部中斷、定時器溢出中斷和串行口中斷。對于這3種中斷類

10、型的中斷請求,其撤除方法是不同的。1. 定時器溢出中斷請求的撤除 TF0和TF1是定時器溢出中斷標志位,它們因定時器溢出中斷請求的輸入而置位,因定時器溢出中斷得到響應(yīng)而自動復(fù)位成0狀態(tài)。因此,定時器溢出中斷源的中斷請求是自動撤除的,用戶根本不必專門為它們撤除。2. 串行口中斷請求的撤除TI和RI是串行口中斷的標志位,中斷系統(tǒng)不能自動將它們撤除,這是因為MCS-51進入串行口中斷服務(wù)程序后常需要對它們進行檢測,以測定串行口發(fā)生了接收中斷還是發(fā)送中斷。為了防止CPU再次響應(yīng)這類中斷,用戶應(yīng)在中斷服務(wù)程序的適當位置處通過指令將它們撤除: CLR TI ; 撤除發(fā)送中斷 CLR RI ; 撤除接收中斷

11、若采用字節(jié)指令,則也可采用如下指令: ANL SCON,#0FCH ;撤除發(fā)送和接收中斷 或采用位判斷清除指令: JBC TI, rel; 判斷TI標志是否置位,若置位則跳轉(zhuǎn)并撤除發(fā)送中斷 JBC RI, rel; 判斷RI標志是否置位,若置位則跳轉(zhuǎn)并撤除接收中斷 3. 外部中斷的撤除外部中斷請求有兩種觸發(fā)方式:電平觸發(fā)和負邊沿觸發(fā)。對于這兩種不同的中斷觸發(fā)方式,MCS-51撤除它們的中斷請求的方法是不相同的。在負邊沿觸發(fā)方式下,外部中斷標志IE0和IE1是依靠CPU兩次檢測 或 上觸發(fā)電平狀態(tài)而設(shè)置的。因此,芯片設(shè)計者使CPU在響應(yīng)中斷時自動復(fù)位IE0或IE1,就可撤除 或 上的中斷請求,因

12、為外部中斷源在中斷服務(wù)程序時是不可能再在 或 上產(chǎn)生負邊沿,而使相應(yīng)的中斷標志IE0或IE1置位。 在電平觸發(fā)方式下,外部中斷標志IE0和IE1是依靠CUP檢測或上低電平而置位的。盡管CPU響應(yīng)中斷時相應(yīng)中斷標志IE0或IE1,能自動復(fù)位成狀態(tài),但若外部中斷源不能及時撤除它在或上的低電平,就會再次使已經(jīng)變的中斷IE0或IE1置位,這是絕對不允許的。0INT1INT0INT1INT0INT1INT因此,電平觸發(fā)型外部中斷請求的撤除必須使或上的低電平隨著其中斷被CPU響應(yīng)而變?yōu)楦唠娖?。一種可供采用的電平型外部中斷的撤除電路如圖5-7所示。INT08051P1.0Q DSDCP1外部中斷信號圖圖5-

13、7 電平型外部中斷的撤除電路電平型外部中斷的撤除電路由圖可見,當外部中斷源產(chǎn)生中斷請求時,D觸發(fā)器的復(fù)位成狀態(tài),Q端的低電平被送到 ,該低電平被8051檢測后就使中斷標志IE0置。8051響應(yīng) 上的中斷請求可使 中斷服務(wù)程序執(zhí)行,故可以在中斷服務(wù)程序開頭安排如下程序來使 上的電平拉高。INSVR:ORL P1, #01H ANL P1, #0FEH CLR IE0 END 8051執(zhí)行上述程序就可使P1.0上產(chǎn)生一個寬度為兩個機器周期的負脈沖。在該負脈沖作用下,D觸發(fā)器被置位成1狀態(tài), 上的電平也因此而變高,從而撤除了其上的中斷請求。0INT0INT0INT0INT0INT5.1.6 中斷系統(tǒng)

14、的初始化 MCS-51中斷系統(tǒng)功能,是可以通過上述特殊功能寄存器進行統(tǒng)一管理的,中斷系統(tǒng)初始化是指對這些特殊功能的寄存器中各控制位進行賦值。中斷系統(tǒng)初始化步驟如下:1). 置位相應(yīng)中斷源的中斷允許;2). 設(shè)定所有中斷源的中斷優(yōu)先級; 3). 若為外部中斷,則應(yīng)規(guī)定低電平還是負邊沿的中斷觸發(fā)方式。 例如,用 為低電平觸發(fā)的中斷系統(tǒng)初始化程序。 1. 采用位操作指令 SETB EA ; SETB EX0 ; 開 中斷 中斷 SETB PX0 ; 令 為 高優(yōu)先級 CLR IT0 ; 令 為 電平觸發(fā)0INT0INT0INT0INT 2. 采用字節(jié)操作指令 MOV IE,#81H ; 開 中斷 O

15、RL IP,#01H ; 令 為高優(yōu)先級 ORL TCON,#0FEH ; 令 電平觸發(fā) 顯然,采用位操作指令進行中斷系統(tǒng)初始化是比較簡單的。因為用戶不必記住各控制位在寄存器中的位置,只需按各控制位名稱來設(shè)置,而各控制位名稱是比較容易記憶的。0INT0INT0INT5.2 中斷的編程及應(yīng)用實例中斷的編程及應(yīng)用實例 C51語言編譯器支持在C語言源程序中直接編寫51單片機的中斷服務(wù)函數(shù)程序,從而減輕了采用匯編語言編寫中斷服務(wù)程序的煩瑣程序。為了能在C語言源程序中直接編寫中斷服務(wù)函數(shù),C51語言編譯器對函數(shù)的定義有所擴展,增加了一個擴展關(guān)鍵字interrupt。關(guān)鍵字interrupt是函數(shù)定義時的

16、一個選項,加上這個選項即可將函數(shù)定義成中斷服務(wù)函數(shù)。 定義中斷服務(wù)函數(shù)的一般形式為: 函數(shù)類型 函數(shù)名(形式參數(shù)表) interrupt n using minterrupt 后面的n 是中斷號,n的取值范圍為031。編譯器從8n+3處產(chǎn)生中斷向量,具體的中斷號n和中斷向量取決于不同的51系列單片機芯片。對于MCS-51單片機而言,外部中斷0中斷、定時器/計數(shù)器0溢出中斷、外部中斷1中斷、定時器/計數(shù)器1溢出中斷、串行口發(fā)送/接收中斷對應(yīng)的中斷號分別為0、1、2、3、4。using后面的m是選擇哪個工作寄存器區(qū),分別為0、1、2、3?!纠?-1】 外部中斷在本實例中,首先通過P1.7口點亮發(fā)光

17、二極管,然后外部輸入一脈沖串,則發(fā)光二極管亮、暗交替。電路如圖5-8所示。+5VP1.7AT89C510INT圖圖5-8 發(fā)光二極管交替亮、暗發(fā)光二極管交替亮、暗 編寫程序如下: #includesbit P1_7=P17;void interrupt0( ) interrupt 0 using 0 /定義定時器0 P1_7=!P1_7;void main( ) EA=1; /開中斷 IT0=1; /外部中斷0脈沖觸發(fā) EX0=1; /外部中斷0 P1_7=0; do while(1);【例5-2】如圖5-9所示,8只LED陰極接至單片機P0口,兩開關(guān)S0、S1分別接至單片機引腳P3.2和P3

18、.3。 編寫程序控制LED狀態(tài):按下S0后,如果8只LED為熄滅狀態(tài),則點亮,如果8只LED為點亮狀態(tài),則保持;按下S1后,不管8只LED是熄滅狀態(tài)還是點亮狀態(tài),都變?yōu)殚W爍狀態(tài)。P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.78051 P3.2 P3.3+5V圖圖5-9 利用中斷控制發(fā)光二極管利用中斷控制發(fā)光二極管2講S0S1 程序代碼如下:#includevoid delay(unsigned int d) /定義延時子函數(shù)while(-d0);void main()P0=0 xff; /熄滅LEDEA=1;/開總中斷EX0=1; /開外中斷0EX1=1;/開外中斷1IT0=

19、1;/外中斷0脈沖觸發(fā)方式IT1=1;/外中斷1脈沖觸發(fā)方式for(;) /延時等待中斷發(fā)生;void INT0_ISR( ) interrupt 0 /外中斷0中斷服務(wù)函數(shù)P0=0 x00;PX0=0;PX1=1;void INT1_ISR( ) interrupt 2 /外中斷1中斷服務(wù)函數(shù)while(1) delay(5000); P0=0 x00; delay(5000); P0=0 xff; 在本例中,外中斷0、外中斷1均設(shè)為脈沖觸發(fā)方式,且為滿足功能要求。注意:中斷的優(yōu)先級別是不同的 【例5-3】利用外中斷控制外設(shè)的數(shù)據(jù)傳送如圖5-10所示,外設(shè)數(shù)據(jù)經(jīng)P1口輸入單片機,每準備好一個

20、數(shù)據(jù),發(fā)出選通信號,使觸發(fā)器輸出1再經(jīng)非門得0至外中斷/INT0,向CPU發(fā)出中斷請求,CPU響應(yīng)這個中斷請求后,在中斷處理程序中先撤除中斷請求信號,(通過P3.0=0,使/INT0=1),再由P1口輸入數(shù)據(jù)到單片機內(nèi)部。P1P3.0INT08051選通信號Q CLR DCLK+5V數(shù)據(jù) 圖圖5-10 利用中斷控制數(shù)傳送利用中斷控制數(shù)傳送 程序代碼如下:#includeunsigned char temp; /定義臨時變量,來存取送到P1口的數(shù)據(jù)sbit P3_0=P30; /定義位變量void main( )P3_0=1;/初始化外中斷0引腳,其為高電平EA=1;/開總中斷EX0=1;/開外

21、中斷0IT0=1;/外中斷脈沖觸發(fā)方式for( ; ; )/延時等待中斷發(fā)生 ; void INT0_ISR() interrupt 0 /外中斷0中斷服務(wù)函數(shù)P3_0=0;/恢復(fù)外中斷0引腳電平,除中斷請求信號P1=0 xff;/初始化P1temp=P1;/讀取送至P1口的數(shù)據(jù)MCS-51單片機的外部中斷源只有兩個,當需要擴展時,可以采用例5-4、例5-5、例5-6的方法進行外部中斷源的擴展?!纠?-4】利用定時/計數(shù)器擴展外部中斷。利用定時/計數(shù)器擴展外部中斷源,是把定時/計數(shù)器溢出中斷做成外部中斷,即將定時/計數(shù)器設(shè)置為計數(shù)模式,然后把信號接到計數(shù)器相應(yīng)的引腳上(T0或T1)。為了使每出

22、現(xiàn)一個從高到低的脈沖時都產(chǎn)生一個中斷,可以把定時器設(shè)置為自動重裝模式,令重裝值為FFH。當計時器檢測到從高到低的脈沖時,定時器將溢出,這時將產(chǎn)生一個中斷請求。程序代碼如下: #include void main(void).TMOD=0 x66;/兩個定時/計數(shù)器都設(shè)置成8位模式 TH1=0 xff; /設(shè)定重裝值TH0=0 xff;TL0=0 xff;TL1=0 xff;TCON=0 x50;/開始計數(shù)IE=0 x9f; /中斷使能./*定時器0中斷服務(wù)程序*/void timer0_int(void) interrupt 1. /*定時器1中斷服務(wù)程序*/void timer1_int(v

23、oid) interrupt 3while(!TI) . 這種方法還是有一定的限制的。首先,它只能是邊沿觸發(fā),所以當需要的是一個電平觸發(fā)的中斷時,就要在中斷中不斷地對T0或T1進行采樣,直到它們變?yōu)楦?。其次,檢測到下降沿和產(chǎn)生終端之間一個指令周期的延時,這是因為在檢測到下降沿一個指令周期之后,計數(shù)器才加1。如果使用的8051單片機有多個定時器,而且有外部引腳,可以用這種方法來擴充邊沿觸發(fā)的外部中斷。值得重申的一點是,當使用定時器作為外部中斷時,它以前的功能將不能使用,除非用軟件對它進行復(fù)位。【例5-5】利用外部中斷和查詢相結(jié)合的方法擴展外部中斷。 如果系統(tǒng)有多個外中斷請求源,可以按照它們的輕重

24、緩急進行排隊,把其中最高級別的中斷源直接連接到單片機外中斷0輸入引腳,其余的外部中斷請求可以用利用邏輯器件通過“與”或者“或”的辦法連接到單片機外中斷1引腳,同時還連接到輸入/輸出端口(如P0或P1)的若干引腳,用來查詢判斷具體是哪一個中斷請求源發(fā)生的中斷事件。如圖5-11所示,利用單片機擴展5個外部中斷源,中斷的優(yōu)先次序這S0S4,其中S0接到外部中斷0上,S1S4通過“與”門接到外部中斷1上;單片機的P1.4P1.7接4個發(fā)光二極管用來作為輸出指示;當有S1S4其中一個外部中斷發(fā)生時,相應(yīng)的發(fā)光二極管VD1VD4點亮;當S0外部中斷發(fā)生時,4個發(fā)光二極管全亮。8051S0S1S2S3 S4

25、INT0INT1P1.0P1.1 P1.2P1.3P1.4P1.5P1.6 P1.7&+5V+5VVD1VD2VD3 VD4 圖圖5-11 外部中斷擴展電路外部中斷擴展電路程序代碼如下:#includesbit P1_0=P10;/定義位變量sbit P1_1=P11;.sbit P1_7=P17;void main()P1=0 xff;/熄滅LEDEA=1;/開總中斷EX0=1;/開外中斷0EX1=1;/開外中斷1IT0=0;/外中斷0脈沖觸發(fā)方式 IT1=0;/外中斷1脈沖觸發(fā)方式PX0=1;/外中斷0高優(yōu)先級PX1=0;/外中斷1低優(yōu)先級for( ; ; )/延時等待中斷發(fā)生 ;

26、 void INT0_ISP() interrupt 0/外中斷0服務(wù)函數(shù)P1=0 x0f; /P1口高4位置0,點亮4個LED void INT1_ISR() interrupt 2/外中斷1服務(wù)函數(shù)if(P1_0=0) P1=P1&0 xef;/點亮VD1.if(P1_3=0) P1=P1&0 x7f;/點亮VD4 【例5-6】利用優(yōu)先編碼器擴展外部中斷。從例5-5可以看出,利用與門、或門擴展外中斷所占端口引腳較多,在實際應(yīng)用中,還可以采用優(yōu)先級解碼芯片如74LS148,把多個中斷源信號作為一個中斷。如圖5-12所示,在有8個中斷源的情況下,經(jīng)74LS148優(yōu)先譯碼后,只占

27、3個I/O引腳,即用3根引腳可分辨8個中斷源,從而節(jié)省了I/O口資源。8051S0R X 8+5VD0A0A1A2G74LS148P0.0P0.1P0.2INT0S1S2S3S4S5S6S7D1D2D3D4D5D6D7圖圖5-12 利用優(yōu)先編碼器擴展外部中斷的電路利用優(yōu)先編碼器擴展外部中斷的電路程序代碼如下:#includeunsigned char status;/定義一變量,用來讀取P0口狀態(tài)void main( )EA=1;/開總中斷EX0=1;/開外中斷0PX0=1;/外中斷0高優(yōu)先級for( ; ; )/延時等待中斷發(fā)生 ; void INT0_ISR( ) interrupt 0

28、/外中斷0中斷服務(wù)函數(shù)status=P0&0 x07; /讀取P0口低三位狀態(tài),不同的值 switch(status) /對應(yīng)不同的中斷源 case0: /處理中斷源0break; case 7: /處理中斷源7 break; 【例5-7】中斷嵌套。 外部中斷/INT1觸發(fā)后,啟動計數(shù)器0。計數(shù)達到10次后停止計數(shù),啟動定時器1。由定時器1控制定時,由P1.7輸出周期為200ms的方波信號,接收兩次中斷后關(guān)閉方波發(fā)生器,P1.7置低。程序如下:#include#define uchar unsigned charuchar date a,b,c;void interrupt0( ) i

29、nterrupt 2 using 1 /定義外部中斷1a+; void timer0( ) interrupt 1 using 2/定義計數(shù)器0(T0)TL0=0 xff;b+;void time1( ) interrupt 3 using 3/定義定時器1(T1)TH1=0 x06;c-;sbit P1_7=P17;void mian(void)P1_7=1; /初始化TCON=0 x01; /外部中斷為低電平觸發(fā)方式TMOD=0 x27; /啟動定時器1和計數(shù)器0,工作方式2IE=0 x8b;/開中斷a=0;do while(a!=1);/等待外部中斷P1_7=!P1_7;/取反TL0=0

30、 xff;/初值TH0=0 x06;/初值b=0;TR0=0;/停止計數(shù)器0工作TR1=1;/啟動定時器1do c=0 xc8;do while(c!=0); /定時輸出方波P1_7=!P1_7; while(a!=3);/等待兩次外部中斷TR1=0;/關(guān)定時器1P1_7=0;EA=0;/關(guān)總中斷EX0=0;/禁止外部中斷【例5-8】利用外部中斷實現(xiàn)發(fā)光二極管的簡單控制。本例將介紹一個中斷使用的演示程序,通過這個程序,讀者可以了解到各種中斷的使用方法。程序如下:#includesbit led0=P10;/定義I/O引腳sbit led1=P11;sbit led2=P12;sbit led3

31、=P13;bit FINT0;/全局變量及位標志定義bit FINT1;bit FT0;bit FT1;bit FT2;unsigned char T0_10ms;unsigned char T0_50ms;unsigned char T0_100ms;void int_0( );/函數(shù)聲明void int_1( );void timer_0( );void timer_1( );void serial_1( );void timer_2( );void initial();/用戶函數(shù)聲明 初始化void main(void)initial( );while(1)if(FINT0)/中斷0到,

32、則進入循環(huán)體FINT0=0;led0=0;/中斷/INT0時燈點亮 led1=0;led2=0;led3=0;if(FINT1)/中斷1到,則進入循環(huán)體 FINT1=0; led0=1;/中斷/INT1時燈熄滅led1=1; led2=1;led3=1;if(FT0)FT0=0;if(+T0_10ms30) T0_10ms=0;/未在初始化里設(shè)置定時器void initial()EA=1;/CPU所有中斷開EX0=1;/中斷開 IT0=1;/低電平觸發(fā)EX1=1;/中斷開IT1=1;/低電平觸發(fā)return;void int_0() interrupt 0 using 0/中斷/INT0FINT0=1;void int_1() interrupt 2 using 1/中斷/INT2FINT1=1;void timer_0() interrupt 1 using 2/定時器0中斷FT0=1;void timer_1() i

溫馨提示

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

提交評論