51MCU汇编计数器问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 15:51:51
请教前辈!我自己参考书中写了一段程序,目的是想通过计数器看到数码管的变化,其结果是数码管并无变化(由全亮到全暗)
ORG 0000G
AJMP START
ORG 0030H
START:
MOV SP,#5FH
CLR A
MOV P0,A
MOV P2,A
MOV TMOD,#00000101B
MOV TH0,#HIGH(65536-20)
MOV TL0,#LOW(65536-20)
SETB TR0
CHECK:
JNB TF0,CHECK
CLR TR0
CLR TF0
MOV P0,#00H
MOV P2,#00H
LOOP:
ADD A,#01H
DA A
MOV P0,A
MOV P2,A
LJMP LOOP
END
不知道程序有没有累赘不可实现的地方 另外这个初始化堆栈 我不明白是什么意思 我这个想法可否实现呢 P0管笔段 P2管数码管 莫不是让数码管显示数字需要逐条输入改写P0 P2吗
很着急 最近一两天即可结束提问

计数器的计数,是要有外部的下降沿来触发的,T0的计数输入端在P3.4。
应该在此端安装个按键或者跳线,开、关20次,才能看到数码管的变化1次。
另外,按键如果有抖动,可能用不上20次操作。

ORG 0000G
AJMP START
ORG 0030H
START:
MOV SP,#5FH
CLR A
MOV P0,A
MOV P2,A
MOV TMOD,#00000101B
MOV TH0,#HIGH(65536-20)
MOV TL0,#LOW(65536-20)
SETB TR0

mov r3, #0

CHECK:
JNB TF0,CHECK
CLR TF0
;CLR TR0 不要停止T0
inc r3
mov p0, r3 ;输出到段,R3内容并不是规范的段码,
;显示的内容,可能不好理解
mov p2, #55h ;不知道你的“位”是如何控制的,
;现在我让它隔位显示
ljmp CHECK
;以下的不要了

END

ORG 0000G
AJMP START
ORG 000BH //定时器时中断入口地址。
AJMP INT_TIME0
ORG 0030H
START:
MOV SP,#5FH //应该是可以删除的。
CLR A //Initiation而已。
MOV P0,A
MOV P2,A
MOV TMOD,#00000101B
MOV TH0,#HIGH(65536-20)
MOV TL0,#LOW(65536-20)
SETB TR0

INT_TIME0