ORG 0000H
LJMP MAIN
ORG 000BH ;中斷程序入口地址
LJMP TIME_0
ORG 0040H
MAIN:
MOV IE,#82H
MOV TCON , #10H
MOV TH0, #3CH
MOV TL0,#0AFH ;定時器T0初始化
MOV R1,#20 ;定時累積
RED:
MOV R2,#30 ;R2為時間設定
LOOP1:
MOV A,R2
JZ GREEN ;R2為0時轉到GREEN處,改變亮燈狀態
CALL SHOW ;調用顯示子程序,顯示30s
MOV P3,#0
SETB P3.0
LJMP LOOP1
GREEN:
MOV R2,#20
LOOP2:
MOV A,R2
JZ YELLOW ;R2為0時轉到YELLOW 處,改變亮燈狀態
CALL SHOW ;調用顯示子程序,顯示20s
MOV P3,#0
SETB P3.1
LJMP LOOP2
YELLOW:
MOV R2, #3 ;3s時間設定
MOV R0, #6
MOV P3, #00H
SETB P3.2 ;閃爍位
LOOP3:
MOV A, R2
JZ RED
MOV A, R0
JZ SHAN
dec R0
CALL SHOW
LJMP LOOP3
SHAN:
MOV R0, #6
CPL P3.2
LJMP LOOP3
SHOW:
MOV A,R2
MOV B,#10
DIV AB ;二進制轉十進制
MOV DPTR ,#TABL
MOVC A,@A+DPTR ;查表
MOV P1,#0FFH
MOV P1,A
MOV P2,#00H
SETB P2.1
CALL DELY
MOV A,B
MOV DPTR, #TABL
MOVC A, @A+DPTR
MOV P1, #0FFH
MOV P1, A
MOV P2, #00H
SETB P2.2
CALL DELY
RET
DELY: ;延時子程序
D3: MOV R6, #100
D2: MOV R7, #10
D1: DJNZ R7, D1
DJNZ R6, D2
RET
TIME_0:
PUSH ACC ;保護現場
PUSH PSW
MOV TH0, #3CH
MOV TL0, #0AFH ;定時器T0初始化,定時50ms
DJNZ R1, OUT_T0 ;計時1s後做如下工作
MOV R1, #20
DEC R2
OUT_T0:
POP PSW
POP ACC
RETI
TABL:DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H
END