實驗二:外部中斷實驗 一、實驗目的 1.掌握外部中斷技術的基本使用方法; 2.掌握中斷處理程序的編寫方法; 3、進一步掌握Keil和Proteus軟件的用法。 二、實驗說明 1.外部中斷的初始化設置共有三項內容:中斷總允許即EA=1,外部中斷允許即EXi=1(i=0或1),中斷方式設置。中斷方式設置一般有兩種方式:電平方式和脈沖方式,本實驗選用后者,其前一次為高電平后一次為低電平時為有效中斷請求。因此高電平狀態和低電平狀態至少維持一個周期,中斷請求信號由引腳INT0(P3.2)和INT1(P3.3)引入,本實驗由INT0(P3.2)引入。 2.中斷服務的關鍵: A.保護進入中斷時的狀態。 堆棧有保護斷點和保護現場的功能使用PUSH指令,在轉中斷服務程序之前把單片機中有關寄存單元的內容保護起來。 B.必須在中斷服務程序中設定是否允許中斷重入,即設置EX0位。 C.用POP指令恢復中斷時的現場。 3.中斷控制原理: 中斷控制是提供給用戶使用的中斷控制手段。實際上就是控制一些寄存器,51系列用于此目的的控制寄存器有四個:TCON 、IE 、SCON 及IP。 4.中斷響應的過程: 首先中斷采樣然后中斷查詢最后中斷響應。采樣是中斷處理的第一步,對于本實驗的脈沖方式的中斷請求,若在兩個相鄰周期采樣先高電平后低電平則中斷請求有效,IE0或IE1置“1”;否則繼續為“0”。所謂查詢就是由CPU測試TCON和SCON中各標志位的狀態以確定有沒有中斷請求發生以及是那一個中斷請求。中斷響應就是對中斷請求的接受,是在中斷查詢之后進行的,當查詢到有效的中斷請求后就響應一次中斷。 INT0端接單次脈沖發生器。P1口接LED的并行口JD3,以查看LED在每次中斷時的移位過程。 三、實驗內容及步驟 1、用Keil軟件編輯中斷控制應用程序,采用P3.2接入開關K0,P3.3接入開關K1引入外部中斷0和1,外部中斷0服務程序點亮8支LED,外部中斷1服務程序實現P1口驅動流水燈,0.5s變換一次。 2、用proteus軟件繪制實驗所需硬件電路,并進行仿真運行。 3、用試驗箱載入程序并運行程序: 用P1口做輸出口,接八位邏輯電平顯示,P3.2,P3.3接開關輸入外部中斷信號,中斷程序功能使發光二極管循環點亮。 (1)最小系統中插上80C51核心板,用扁平數據線連接MCU的P1口與八位邏輯電平顯示模塊JD3。 (2)用串行數據通信線連接計算機與實驗箱的RS232串口,將實驗箱RS232串口的端子RXD和TXD插到實驗芯片模塊的P3.0和P3.1插孔中,建立PC機與實驗箱單片機芯片的串行通信聯系。 (3)打開電腦桌面上的Keil uVision4仿真軟件,建立實驗的項目文件夾和項目文件,在項目文件的源文件界面上輸入實驗源程序,并對源程序進行編譯,直到編譯無誤,并連接生成hex目標文件。 (4)打開電腦桌面上的STC燒錄軟件,下載并裝載目標程序到實驗單片機芯片,然后上電全速運行程序,觀察程序運行的結果:程序功能使發光二極管循環點亮的流水燈的效果。 四、源程序 實驗程序一: #include<reg51.h> void delay(unsigned int d) //定義延時子函數 { while(--d>0); } void main() { P1=0xff; //熄滅LED EA=1; EX0=1; EX1=1; IT0=1; IT1=1; for(;;) {;} } void INT0_ISR() interrupt 0 //外中斷0服務函數 { P1=0x00; PX0=0; PX1=1; } void INT1_ISR() interrupt 2 //外中斷1服務函數 { while(1) { delay(15000); P1=0xfe; delay(15000); P1=0xfd; delay(15000); P1=0xfb; delay(15000); P1=0xf7; delay(15000); P1=0xef; delay(15000); P1=0xdf; delay(15000); P1=0xbf; delay(15000); P1=0x7f; PX0=1; PX1=0; } }
這個程序錯在哪里?
|