实验5 中断实验
———有急救车的交通灯控制实验
一、实验目的:
1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 二、实验设备:
CPU挂箱、8031CPU模块 三、实验内容:
在实验三的内容的基础上增加允许急救车优先通过的要求。当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。本实验以单脉冲为中断申请,表示有急救车通过。 四、实验原理:
交通灯的燃灭规律见实验三。
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。要保护的地方,除了累加器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秒,然后
单片机实验指导书 第26页
返回中断前的状态。
五、实验原理图:(同实验三) 六、实验步骤:
74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。单脉冲输出端P-接CPU板上的INT0。
七、程序框图: 主程序框图 中断程序框图
单片机实验指导书 第27页
八、参考程序:T5.ASM
NAME T5 ;中断控制实验 OUTPORT EQU 0CFB0H ;端口地址
SAVE EQU 55H ;save保存从端口cfa0输出的数据 CSEG AT 0000H LJMP START CSEG AT 0003H
LJMP INT CSEG AT 4100H
START: SETB IT0 SETB EX0 SETB EA
MOV A,#11H ; MOV SAVE,A ; ACALL DISP ; ACALL DE3S ;LLL: MOV A,#12H ; MOV SAVE,A ACALL DISP
ACALL DE10S ; MOV A,#10H ; MOV SAVE,A ACALL DISP
MOV R2,#05H ;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 ; MOV A,#21H ; MOV SAVE,A ACALL DISP
置首显示码 保存 显示输出 延时3秒
东西路口绿灯亮,南北路口红灯亮 延时10秒
东西路口绿灯灭 东西路口黄灯闪烁5次 红灯全亮 延时0.2秒
东西路口红灯亮,南北路口绿灯亮 单片机实验指导书 第28页
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
单片机实验指导书 第29页
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
MOVX @DPTR,A RET END
思考题:
修改程序,要求按下单脉冲按钮Pulse后,红灯状态由常亮方式改为闪烁方式,时间10秒,然后恢复原状态。
单片机实验指导书 第30页