(1)基于8051內核單片機(如at89C51等)進行實驗
(2)模擬有急救車通過的交通燈控制實驗:允許急救車優先通過。當有急救車到達時,兩個方向上的紅燈亮(可以發光二極管模擬),以便讓急救車通過,假定急救車通過路口的時間為10秒,急救車通過后,交通燈恢復中斷前的狀態。實驗以按鍵開關為中斷申請,表示有急救車通過。
(3)uvision2/4軟件平臺上編寫、調試程序。
(4)Proteus軟件平臺上仿真。
本實驗中斷處理程序的應用,最主要的地方是如何保護進入中斷前的狀態,使得中斷程序執行完畢后能回到交通燈中斷前的狀態。要保護的地方,除了累加器ACC、標志寄存器PSW外,還要注意:第一是主程序中的延時程序和中斷處理程序中的延時程序不能混用,本實驗給出的程序中,主程序延時用的是R5、R6、R7,中斷延時用的是R3、R4和新的R5。第二,主程序中每執行一步經74LS273的端口輸出數據的操作時,應先將所輸出的數據保存到一個單元中。因為進入中斷程序后也要執行往74LS273端口輸出數據的操作,中斷返回時如果沒有恢復中斷前74LS273端口鎖存器的數據,則顯示往往出錯,回不到中斷前的狀態。還要注意一點,主程序中往端口輸出數據操作要先保存再輸出,例如有如下操作:
MOV A,#0F0H (0)
MOVX @R1,A (1)
MOV SAVE,A (2)
程序如果正好執行到(1)時發生中斷,則轉入中斷程序,假設中斷程序返回主程序前需要執行一句MOV A,SAVE指令,由于主程序中沒有執行(2),故SAVE中的內容實際上是前一次放入的而不是(0)語句中給出的0F0H,顯示出錯,將(1)、(2)兩句順序顛倒一下則沒有問題。發生中斷時兩方向的紅燈一起亮10秒,然后返回中斷前的狀態。
圖3.1 主程序框圖
圖3.2 中斷程序框圖
實驗步驟
74LS273的輸出O0~O7接發光二極管L1~L8,74LS273的片選CS273\接片選信號CS2,此時74LS273的片選地址為CFB0H~CFB7H之間任選。單脈沖輸出端P-接CPU板上的INT0。
實驗數據分析及處理
燒錄
程序運行結果
仿真結果
NAME T5 //中斷控制實驗
OUTPORT EQU 0CFB0H //端口地址
SAVE EQU 55H //保存從端口cfa0輸出的數據
CSEG AT 0000H
LJMP START
CSEG AT 0003H
LJMP INT
CSEG AT 0100H
START: SETB IT0
SETB EX0
SETB EA
MOV A,#11H //置首顯示碼
MOV SAVE,A //保存
ACALL DISP //顯示輸出
ACALL DE3S //延時3秒
LLL: MOV A,#12H //東西路口綠燈亮,南北路口紅燈亮
MOV SAVE,A
ACALL DISP
ACALL DE10S //延時10秒
MOV A,#10H //東西路口綠燈滅
MOV SAVE,A
ACALL DISP
MOV R2,#05H //東西路口黃燈閃爍5次
TTT: MOV A,#14H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#10H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,TTT
MOV A,#11H //紅燈全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S //延時0.2秒
MOV A,#21H //東西路口紅燈亮,南北路口綠燈亮
MOV SAVE, A
ACALL DISP
ACALL DE10S //延時10秒
MOV A,#01H //南北路口綠燈滅
MOV SAVE,A
ACALL DISP
MOV R2,#05H //南北路口黃燈閃爍5次
GGG: MOV A,#41H
MOV SAVE,A
ACALL DISP
ACALL DE02S
MOV A,#01H
MOV SAVE,A
ACALL DISP
ACALL DE02S
DJNZ R2,GGG
MOV A,#11H //紅燈全亮
MOV SAVE,A
ACALL DISP
ACALL DE02S //延時0.2秒
JMP LLL //轉LLL循環
DE10S: MOV R5,#100 //延時10秒
JMP DE1
DE3S: MOV R5,#30 //延時3秒
JMP DE1
DE02S: MOV R5,#02 //延時0.2秒
DE1: MOV R6,#200
DE2: MOV R7,#126
DE3: DJNZ R7,DE3
DJNZ R6,DE2
DJNZ R5,DE1
RET
INT: CLR EA
PUSH ACC //中斷處理
PUSH PSW
MOV A,R5
PUSH ACC
MOV A,#11H //紅燈全亮,綠、黃燈全滅
ACALL DISP
DEL10S: MOV R3,#100 //延時10秒
DEL1: MOV R2,#200
DEL2: MOV R5,#126
DEL3: DJNZ R5,DEL3
DJNZ R4,DEL2
DJNZ R3,DEL1
MOV A,SAVE //取SAVE中保存數據輸出到cfa0端口
ACALL DISP
POP ACC //出棧
MOV R5,A
POP PSW
POP ACC
SETB EA //允許外部中斷
RETI
DISP: MOV DPTR,#OUTPORT
CPL A
MOV P1,A
RET
END
以上的Word格式文檔51黑下載地址:
實驗4(1).docx
(348.11 KB, 下載次數: 4)
2021-7-4 12:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|