51 单片机汇编语言编程:从 99 到 0 倒计时
扫描二维码
随时随地手机看文章
51 单片机,求从 99 到 0 倒计时的汇编语言的程序。
再加入 3 个开关。
一个开关按下后,开始执行倒计时程序,其他两个用来暂停计时和停止计时(停止计时就显示00吧)。
做而论道回答如下:
仿真电路图:
程序:
ORG 0000H
START:
MOV P3, #0
MOV DPTR, #TABLE
MOV TMOD, #01H
SETB TR0
LP0:MOV R4, #100
LP1:MOV R5, #20
LP2:MOV TH0, #3CH
MOV TL0, #0B0H
LP3:CALL DISP
JNB P1.0, K1
JNB P1.1, K2
JNB P1.2, K3
JNB TF0, LP3
CLR TF0
DJNZ R5, LP2
DJNZ R4, LP1
JMP LP0
K1: CALL DISP
JB P1.0, LP3
SETB TR0
JMP LP3
K2: CALL DISP
JB P1.1, LP3
CLR TR0
JMP LP3
K3: CALL DISP
JB P1.2, LP3
CLR TR0
MOV R4, #1
JMP LP3
;---------------------------
DISP:
MOV A, R4
DEC A
MOV B, #10
DIV AB
MOVC A, @A+DPTR
MOV P2, A
SETB P3.1
DJNZ R7, $
DJNZ R7, $
CLR P3.1
MOV A, B
MOVC A, @A+DPTR
MOV P2, A
SETB P3.0
DJNZ R7, $
DJNZ R7, $
CLR P3.0
RET
TABLE:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H
DB 92H, 82H, 0F8H, 80H, 90H
END
02013-11-14 12:17
提问者评价:行了,非常感谢你。
网友评论:(monengs2013-11-14 18:26)
这程序,实时性强,省资源(只用了通用寄存器),有按键去抖,把重复功能的语句调整合并了。
确实这个是好答案!
============================
提问者在另一个问题中,提出了新要求:
帮我编一个99倒计时到0的汇编语言的程序,不要用DIV的。
前面使用 DIV,是用于分离计数值的十位、个位,以便分别进行显示。
现在不让用 DIV,那么,十位个位在计数的时候,就应该用两个单元分别计数,显示的时候,就不用分离了。
做而论道编写的程序如下:
ORG 0000H
START:
MOV 39H, #0C0H
MOV 38H, #0F9H
MOV 37H, #0A4H
MOV 36H, #0B0H
MOV 35H, #99H
MOV 34H, #92H
MOV 33H, #82H
MOV 32H, #0F8H
MOV 31H, #80H
MOV 30H, #90H
MOV P3, #0
MOV TMOD, #01H
SETB TR0
LP: MOV R0, #30H
LP0:MOV R1, #30H
LP1:MOV R5, #20
LP2:MOV TH0, #3CH
MOV TL0, #0B0H
LP3:CALL DISP
JNB P1.0, K1
JNB P1.1, K2
JNB P1.2, K3
JNB TF0, LP3
CLR TF0
DJNZ R5, LP2
INC R1
CJNE R1, #3AH, LP1
INC R0
CJNE R0, #3AH, LP0
JMP LP
K1:
CALL DISP
JB P1.0, LP3
SETB TR0
JMP LP3
K2: CALL DISP
JB P1.1, LP3
CLR TR0
JMP LP3
K3: CALL DISP
JB P1.2, LP3
CLR TR0
MOV R0, #39H
MOV R1, #39H
MOV R5, #01H
JMP LP2
DISP:
MOV P2, @R0
SETB P3.1
DJNZ R7, $
DJNZ R7, $
CLR P3.1
MOV P2, @R1
SETB P3.0
DJNZ R7, $
DJNZ R7, $
CLR P3.0
RET
END
本程序仿真执行后,和前述截图相同。