资源描述
实验要求:
本实验模拟交通信号灯控制,一般情况下正常显示,有
急救车到达时,两个方向交通信号灯全红,以便让急救
车通过。设急救车通过路口时间为10秒,急救车通过后,
交通恢复正常,本实验用单次脉冲申请外部中断,表示
有急救车通过。
实验目的:
1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
实验说明:
中断服务程序的关键是:
1、保护进入中断时的状态,并在退出中断之前恢复进入
时的状态。
2、本例中使用了INTO中断,一般中断程序进入时应保护PSW,ACC以及中断程
序使用但非其专用的寄存器。本例中没有用到其他寄存器所以没有保护和恢复现场。。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。对于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
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 ; 南北, 东西均红灯
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:
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
;若搬动了单脉冲发生器,进入中断使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
call 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 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, #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
ljmp 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:我们的实验并没有按实验台上的红黄绿实际颜色,怎样修改程序和硬件才能使用红黄绿实际颜色?
展开阅读全文