实验5 外部中断(急救车与交通灯)-新
- 格式:doc
- 大小:57.00 KB
- 文档页数:7
实验五外部中断实验(急救车与交通灯)
一、实验要求
本实验模拟交通信号灯控制,一般情况下正常显示,灯亮的顺序如下所示:初始状态:东西、南北红灯亮3秒
10秒南北黄灯亮、东西红灯亮2秒
2秒南北红灯亮、东西绿灯亮10
当有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。
设急救车通过路口时间为10秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。
二、实验目的
1、学习外部中断技术的基本使用方法。
2、学习定时器定时的基本方法。
3、学习中断处理程序的编程方法。
三、实验电路图
四、实验说明
1、T0选择软件启动,选用方式1,定时时间为100ms,然后10秒、2秒、3秒时间分别由定时100次、20次和30次来实现由定时器T0来实现。
2、中断服务程序的关键是:
(1)保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
(2)必须在中断程序中设定是否允许中断重入,即设置EX0位。
本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC,以及中断程序使用
但非其专用的寄存器。
本例的中断程序保护了TH0、TL0并且在退出之前恢复了这三个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
本例没有涉及到这种情况。
对于80C51CPU外部中断由INT0(P3.2)端接入。
中断信号由单次脉冲发生器产生。
五、参考程序:
1、有急救车到达时,两个方向交通信号灯全红情况
ORG 0000H
LJMP MAIN1
ORG 0003H
LJMP WBZD0
ORG 0030H
MAIN1:MOV SP,#60H
SETB IT0
MOV IP,#00000001B
MOV IE,#10000001B
MOV B,#30
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10010000B
MOV P1,A
SETB TR0
L1:JBC TF0,L2
AJMP L1
L2:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ B,L1
CLR TR0
MAIN2:MOV R0,#100
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#00110000B
MOV P1,A
SETB TR0
L3:JBC TF0,L4
AJMP L3
L4:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,L3
CLR TR0
MAIN3:MOV R1,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#01010000B
MOV P1,A
SETB TR0
L5:JBC TF0,L6
AJMP L5
L6:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R1,L5
CLR TR0
MAIN4:MOV R2,#100
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10000100B
MOV P1,A
SETB TR0
L7:JBC TF0,L8
AJMP L7
L8:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R2,L7
CLR TR0
MAIN5:MOV R3,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10001000B
MOV P1,A
SETB TR0
L9:JBC TF0,L10
AJMP L9
L10:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R3,L9
CLR TR0
LJMP MAIN2
HERE:SJMP HERE
中断服务子程序:
WBZD0: PUSH TH0
PUSH TL0
PUSH A
PUSH P1
MOV A,#10010000B
MOV P1,A
MOV R4,#100
DY1:MOV R5,#100
DY2:MOV R6,#100
DY3:NOP
NOP
NOP
DJNZ R6,DY3
DJNZ R5,DY2
DJNZ R4,DY1
POP P1
POP A
POP TL0
POP TH0
RETI
2、没有急救车到达时,两个方向交通信号灯按交通规则工作
ORG 0000H
LJMP MAIN1
ORG 0030H
MAIN1:MOV SP,#60H
MOV B,#30
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10010000B
MOV P1,A
SETB TR0
L1:JBC TF0,L2
AJMP L1
L2:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ B,L1
CLR TR0
MAIN2:MOV R0,#100
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#00110000B
MOV P1,A
SETB TR0
L3:JBC TF0,L4
AJMP L3
L4:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,L3
CLR TR0
MAIN3:MOV R1,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#01010000B
MOV P1,A
SETB TR0
L5:JBC TF0,L6
AJMP L5
L6:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R1,L5
CLR TR0
MAIN4:MOV R2,#100
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10000100B
MOV P1,A
SETB TR0
L7:JBC TF0,L8
AJMP L7
L8:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R2,L7
CLR TR0
MAIN5:MOV R3,#20
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV A,#10001000B
MOV P1,A
SETB TR0
L9:JBC TF0,L10
AJMP L9
L10:MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R3,L9
CLR TR0
LJMP MAIN2 HERE:SJMP HERE。