设计一个24小时制时钟计数器。用汇编语言
发布网友
发布时间:2022-05-01 11:09
我来回答
共3个回答
热心网友
时间:2023-10-09 14:31
下面的程序,经过仿真测试,满足要求。
晶振为12MHz.
ORG 0000H
MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV R7, #20
SETB TR0
MOV R4, #0
MOV R5, #0
MOV R6, #0
_DISP:
MOV P2, R4
MOV P1, R5
MOV P0, R6
START:
JNB P3.0, T0_TF0
CLR TR0
JB P3.0, START
T0_TF0:
SETB TR0
JNB TF0, START
CLR TF0
MOV TH0, #3CH
MOV TL0, #0B0H
DJNZ R7, START
MOV R7, #20
MOV A, R4
ADD A, #1
DA A
MOV R4, A
CJNE A, #60H, _DISP
MOV R4, #0
MOV A, R5
ADD A, #1
DA A
MOV R5, A
CJNE A, #60H, _DISP
MOV R5, #0
MOV A, R6
ADD A, #1
DA A
MOV R6, A
CJNE A, #24H, _DISP
MOV R6, #0
SJMP _DISP
END
仿真效果图如下:
热心网友
时间:2023-10-09 14:31
刚写了一个,应该没问题
ORG 2000H
MOV R0,#0 ;R0,R1,R2初始化
MOV R1,#0
MOV R2,#0
MOV P0,#0;P0,P1,P2置0
MOV P1,#0
MOV P2,#0
INPUT:JB P3.0,STEP
START:INC R0;秒钟计数
MOV A,R0
ACALL OUTPUT;计算bcd码
CJNE R0,#60,X2;60进制判断进1
MOV R0,#0;进位了清0
MOV P2,#0;输出0
INC R1;分钟计数
MOV A,R1
ACALL OUTPUT;计算bcd码
CJNE R1,#60,X1;60进制判断
MOV R1,#0;进位了清0
MOV P1,#0;进位了清0
INC R2;时钟计数
MOV A,R2;
ACALL OUTPUT;计算bcd码
CJNE R2,#24, X0;判断是不是溢出了
MOV R2,#0;溢出清0
MOV P0,#0;输出清0
SJMP INPUT;跳出循环
;输出
X2:MOV P2, A
SJMP INPUT
X1:MOV P1,A
SJMP INPUT
X0:MOV P0,A
SJMP INPUT
;延时部分
;DELAY:MOV R3,#30H;循环次数48
;LOOP:MOV R4,#30H;循环次数
;LOOP1:NOP
; NOP
; DJNZ R4,LOOP1
; DJNZ R3,LOOP;48(30h)平方后差不多2500乘以4us。在加上没算的差不多就一秒
; SJMP START
;输出bcd码
OUTPUT:MOV B,#0AH;赋值为十
DIV AB;相除得到高位,低位
SWAP A;得到高位
ORL A,B
RET
;完成后停止
DONE:SJMP $
STEP:SJMP STEP
END
热心网友
时间:2023-10-09 14:32
到这里看看吧!应该就是你要的答案!!