SOUTH_RED EQU P1.0
SOUTH_YELLOW EQU P1.1
SOUTH_GREEN EQU P1.2
EAST_RED EQU P1.3
EAST_YELLOW EQU P1.4
EAST_GREEN EQU P1.5
SECOND_FLAG BIT 00H
TIME_COUNT0 DATA 30H
TIME_COUNT1 DATA 31H
STATUS_FLAG DATA 32H
SECOND_COUNT DATA 33H
ORG 000H
LJMP MAIN
ORG 000BH
LJMP T0_INT
ORG 0100H
MAIN:MOV SP,#60H
LCALL INIT
LCALL T0_INT
LOOP:
JNB SECOND_FLAG,LOOP
LCALL STATUS_CHANGE
CLR SECOND_FLAG
SJMP LOOP
STATUS_CHANGE:MOV A,STATUS_FLAG
ADD A,STATUS_FLAG
MOV DPTR,#STATUS_PROC_TABLE
JMP @A+DPTR
STATUS_PROC_TABLE:AJMP STATUS1
AJMP STATUS2
AJMP STATUS3
AJMP STATUS4
STATUS1:DJNZ SECOND_COUNT,STATUS1_EXIT
MOV SECOND_COUNT,#10
MOV STATUS_FLAG,#01H
STATUS1_EXIT:
RET
STATUS2:DJNZ SECOND_COUNT,STATUS2_EXIT
MOV SECOND_COUNT,#40
MOV STATUS_FLAG,#02H
SETB SOUTH_RED
CLR SOUTH_YELLOW
SETB SOUTH_GREEN
CLR EAST_RED
SETB EAST_YELLOW
SETB EAST_GREEN
RET
STATUS2_EXIT:
CPL SOUTH_GREEN
RET
STATUS3:DJNZ SECOND_COUNT,STATUS3_EXIT
MOV SECOND_COUNT,#10
MOV STATUS_FLAG,#03H
STATUS3_EXIT:
RET
STATUS4:DJNZ SECOND_COUNT,STATUS4_EXIT
MOV SECOND_COUNT,#60
MOV STATUS_FLAG,#00H
CLR SOUTH_RED
SETB SOUTH_YELLOW
SETB SOUTH_GREEN
SETB EAST_RED
CLR EAST_YELLOW
SETB EAST_GREEN
RET
STATUS4_EXIT:CPL EAST_GREEN
RET
INIT:SETB SOUTH_RED
SETB SOUTH_YELLOW
CLR SOUTH_GREEN
CLR EAST_RED
SETB EAST_YELLOW
SETB EAST_GREEN
MOV TIME_COUNT0,#250
MOV TIME_COUNT1,#8
MOV SECOND_COUNT,#60
MOV STATUS_FLAG,#00H
CLR SECOND_FLAG
RET
T0_INT:DJNZ TIME_COUNT0,T0_INT_EXIT
MOV TIME_COUNT0,#250
DJNZ TIME_COUNT1,T0_INT_EXIT
MOV TIME_COUNT1,#8
SETB SECOND_FLAG
T0_INT_EXIT:
RETI
T0_INT_INIT:
MOV TMOD,#02H
MOV TL0,#06H
MOV TH0,#06H
MOV TCON,#10H
SETB EA
SETB ET0
RET
END
|