📄 红绿灯.asm
字号:
ORG 0000H
LJMP MAIN
; ORG 0003H ;
; LJMP ALLRED
ORG 000BH
LJMP T0ZHIYI
ORG 0013H
LJMP ALLRED
ORG 0030H
MAIN:
START:
;---------- 模式 2 -----------------
;------ 0绿黄红|0 绿黄红 ----
RGY: CLR IT1 ;INT0电平触发
SETB PX1 ;INT0高优先级
SETB EX1 ;开INT0中断
SETB EA ;开中断
;------------------------------------
WORK: MOV P0, #00010100B ; 红--绿
MOV P2, #00H
;--------------------------------------
MOV R5, #5
LOOP21: LCALL DELAY1S
; MOV P3, #0FFH ;读P3前,先置1
; JNB P3.0, KEY ;若p3.0有按键,则跳KEY
DJNZ R5, LOOP21
;---------------------------------------
MOV R5, #4 ;黄闪
LOOP22: MOV P0, #00110110B;红黄--绿黄
LCALL DELAY1S
; MOV P3, #0FFH ;读P3前,先置1
; JNB P3.0, KEY ;若p3.0有按键,则跳KEY
MOV P0, #00010100B;红--绿
LCALL DELAY1S
; MOV P3, #0FFH ;读P3前,先置1
; JNB P3.0, KEY ;若p3.0有按键,则跳KEY
DJNZ R5, LOOP22
;-----------------------------------
MOV R5, #5
LOOP23: MOV P0, #01000001B ;绿--红
LCALL DELAY1S
; MOV P3, #0FFH ;读P3前,先置1
; JNB P3.0, KEY1 ;若p3.0有按键,则跳KEY
DJNZ R5, LOOP23
;-------------------------------------
MOV R5, #4 ;黄闪
LOOP24:
MOV P0, #01100011B ;绿黄--黄红
LCALL DELAY1S
MOV P0, #01000001B ;绿--红
LCALL DELAY1S
; MOV P3, #0FFH ;读P3前,先置1
; JNB P3.0, KEY1 ;若p3.0有按键,则跳KEY
DJNZ R5, LOOP24
LJMP RGY
;********** TO延时1S *********
DELAY1S:
MOV R3, #10 ;#20 ;1T
LOOP1S:
LCALL KAIT0 ;2T
CESHI1S:
CJNE R6, #1, CESHI1S ;2T
MOV R6, #0 ;1T
DJNZ R3, LOOP1S ;2T
RET ;2T
;********* 开定时器T0 **********
KAIT0:
MOV TMOD, #11H ;1T
MOV TL0, #0CH ;#0AH ;1T
MOV TH0, #4CH ;1T
SETB ET0 ;1T
SETB EA ;1T
SETB TR0 ;1T
RET ;2T
;******* 计时器T0溢出中断**********
T0ZHIYI:
CLR ET0
MOV R6, #1;
SETB ET0
RETI
;****** INT0-全红中断 *******
ALLRED:CLR EA
PUSH PSW
PUSH ACC
ORL PSW, #08H
MOV P0, #00010001B
; LCALL DELAY1S
LCALL DELAYR
POP ACC
POP PSW
RETI
;******** 全红的延时 **********
DELAYR:MOV R3, #100 ;10 中断延时 1 s
LOOPR3:MOV R4, #200
LOOPR2:MOV R2, #250
LOOPR1:DJNZ R2, LOOPR1
DJNZ R4, LOOPR2
DJNZ R3, LOOPR3
RET
;*********************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -