路口分主干和支干道,主干道的绿灯时间(为25秒)长红灯时间短(为20秒),
支干道的红灯时间长(为30秒)绿灯时间短(为15秒),黄灯时间相等(为5秒)!
用P1口控制红绿灯,用P0和P2显示时间!
程序还没有优化,还望各位多多指点!
下面为汇编程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTT0
ORG 0013H
LJMP INTT1
ORG 001BH
LJMP TT1
ORG 0100H
TT1: MOV TH1,#0D8H 定时器1,定时10us
MOV TL1,#0F0H
DJNZ R6,EXIT
MOV R6,#100 定时器定时100次
MOV R1,#0FFH
EXIT: RETI
INTT0:MOV P1,#0BEH 外部中断0,
JB P3.4,$
RETI
INTT1:MOV P1,#0BBH 外部中断1,
JB P3.4,$
RETI
ORG 1000H
MAIN: MOV R6,#100 主程序;
MOV R1,#00H
MOV TMOD,#10H 初始化
MOV TH1,#0D8H
MOV TL1,#0F0H
MOV IE,#8DH
MOV 20H,#25
MOV 21H,#5
MOV 22H,#15
MOV 23H,#30
MOV 24H,#20
SETB TR1
ST1: MOV P1,#0BBH 第一个状态,主干道亮绿灯、支干道亮红灯;
CJNE R1,#0FFH,TZ1
MOV R1,#00H
DEC 20H
DEC 23H
TZ1: MOV R2,20H
MOV R3,23H
LCALL DISP 调用显示子程序。
MOV A,20H
CJNE A,#00H,ST1
MOV 20H,#25
ST2: MOV P1,#0BDH 第二个状态,主干道亮黄灯、支干道亮红灯;
CJNE R1,#0FFH,TZ2
MOV R1,#00H
DEC 21H
DEC 23H
TZ2: MOV R2,21H
MOV R3,23H
LCALL DISP 调用显示子程序。
MOV A,21H
CJNE A,#00H,ST2
MOV 21H,#05
MOV 23H,#30
ST3: MOV P1,#0DEH 第三个状态,主干道亮红灯、支干道亮绿灯;
CJNE R1,#0FFH,TZ3
MOV R1,#00H
DEC 24H
DEC 22H
TZ3: MOV R2,24H
MOV R3,22H
LCALL DISP 调用显示子程序。
MOV A,22H
CJNE A,#00H,ST3
MOV 22H,#15
ST4: MOV P1,#0EEH 第四个状态,主干道亮红灯、支干道亮黄灯;
CJNE R1,#0FFH,TZ4
MOV R1,#00H
DEC 24H
DEC 21H
TZ4: MOV R2,24H
MOV R3,21H
LCALL DISP 调用显示子程序。
MOV A,21H
CJNE A,#00H,ST4
MOV 21H,#05
MOV 24H,#20
LJMP ST1 跳转到第一个状态。
DISP: MOV A,R2 显示子程序。
MOV B,#10
DIV AB
MOV 60H,A
MOV 61H,B
MOV A,R3
MOV B,#10
DIV AB
MOV 62H,A
MOV 63H,B
MOV 40H,#04H
MOV R5,#0FEH
MOV R0,#60H
LLP: MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
MOV P2,A
RL A
MOV R5,A
INC R0
LCALL DELAY1
DJNZ 40H,LLP
RET
DELAY1: 延时子程序
MOV R4,#1
DL2: MOV R7,#1
DJNZ R7,$
DJNZ R4,DL2
RET
TABLE:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END