利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。P3.0为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz
ORG 0000H
LJMP MAIN
ORG 0100H
SECOND EQU R7
MINUIT EQU R6
HOUR EQU R5
MAIN:
MOV SECOND, #0
MOV MINUIT, #0
MOV HOUR, #0
LOOP:
JB P3.0, LOOP;2US
LCALL DELAY ;2us+
LCALL TIME_VARY ;2us+
LCALL TIME_DISP
LJMP LOOP ;2us
TIME_VARY:
SECOND_OPER:
MOV A, #1
ADD A, SECOND
DA A
MOV SECOND, A
CJNE SECOND, #60H, N_CARRY1;2US
CARRY1:
MOV SECOND, #0 ;1US
MOV A, #1 ;1US
ADD A, MINUIT ;1US
DA A ;1US
MOV MINUIT, A ;1US
LJMP MINUIT_OPER ;2US
N_CARRY1:
NOP
NOP
NOP
NOP
NOP
LJMP MINUIT_OPER
MINUIT_OPER:
CJNE MINUIT, #60H, N_CARRY2;2US
CARRY2:
MOV MINUIT, #0 ;1US
MOV A, #1 ;1US
ADD A, HOUR ;1US
DA A ;1US
MOV HOUR, A ;1US
LJMP HOUR_OPER ;2US
N_CARRY2:
NOP
NOP
NOP
NOP
NOP
LJMP HOUR_OPER
HOUR_OPER:
CJNE HOUR, #24H, RETURN;2US
MOV HOUR, #0 ;1US
RET ;2US
RETURN:
NOP
RET
TIME_DISP:
MOV P0, HOUR
MOV P1, MINUIT
MOV P2, SECOND
RET
DELAY:
;999,953US
MOV R4, #16
LOOP1:
MOV R3, #253
LOOP2:
MOV R2, #122
LOOP3:
DJNZ R2, LOOP3
DJNZ R3, LOOP2
NOP
NOP
NOP
DJNZ R4, LOOP1
;2US
RET
END