1、实验要求: 本实验模拟交通信号灯控制,一般情况下正常显示,有 急救车到达时,两个方向交通信号灯全红,以便让急救 车通过。设急救车通过路口时间为10秒,急救车通过后, 交通恢复正常,本实验用单次脉冲申请外部中断,表示 有急救车通过。 实验目的: 1、学习外部中断技术的基本使用方法。 2、学习中断处理程序的编程方法。 实验说明: 中断服务程序的关键是: 1、保护进入中断时的状态,并在退出中断之前恢复进入 时的状态。 2、本例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程 序使用但非其专用的寄存器。本例中没有用到其他寄存器所以没有保护和恢复现
2、场。。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。对于8051CPU 外部中断由INTO(P3.2)端接入。中断信号由单次脉冲发生器产生。对中断的处理可参见硬件实验十一, 本实验提供了用单片机的I/O端口控制交通信号灯方法,51用P1口。 原理图: 汇编程序: Flash equ 0 ; LED状态 STOP equ 1 SR equ p1.0 ; 南北红灯,接LED0 SY equ p1.1 ; 南北黄灯,接LED1
3、 SG equ P1.2 ; 南北绿灯,接LED2 ER equ P1.3 ; 东西红灯 ,接LED3 EY equ P1.4 ; 东西黄灯 ,接LED4 EG equ p1.5 ; 东西绿灯 ,接LED5 ljmp Start org 3 ;INT0中断服务程序入口地址 setb STOP ; 南北, 东西均红灯
4、 reti Start: mov SP, #70 mov TCON, #01h ; INT0边沿触发中断方式 mov IE, #81h ; EA, EX0 中断允许 setb SR ; 南北, 东西均红灯 clr SY clr SG setb ER clr EY clr EG clr STOP Loop
5、 jb STOP, AllRed ;若搬动了单脉冲发生器,进入中断使STOP等于1,转到全红 setb SR ;否则南北红灯亮, 东西绿灯亮 clr SY clr SG clr ER clr EY setb EG mov a, #20 ;南北红灯亮, 东西绿灯亮持续一段时间 call Delay jb STOP, AllRed
6、 ;若搬动了单脉冲发生器,进入中断使STOP等于1,转到全红 setb SR ;否则南北红灯, 东西黄灯闪 clr SY clr SG clr ER clr EY clr EG clr Flash mov r7, #9 Loop1: mov c, Flash mov EY, c mov a, #1 c
7、all Delay cpl Flash djnz r7, Loop1 jb STOP, AllRed ;若搬动了单脉冲发生器进入中断使STOP等于1,转到全红 clr SR ; 南北绿灯, 东西红灯 clr SY setb SG setb ER clr EY clr EG mov a, #20 call
8、Delay jb STOP, AllRed clr SR ; 东西红灯, 南北黄灯闪 clr SY clr SG setb ER clr EY clr EG clr Flash mov r7, #9 Loop2: mov c, Flash mov SY, c mov a, #
9、1 call Delay cpl Flash djnz r7, Loop2 ljmp Loop AllRed: setb SR clr SY clr SG setb ER clr EY clr EG clr STOP mov a, #10 call Delay lj
10、mp Loop Delay: ; 延时子程序 mov r1, #80H mov r0, #0 DelayLoop: jb STOP, ExitDelay djnz r0, DelayLoop djnz r1, DelayLoop djnz ACC, Delay ExitDelay: ret end ;问题1:程序中如何实现黄灯闪烁的? ;问题2:什么情况下产生的中断?中断服务程序如何处理的?主程序怎样使用了STOP,STOP=0和STOP=1表明什么? ;问题3:无论是灯闪烁还是灯亮时间的长度是多少?你能算出来延时子程序的时间长度吗? ;问题4:我们的实验并没有按实验台上的红黄绿实际颜色,怎样修改程序和硬件才能使用红黄绿实际颜色?






