📄 kd618.asm
字号:
MOV A,31H
INC DPTR
MOVX @DPTR,A
MOV A,30H
INC DPTR
MOVX @DPTR,A
RET
;=================================================
PAKT: MOV R0,#2FH;-------------打包,将显缓压缩至32H,31H,30H
MOV R1,#32H
MOV R2,#03H
PAK1: MOV A,@R0
SWAP A
DEC R0
XCHD A,@R0
MOV @R1,A
DEC R0
DEC R1
DJNZ R2,PAK1
RET
;=========================================
INS0: push acc
push b
push dph
push dpl
setb psw.3
MOV DPTR,#0eF0CH
movx a,@DPTR
MOV DPTR,#0eF00H;----秒单元
movx a,@DPTR
mov 30h,a
MOV DPTR,#0eF02h;----分单元
movx a,@DPTR
mov 31h,A
MOV DPTR,#0eF04h;----时单元
movx a,@DPTR
mov 32h,a
MOV DPTR,#0EF07H;
MOVX A,@DPTR
MOV 33H,A
INC DPTR
MOVX A,@DPTR
MOV 34H,A
INC DPTR
MOVX A,@DPTR
MOV 35H,A;-------------年 dataup is over
;-----------------------------
ACALL FTT
MOV DPH,#0EFH
MOV DPL,44H
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#03H,CHKY;-----------判是“关机”?
MOV A,55H;????????????????????????
ORL A,56H
ORL A,57H
ORL A,58H
JNZ PERI;-----------------判本周期走完了吗?未完继续???????????
MOV 40H,#00H
MOV 41H,#00H;--------------拉登
MOV 39H,#0FFH
MOV 5BH,#02H
REI3: CLR PSW.3
POP DPL
POP DPH
POP B
POP ACC
RETI
;--------------
CHKY: CJNE A,#02H,PERI
MOV A,55H;??????????????
ORL A,56H
ORL A,57H
ORL A,58H
JNZ PERI;????????????
MOV 39H,#0FFH;--------------灭大屏
JB 23H.0,OFF
MOV 40H,#12H
MOV 41H,#12H;------全黄亮
DJNZ 5BH,REI3
SETB 23H.0
AJMP REI3
OFF: MOV 40H,#00H
MOV 41H,#00H;------RYG-ABCDEF全灭
CLR 23H.0
MOV DPH,#0EFH
MOV A,#04H
ADD A,44H
MOV DPL,A
MOVX A,@DPTR
MOV 5BH,A
AJMP REI3
;---------------------------
PERI: MOV 5BH,#02H;----------------------------------???????
CJNE A,#01H,LAST;------------进入定周期
LAST: MOV 5AH,#45H
LAS1: INC 5AH;------------指向 T1
MOV R0,5AH
CJNE @R0,#00H,OTCP;--------T1玩完了吗?,未完继续
INC 5AH
MOV R0,5AH
CJNE @R0,#00H,GESH;--------绿闪完了吗?,未完继续
acall segy;----------------确定绿闪控制字
INC 5AH
MOV R0,5AH
CJNE @R0,#00H,YBR1;--------黄亮完了吗?,未完继续
INC 5AH
MOV R0,5AH
CJNE @R0,#00H,ROS1;--------全红完了吗?,未完继续
INC 5AH;--------------指向下一相位头
MOV A,5AH
CJNE A,#59H,LAS1;----------工作表全部结束了吗?
ACALL FTT
ACALL LOAD
MOV 5AH,#45H;------------恢复指针
AJMP LAST
YBR1: AJMP YEBR
ROS1: AJMP RFOS
;------------------------------------
OTCP: DEC R0
MOV A,@R0
ANL A,#0FH
MOV DPTR,#0E00H;-----------指向相位表TOP
RL A;----------------------乘于2
MOV B,A
MOVC A,@A+DPTR
MOV 40H,A
MOV A,B
INC A
MOVC A,@A+DPTR
MOV 41H,A;-------------完成红绿灯输出
INC R0
MOV A,@R0
INC R0
ADD A,@R0
DA A
MOV 39H,A;-------------大屏输出
DEC R0
CLR C
MOV A,#99H
ADD A,@R0
DA A
MOV @R0,A;---------T1-1
AJMP REI3
;------------------------------------
GESH: JB 22H.0,GEON
SETB 22H.0
MOV R4,40H
MOV R5,41H
acall segy
ajmp okok
segy: mov r1,5ah;--------------指向绿闪时
inc r1
inc r1
inc r1;------------------指向下一相位状态
mov a,@r1
anl a,#0fh
rl a
mov b,a
mov dptr,#0e00h
movc a,@a+dptr;-----------取出相位状态
anl a,0a4h
mov 24h,a;----------------提取绿灯,存人24,25单元("1" IS GREEN LIGHT)
mov a,b
inc a
movc a,@a+dptr
anl a,#0a4h
mov 25h,a;--------提取绿灯,存人24,25单元
dec r1
dec r1
dec r1
dec r1
dec r1;-----------指向当前相位状态
mov a,@r1
anl a,#0fh
rl a
mov b,a
mov dptr,#0e00h
movc a,@a+dptr
anl a,#0a4h
cpl a
orl a,24h
mov 26h,a;----提取当前相位状态绿灯,取反后或24,25单元内容,存人26,27单元
mov a,b
inc a
movc a,@a+dptr
anl a,#0a4h
cpl a
orl a,25h
mov 27h,a;---提取当前相位状态绿灯,取反后或24,25单元内容,存人26,27单元
ret
okok: mov a,26h
anl a,40h
mov 40h,a;--------
mov a,27h
anl a,41h
mov 41h,a
GTDE: MOV 39H,@R0
CLR C
MOV A,#99H
ADD A,@R0
DA A
MOV @R0,A;---------TGSH-1
jnz hhh
clr 22h.0
hhh: AJMP REI3
GEON: MOV 40H,R4
MOV 41H,R5
CLR 22H.0
AJMP GTDE
;------------------------------------
YEBR: MOV 39H,@R0
CLR C
MOV A,#99H
ADD A,@R0
DA A
MOV @R0,A;---------TY-1
mov a,26h
orl a,#0c0h
anl a,40h
mov 40h,a;------------用绿闪控制字26H(其中为0者是绿闪位)灭掉40H的绿灯,E绿不动
mov a,27h
orl a,#0c0h
anl a,41h
mov 41h,a;------------用绿闪控制字27H(其中为0者是绿闪位)灭掉41H的绿灯,F绿不动
mov a,26h
cpl a
anl a,#3fh
rr a
orl a,40h
mov 40h,a;------------用绿闪控制字26H取反右移点亮对应黄灯
mov a,27h
cpl a
anl a,#3fh
rr a
orl a,41h
mov 41h,a;------------用绿闪控制字27H取反右移点亮对应黄灯
AJMP REI3
;------------------------------------
RFOS: MOV 39H,@R0
CLR C
MOV A,#99H
ADD A,@R0
DA A
MOV @R0,A;---------TR-1
MOV 40H,#49H
MOV 41H,#49H;-----------------输出全红
AJMP REI3
;=========================================
FTT: MOV DPH,#0EFH
MOV 44H,#10H;---------44H指向12887时段头
RERE: MOV DPL,44H
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#09H,REDH;-----------是否是终点?
AJMP BAK
REDH: INC DPTR;-------------读时段小时
MOVX A,@DPTR
CJNE A,32H,DEFH;-----------转时不同
INC DPTR
MOVX A,@DPTR
CJNE A,31H,DEFM;------------转分不同
RE2: RET
;------------------
DEFH: JNC CLKS;---------实时时钟的 时小于表
CLKB: MOV A,#0CH;----------------- 时大于表,则指针+12
ADD A,44H
MOV 44H,A
AJMP RERE
CLKS: MOV R0,#44H;----------指针在TOP吗?
CJNE @R0,#10H,BAK;--------------指针不在TOP,则指针-12后输出
AD12: MOV A,#0CH;---------指针在TOP,寻找 END 标志“X9”
ADD A,44H
MOV 44H,A
MOV DPL,44H
MOVX A,@DPTR
ANL A,#0FH
CJNE A,#09H,AD12
BAK: CLR C;-----------------指针后退12,然后输出
MOV A,44H
SUBB A,#0CH
MOV 44H,A
AJMP RE2
DEFM: JNC CLKS
AJMP CLKB
;=========================================
LOAD: MOV DPTR,#0EF7DH;---------取出绿闪时间,送R3
MOVX A,@DPTR
MOV R3,A
MOV A,44H
ADD A,#04H
MOV DPL,A;-----------指向相位1的状态
MOVX A,@DPTR
MOV B,A
ANL A,#0F0H
SWAP A
MOV 45H,A
mov 59h,a
MOV A,B
ANL A,#0FH
MOV 4AH,A
INC DPTR
MOVX A,@DPTR
MOV B,A
ANL A,#0F0H
SWAP A
MOV 4FH,A
MOV A,B
ANL A,#0FH
MOV 54H,A;--------------四个相位 状态 数据已传送完毕
INC DPTR
INC DPTR
MOVx A,@DPTR
MOV B,A
CLR C
MOV A,#9AH
SUBB A,R3
ADD A,B
DA A
MOV 46H,A;---------T1绿灯时间-绿闪时间送46单元
INC DPTR
MOVX A,@DPTR
MOV B,A
CLR C
MOV A,#9AH
SUBB A,R3
ADD A,B
DA A
MOV 4BH,A
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV B,A
CLR C
MOV A,#9AH
SUBB A,R3
ADD A,B
DA A
MOV 50H,A
INC DPTR
MOVX A,@DPTR
MOV B,A
CLR C
MOV A,#9AH
SUBB A,R3
ADD A,B
DA A
MOV 55H,A;------------四个相位 时间 数据已传送完毕
MOV R1,#47H;----------green flash\yellow\all red time
MOV R2,#04H
WOT1: MOV R3,#03H
MOV DPTR,#0EF7DH
WOT2: MOVX A,@DPTR
MOV @R1,A
INC R1
INC DPTR
DJNZ R3,WOT2
INC R1
INC R1
DJNZ R2,WOT1
RET
;=========================================
KEY: MOV P1,#0FH
MOV A,P1
CJNE A,#0FH,HAVE1
SETB F0
NOKEY: MOV A,#0FFH
AJMP RE1
HAVE1: ACALL DISP
ACALL DISP
MOV A,P1
CJNE A,#0FH,HAVE2
SJMP NOKEY
HAVE2: JNB F0,NOKEY
CLR F0
MOV R2,#0EFH
MOV R4,#00H
LK4: MOV P1,R2
MOV A,P1
JB ACC.0,LONE
MOV A,#00H
AJMP LKP
LONE: JB ACC.1,LTWO
MOV A,#04H
AJMP LKP
LTWO: JB ACC.2,LTHR
MOV A,#08H
AJMP LKP
LTHR: JB ACC.3,NEXT
MOV A,#0CH
LKP: ADD A,R4
RE1: RET
NEXT: INC R4
MOV A,R2
JNB ACC.7,NOKEY
RL A
MOV R2,A
AJMP LK4
;====================================
DISP: MOV R0,#2AH;---------显示2FH,2EH,2DH,2CH,2BH,2AH的内容
MOV R2,#06H
MOV R1,#0feH;--------(应为#01H,在正板中改回),20h---01h
XS: mov a,#0ffh
mov dptr,#5fffh
movx @dptr,a
MOV A,@R0
MOV C,ACC.7;
ANL A,#0FH;
MOV DPTR,#0F00H;---------字型表首的址
MOVC A,@A+DPTR
MOV ACC.7,C;
MOV DPTR,#7FFFH
cpl a
MOVX @DPTR,A
MOV A,R1
MOV DPTR,#5FFFH
MOVX @DPTR,A
ACALL DELAY
mov a,#0ffh
mov dptr,#7fffh
movx @dptr,a
INC R0
MOV A,R1
;Rr A;-------------------------(应为RL A,在正板中改回)
rl a
MOV R1,A
DJNZ R2,XS
RET
;=============================
DELAY:MOV 5FH,#0FFH
DEY: DJNZ 5FH,DEY
RET
;---------------------------
ORG 0E00H
PHAS: DB 8CH,49H,61H,89H,89H,4CH,49H,0A1H,0A4H,49H,8CH,4CH,4CH,0A1H,0A1H,4CH,61H,0A1H,49H,0A4H,0A4H,49H
ORG 0F00H
SHAP: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -