⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 急救车与交通灯.txt

📁 急救车与交通灯)(1)南北与东西方向
💻 TXT
字号:
  2004年12月8日 来自:单片机坐标 作者:鞠春阳 [返回]  
 
  
外部中断实验(急救车与交通灯) 


一.实验要求

在实验四内容的基础上增加允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为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
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -