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

📄 traffic light.asm

📁 东西方向各有一组红,黄,绿灯用于指挥交通,红,黄,绿的持续时间分别为25s,5s,20s。
💻 ASM
字号:
      ORG	0000H
      LJMP	MAIN		;转向主程序
      ORG	0003H
      LJMP	INT0		;转向紧急车辆中断服务程序
      ORG	0013H
      LJMP	INT1		;转向有车车道中断服务程序
      ORG	0200H
MAIN:
     MOV SP ,#30H
      SETB 	PX0	   ;置外部中断0为高优先级中断
      MOV	 TCON,#00H	 ;置外部中断0、1为电平触发
      MOV	 TMOD,#10H  ;置定时器1为方式1
      MOV  IE,#85H	 ;开CPU中断,开外中断0、1中断
LOOP:
      MOV  P1,#0F3H  ;A道绿灯放行,B道红灯禁止
      MOV  R1,#90	    ;置0.5秒循环次数(0.5×90=45S)
DIP1:
      ACALL  DELAY	;调用0.5秒延时子程序
      DJNZ 	R1,DIP1  ;45秒不到继续循环
      MOV   R1,#06	 ;置A绿灯闪烁循环次数
WAN1:
      CPL  P1.2	    ;A绿灯闪烁
      ACALL  DELAY
      DJNZ R1,WAN1	  ;闪烁次数未到继续循环
      MOV  P1,#0F5H   ;A黄灯警告,B红灯禁止
      MOV	 R1,#04H  ; 置0.5秒循环次数(0.5×4=2S)
YL1:
      ACALL 	DELAY
      DJNZ   R1,YL1    ;2秒未到继续循环
      MOV P1,#0DEH    ;A红灯,B绿灯
      MOV R1,#32H   ; 置0.5秒循环次数(0.5×50=25S)
DIP2:
      ACALL DELAY
      DJNZ R1,DIP2	  ;25秒未到继续循环
      MOV   R1,#06H
WAN2:
       CPL  P1.5	      ;B绿灯闪烁
       ACALL DELAY
       DJNZ  R1,WAN2
       MOV P1,#0EEH    ;A红灯,B黄灯
       MOV R1,#04H
YL2:
       ACALL  DELAY
       DJNZ R1,YL2
       AJMP  LOOP	    ;循环执行主程序
INT0:
       PUSH P1     ;P1口数据压栈保护
      ; PUSH R3	    ;R3寄存器压栈保护
       PUSH	TH1 	  ;TH1压栈保护
       PUSH	TL1	  ;TL1压栈保护
       MOV  P1,#0F6H  ;A、B道均为红灯
       MOV  R2,#30  ;置0.5秒循环初值(15S)
DEY0:
       ACALL  DELAY
       DJNZ R2,DEY0	;15秒未到继续循环
       POP	   TL1	;弹栈恢复现场
       POP	   TH1
      ; POP	   R3
       POP	   P1
       RETI				;返回主程序
INT1:
       CLR	EA		;关中断
       PUSH	P1		;压栈保护现场
       ;PUSH	R3
       PUSH	TH1
       PUSH	TL1
       SETB 	EA		;开中断
       JNB  P3.0,BOP   ;A道无车转向B道
       MOV P1,#0F3H	;A道绿灯,B道红灯
       SJMP 	DEL1       ;转向15秒延时
BOP:
       JNB	P3.1,EXIT	 ;B道无车退出中断
       MOV	P1,#0DEH	    ;A红灯,B绿灯
DEL1:
       MOV	R5,#30	    ;置0.5秒循环初值(15S)
NEXT:
       ACALL  DELAY
       DJNZ  R5,NEXT	    ;15秒未到继续循环
EXIT:
       CLR	EA
       POP    TL1		    ;弹栈恢复现场
       POP    TH1
     ;  POP	R3
       POP	P1
       SETB	EA
       RETI
DELAY:
        MOV	R3,#0AH ; 0.5秒子程序(50ms×10=0.5s)
        MOV	TH1,#3CH ; 置50ms初值X=3CB0H
	MOV	TL1,#0B0H
	SETB 	TR1       ;启动T1
LP1:
        JBC 	TF1,LP2  ;查询计数溢出
        SJMP	LP1
LP2:
        MOV	TH1,#3CH  ;置50ms初值X=3CB0H
	MOV	TL1,#0B0H
	DJNZ	R3,LP1
	RET
END

⌨️ 快捷键说明

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