外部中断实验(急救车与交通灯)
          
            时间:11-18 11:21 阅读:814次
*温馨提示:点击图片可以放大观看高清大图
                
         
        
		  
               简介:本文主要介绍了外部中断实验(急救车与交通灯)。
               
                        
          
            一.实验要求
在实验四内容的基础上增加允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。
二.实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
三.实验说明
 中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。2.必须在中断程序中设定是否允许中断重入,即设置EX0位。
 本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。本例中没有涉及这种情况。
实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。
源代码:
 ORG 0000H
 LJMP START
 ORG 0003H ;INT 0 中断入口地址
 LJMP INT0
 ORG 0040H
START:
 MOV SP,#60H
 SETB EX0 ;INT 0 中断有效
 SETB IT0
 SETB EA
 LCALL STATUS0 ;初始状态(都是红灯)
CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯
 LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯
 LCALL STATUS3 ;南北红灯,东西绿灯
 LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯
 LJMP CIRCLE
INT0:
 PUSH PSW ;保护现场
 PUSH 2
 PUSH ACC
 MOV DPTR,#8300H
 MOV A,#0FH ;南北,东西都亮红灯
 MOVX @DPTR,A
 MOV R2,#100 ;延时10秒
 LCALL DELAY
 POP ACC ;恢复现场
 MOVX @DPTR,A
 POP 2
 POP PSW
 RETI
STATUS0: ;南北红灯,东西红灯
 MOV DPTR,#8300H
 MOV A,#0FH
 MOVX @DPTR,A
 MOV R2,#10 ;延时1秒
 LCALL DELAY
 RET
STATUS1: ;南北绿灯,东西红灯
 MOV DPTR,#8300H
 MOV A,#5AH ;南北绿灯,东西红灯
 MOVX @DPTR,A
 MOV R2,#50 ;延时5秒
 LCALL DELAY
 RET
STATUS2: ;南北绿灯闪转黄灯,东西红灯
 MOV DPTR,#8300H
 MOV R3,#03H ;绿灯闪3次
FLASH: MOV A,#5FH
 MOVX @DPTR,A
 MOV R2,#03H
 LCALL DELAY
 MOV A,#5AH
 MOVX @DPTR,A
 MOV R2,#03H
 LCALL DELAY
 DJNZ R3,FLASH
 MOV A,#0AH ;南北黄灯,东西红灯
 MOVX @DPTR,A
 MOV R2,#10 ;延时1秒
 LCALL DELAY
 RET
STATUS3: ;南北红灯,东西绿灯
 MOV DPTR,#8300H
 MOV A,#0A5H
 MOVX @DPTR,A
 MOV R2,#50 ;延时5秒
 LCALL DELAY
 RET
STATUS4: ;南北红灯,东西绿灯闪转黄灯
 MOV DPTR,#8300H
 MOV R3,#03H ;绿灯闪3次
FLASH1: MOV A,#0AFH
 MOVX @DPTR,A
 MOV R2,#03H
 LCALL DELAY
 MOV A,#0A5H
 MOVX @DPTR,A
 MOV R2,#03H
 LCALL DELAY
 DJNZ R3,FLASH1
 MOV A,#05H ;南北红灯,东西黄灯
 MOVX @DPTR,A
 MOV R2,#10 ;延时1秒
 LCALL DELAY
NOP
 RET
DELAY: ;延时子程序
 PUSH 2
 PUSH 1
 PUSH 0
DELAY1: MOV 1,#00H
DELAY2: MOV 0,#0B2H
 DJNZ 0,$
 DJNZ 1,DELAY2 ;延时 100 mS
 DJNZ 2,DELAY1
 POP 0
 POP 1
 POP 2
 RET
 END