ORG 0000H
LJMP START
ORG 0100H
START: MOV SP,#40H
MOV P0,#0 ;输出时
MOV P1,#0;输出分
MOV P2,#0;输出秒
MOV R3,#0 ;保存分
MOV R4,#0 ;保存时
;循环
MOV R0,#24
MOV R1,#59
MOV R2,#59
CLR A
LOOP:JB P3.0,$;判断P3.0,为低电平开始计时
LCALL DELAY
ADD A,#1
DA A
MOV P2,A
DJNZ R2,LOOP
CLR A ;秒清零
MOV A,R3 ;分钟开始计数
ADD A,#1
DA A
MOV R3,A
MOV P1,A
MOV R2,#59 ;重置
DJNZ R1,LOOP
MOV R3,#0;分钟清零,小时开始计数
MOV A,R4
MOV A,#1
DA A
MOV R4,A
MOV P0,A
MOV R2,#59
MOV R1,#59
DJNZ R0,LOOP
DONE: SJMP $
;延时1.000001s子程序
;计算n=((201*5+5)*90+9)*11+2
DELAY: MOV R7,#11
DELAY3:MOV R6,#90
DELAY2:MOV R5,#201
DELAY1:NOP
NOP
NOP
DJNZ R5,DELAY1
NOP
NOP
DJNZ R6,DELAY2
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY3
RET
END
LJMP START
ORG 0100H
START: MOV SP,#40H
MOV P0,#0 ;输出时
MOV P1,#0;输出分
MOV P2,#0;输出秒
MOV R3,#0 ;保存分
MOV R4,#0 ;保存时
;循环
MOV R0,#24
MOV R1,#59
MOV R2,#59
CLR A
LOOP:JB P3.0,$;判断P3.0,为低电平开始计时
LCALL DELAY
ADD A,#1
DA A
MOV P2,A
DJNZ R2,LOOP
CLR A ;秒清零
MOV A,R3 ;分钟开始计数
ADD A,#1
DA A
MOV R3,A
MOV P1,A
MOV R2,#59 ;重置
DJNZ R1,LOOP
MOV R3,#0;分钟清零,小时开始计数
MOV A,R4
MOV A,#1
DA A
MOV R4,A
MOV P0,A
MOV R2,#59
MOV R1,#59
DJNZ R0,LOOP
DONE: SJMP $
;延时1.000001s子程序
;计算n=((201*5+5)*90+9)*11+2
DELAY: MOV R7,#11
DELAY3:MOV R6,#90
DELAY2:MOV R5,#201
DELAY1:NOP
NOP
NOP
DJNZ R5,DELAY1
NOP
NOP
DJNZ R6,DELAY2
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R7,DELAY3
RET
END