ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0100H
MAIN: MOV SP,#60H ;设定堆栈
MOV TMOD,#01H ;定时器T0模式1
MOV TH0,#3CH ;加载高字节计数初值
MOV TL0,#0B0H ;加载低字节计数初值
SETB TR0 ;启动定时器T0开始计时
SETB EA
SETB ET0
MOV 50H,#10 ;立即数10给存储单元50
LP: ACALL CHAIFEN ;调用拆分子程序
ACALL XIANSHI ;调用小时子程序
SJMP LP ;跳回到LP
ORG 0200H
CHAIFEN: ;拆分子程序
MOV R0,#51H ;立即数 51给R0
MOV R1,#58H ;立即数58给R1
MOV R7,#3 ;立即数3给R7
CF1: ;拆分1子程序
MOV A,@R0 ;将R0的值给A
ANL A,#0FH ;取出后四位,给A
MOV @R1,A ;将A的值给R1
INC R1 ;R1加1
MOV A,@R0 ;将R0的值给A
SWAP A ;累加器高四位与低四位交换
ANL A,#0FH ;在取出A的低四位
MOV @R1,A ;将A的值给R1 ,累加器送内部RAM中
INC R1 ;寄存器R1加1
INC R0 ;寄存器R0加1
DJNZ R7,CF1 ;寄存器R7减1 不为0转移
RET
ORG 0300H
XIANSHI: ;小时子程序
MOV R1,#58H ;立即数58给R1
MOV R4,#01H ;立即数01给R4
MOV R7,#6 ;立即数6给R7
XS1: ;小时子程序1
MOV DPTR,#0FFDDH ;将OFFDDH 给DPTR
MOV A,R4 ;将R4给A
MOVX @DPTR,A ;将A给外RAM单元
RL A ;累加器左移一位
MOV R4,A ;
MOV DPTR,#LEDTAB ;
MOV A,@R1 ;
INC R1 ;
MOVC A,@A+DPTR ;
MOV DPTR,#0FFDCH ;
MOVX @DPTR,A ;
MOV R6,#255 ;计数初值为255
DJNZ R6,$ ;寄存器减1不为0跳转
DJNZ R7,XS1
RET
LEDTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
ORG 0400H
INTT0: PUSH ACC
PUSH PSW
SETB RS0
DJNZ 50H,DOWN ;减1不为0跳转DOWN
MOV 50H,#10
MOV A,51H
ADD A,#1
DA A
MOV 51H,A
CJNE A,#60H,DOWN
MOV 51H,#0
MOV A,52H
ADD A,#1
DA A ;十进制调整
MOV 52H,A
CJNE A,#60H,DOWN ;累加器与立即数不等跳转
MOV 52H,#0
MOV A,53H
ADD A,#1
DA A
MOV 53H,A
CJNE A,#24H,DOWN
MOV 53H,#0
DOWN: CLR TR0 ;清0
MOV A,TL0
ADD A,#0B7H
MOV TL0,A
MOV A,TH0
ADDC A,#3CH
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
END