📄 text1.asm
字号:
ORG 0000H
LJMP START
ORG 0003H ;INT0中断矢量
LJMP EMERGY
ORG 0013H ;INT1中断矢量
LJMP PASSER
ORG 1000H
START: MOV SP,#60H
SETB IE.0 ;允许外部中断0
SETB IE.2 ;允许外部中断1
CLR IP.2 ;外部中断0为高先级
SETB IP.0 ;外部中断1为低优先级
CLR TCON.0 ;外0触发方式为低电平有效
CLR TCON.2 ;外1触发方式为低电平有效
CLR EA ;关中断
MOV P2,#00H
SETB EA ;开中断
MOV P1,#11011110B ;A绿,B红
MOV R4,#30 ;A路口30秒
MOV R5,#35 ;B路口35秒
ACALL DELAY
MOV P1,#11011101B ;A黄,B红
MOV R4,#5
MOV R5,#5
ACALL DELAY
MOV P1,#11110011B ;A红,B绿
MOV R4,#20
MOV R5,#15
ACALL DELAY
MOV P1,#11101011B ;A红,B黄
MOV R4,#5
MOV R5,#5
ACALL DELAY
AJMP START
DELAY: MOV R1,#10 ;延时子程序,延时1秒
D1: MOV R2,#80
D2: MOV R3,#100
;***************数码管显示*****************************
; *******显示A路口时间*********
MOV A,R4 ;显示A路口的时间
MOV B,#10
DIV AB
ORL B,#0F0H ;B或F0H,个位高四位置1
MOV 80H,B ;A路口时间个位数送P0口
SETB P0.4 ;关1号管
CLR P0.5 ;开2号管显示个位
MOV R7,#100
D4: DJNZ R7,D4 ;数码管显示延时
ORL A,#0F0H
MOV 80H,A ;A路口时间十位数送P0口
SETB P0.5 ;关2号管
CLR P0.4 ;开1号管显示十位
MOV R7,#100
D8: DJNZ R7,D8 ;数码管显示延时
; *******显示B路口时间*********
MOV A,R5 ;显示B路口的时间
MOV B,#10
DIV AB
ORL 0F0H,#0F0H ;个位高四位置1
MOV 80H,0F0H ;B路口时间个位数送P0口
SETB P0.6 ;关3号管
CLR P0.7 ;开4号管显示个位
MOV R7,#100
D5: DJNZ R7,D5 ;数码管显示延时
ORL A,#0F0H
MOV 80H,A
SETB P0.7 ;关4号管
CLR P0.6 ;开3号管显示十位
;***************延时1s循环***********************
D3: DJNZ R3,D3
DJNZ R2,D2
DJNZ R1,D1
DJNZ R5,D6 ;R4或R5减为0时延时返回
RET
D6: DJNZ R4,DELAY
RET
;***************紧急车辆处理***************
EMERGY: JNB P1.2,E2 ;A通道为红灯跳到E2,不是红灯判断B通道
JNB P1.5,E1 ;B通道为红灯跳到E1,不是红灯则AB通道各亮5秒黄灯
CLR P1.1
SETB P1.0
MOV R4,#5
E2: MOV R5,#5 ;A通道继续亮5秒红灯,B通道亮5秒黄灯
CLR P1.4
SETB P1.3
SJMP E3
E1: MOV R4,#5 ;A通道亮5秒黄灯,B通道继续亮5秒红灯
CLR P1.1
SETB P1.0
E3: ACALL DELAY
MOV P1,#11011011B ;A红B红20秒
MOV R4,#20
MOV R5,#20
ACALL DELAY
POP 70H ;修改PC的值
POP 71H
MOV 70H,#10H
MOV 71H,#00H
PUSH 71H
PUSH 70H
RETI
;***************行人过街处理******************
PASSER: JB P2.1,LOOP2 ;A有行人
JB P2.2,LOOP3 ;B有行人
; ********A行人过街处理*******
INTEND: RETI
LOOP2: JNB P1.0,INTEND ;A道为绿灯则中断返回
CLR P2.1 ;A行人中断选择位清0
MOV P1,#11101011B ;A黄B黄秒
MOV R4,#5
MOV R5,#5
ACALL DELAY
POP 70H ;修改PC的值
POP 71H
MOV 70H,#10H
MOV 71H,#00H
PUSH 71H
PUSH 70H
AJMP INTEND
; *******B行人过街处理*********
LOOP3: JNB P1.3,INTEND ;B道为绿灯则中断返回
CLR P0.2 ;B行人中断选择位清0
MOV P1,#11011101B ;A黄B黄5秒
MOV R4,#5
MOV R5,#5
ACALL DELAY
MOV P1,#11110011B ;A红B绿15秒
MOV R4,#20
MOV R5,#15
ACALL DELAY
MOV P1,#11101011B ;A红B黄5秒
MOV R4,#5
MOV R5,#5
ACALL DELAY
POP 70H ;修改PC的值
POP 71H
MOV 70H,#10H
MOV 71H,#00H
PUSH 71H
PUSH 70H
AJMP INTEND
END
;注紧急车辆按钮接P3.2,AB行人按钮接P3.3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -