一个关于单片机汇编语言的简单问题

[复制链接]
2863|3
 楼主| lp525110627 发表于 2010-11-23 21:49 | 显示全部楼层 |阅读模式
NUM    DATA   10H
ORG    0000H
START:
   MOV    NUM,#9H
   MOV    R1,#9H
LOOP:
   MOV    A,NUM
   MOV    DPTR,#TABLE
   MOVC    A,@A+DPTR
   MOV     P1,A
   LCALL   DELAY
   DJNZ   NUM,LOOP
DELAY:
   DJNZ   R1,DELAY
   MOV    R1,#9H
   RET
TABLE:
   DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH  
END

为什么只有当人R1小于9是程序才正常运行,当大于等于9时都不能正常运行呢?而且NUM得值只能小于10才能正常运行呢?
不理解,请高手赐教!!!
 
lyjian 发表于 2010-11-23 22:08 | 显示全部楼层
“DJNZ   NUM,LOOP”后加一句sjmp $。
心静自然凉 发表于 2010-11-24 05:20 | 显示全部楼层
按理来说你这程序,不管R1为多少,都是错误的,程序不能正常运行,不知道你用的是什么编译器

你这段程序应该是数码管显示吧,程序中有一个很明显的错误,在“DJNZ   NUM,LOOP
”后面没有控制语句,以致于当NUM减到为0时,程序继续往下运行,而没有进入循环显示程序,可以在“DJNZ   NUM,LOOP”后加一句“LJMP START”,另,你的延时程序时间太短,容易造成数码管显示乱码
 楼主| lp525110627 发表于 2010-11-25 19:24 | 显示全部楼层
非常感谢两位高手!而为的回帖让我受益匪浅!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

23

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部