|
(1)基于8051內(nèi)核單片機(jī)(如at89C51等)進(jìn)行實(shí)驗(yàn)
(2)模擬有急救車通過(guò)的交通燈控制實(shí)驗(yàn):允許急救車優(yōu)先通過(guò)。當(dāng)有急救車到達(dá)時(shí),兩個(gè)方向上的紅燈亮(可以發(fā)光二極管模擬),以便讓急救車通過(guò),假定急救車通過(guò)路口的時(shí)間為10秒,急救車通過(guò)后,交通燈恢復(fù)中斷前的狀態(tài)。實(shí)驗(yàn)以按鍵開關(guān)為中斷申請(qǐng),表示有急救車通過(guò)。
(3)uvision2/4軟件平臺(tái)上編寫、調(diào)試程序。
(4)Proteus軟件平臺(tái)上仿真。
本實(shí)驗(yàn)中斷處理程序的應(yīng)用,最主要的地方是如何保護(hù)進(jìn)入中斷前的狀態(tài),使得中斷程序執(zhí)行完畢后能回到交通燈中斷前的狀態(tài)。要保護(hù)的地方,除了累加器ACC、標(biāo)志寄存器PSW外,還要注意:第一是主程序中的延時(shí)程序和中斷處理程序中的延時(shí)程序不能混用,本實(shí)驗(yàn)給出的程序中,主程序延時(shí)用的是R5、R6、R7,中斷延時(shí)用的是R3、R4和新的R5。第二,主程序中每執(zhí)行一步經(jīng)74LS273的端口輸出數(shù)據(jù)的操作時(shí),應(yīng)先將所輸出的數(shù)據(jù)保存到一個(gè)單元中。因?yàn)檫M(jìn)入中斷程序后也要執(zhí)行往74LS273端口輸出數(shù)據(jù)的操作,中斷返回時(shí)如果沒有恢復(fù)中斷前74LS273端口鎖存器的數(shù)據(jù),則顯示往往出錯(cuò),回不到中斷前的狀態(tài)。還要注意一點(diǎn),主程序中往端口輸出數(shù)據(jù)操作要先保存再輸出,例如有如下操作:
MOV A,#0F0H (0)
MOVX @R1,A (1)
MOV SAVE,A (2)
程序如果正好執(zhí)行到(1)時(shí)發(fā)生中斷,則轉(zhuǎn)入中斷程序,假設(shè)中斷程序返回主程序前需要執(zhí)行一句MOV A,SAVE指令,由于主程序中沒有執(zhí)行(2),故SAVE中的內(nèi)容實(shí)際上是前一次放入的而不是(0)語(yǔ)句中給出的0F0H,顯示出錯(cuò),將(1)、(2)兩句順序顛倒一下則沒有問(wèn)題。發(fā)生中斷時(shí)兩方向的紅燈一起亮10秒,然后返回中斷前的狀態(tài)。
圖3.1 主程序框圖
圖3.2 中斷程序框圖
實(shí)驗(yàn)步驟
74LS273的輸出O0~O7接發(fā)光二極管L1~L8,74LS273的片選CS273\接片選信號(hào)CS2,此時(shí)74LS273的片選地址為CFB0H~CFB7H之間任選。單脈沖輸出端P-接CPU板上的INT0。
實(shí)驗(yàn)數(shù)據(jù)分析及處理
燒錄
程序運(yùn)行結(jié)果
仿真結(jié)果
NAME T5 //中斷控制實(shí)驗(yàn)
OUTPORT EQU 0CFB0H //端口地址
SAVE EQU 55H //保存從端口cfa0輸出的數(shù)據(jù)
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 //延時(shí)3秒
LLL: MOV A,#12H //東西路口綠燈亮,南北路口紅燈亮
MOV SAVE,A
ACALL DISP
ACALL DE10S //延時(shí)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 //延時(shí)0.2秒
MOV A,#21H //東西路口紅燈亮,南北路口綠燈亮
MOV SAVE, A
ACALL DISP
ACALL DE10S //延時(shí)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 //延時(shí)0.2秒
JMP LLL //轉(zhuǎn)LLL循環(huán)
DE10S: MOV R5,#100 //延時(shí)10秒
JMP DE1
DE3S: MOV R5,#30 //延時(shí)3秒
JMP DE1
DE02S: MOV R5,#02 //延時(shí)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 //延時(shí)10秒
DEL1: MOV R2,#200
DEL2: MOV R5,#126
DEL3: DJNZ R5,DEL3
DJNZ R4,DEL2
DJNZ R3,DEL1
MOV A,SAVE //取SAVE中保存數(shù)據(jù)輸出到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黑下載地址:
實(shí)驗(yàn)4(1).docx
(348.11 KB, 下載次數(shù): 4)
2021-7-4 12:53 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|