打印

为何不亮

[复制链接]
2262|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huise2008|  楼主 | 2010-5-5 17:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚刚用KEIL编写了流水灯,请问我编写的流水灯程序那里出了问题,为何程序运行到P0.3就不运行了,低电平发光管亮,谢谢!
程序如下:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV 54H,#3
     MOV A,#07FH
   S:MOV P0,A
     LCALL DELAY
     RR A
     RR A
     DJNZ 54H, S
     SJMP $
ORG 0100H
DELAY:MOV R0,#10
   L:MOV R1,#0FFH
   M:MOV R2,#0FAH
      DJNZ R2,$
      DJNZ R1,M
      DJNZ R0,L
      RET
END

相关下载

相关帖子

沙发
xushouxue999| | 2010-5-5 18:11 | 只看该作者
SJMP $!
是什么意思呢?你知道吗???
弄明白它先!

使用特权

评论回复
板凳
huise2008|  楼主 | 2010-5-5 18:28 | 只看该作者
死循环,但是应该是p0.1亮,但是却是p0.3亮

使用特权

评论回复
地板
xushouxue999| | 2010-5-5 18:43 | 只看该作者
呵呵那就对了!你程序的意思不就是P0.7亮了然后6,5亮,再一圈4,3亮吗??
P0.2,1,0怎么会亮呢?虽然你移位的时候把21都移为0了,但是还没给ACC就等在那了!
你如果还不明白把54H中的3换为4就出现你要的结果了!

使用特权

评论回复
5
xushouxue999| | 2010-5-5 18:44 | 只看该作者
对不起说错了,不是没给ACC是给了ACC了但没给P0!

使用特权

评论回复
6
huise2008|  楼主 | 2010-5-5 18:58 | 只看该作者
我只想将P0.7,P0.5,P0.3,P0.1点亮,但到p0.1却不良了

使用特权

评论回复
7
xuyiyi| | 2010-5-5 19:11 | 只看该作者
再加一条指令即可
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV 54H,#3
     MOV A,#07FH
   S:MOV P0,A
     LCALL DELAY
     RR A
     RR A
     DJNZ 54H, S
     MOV P0,A     
     SJMP $
ORG 0100H
DELAY:MOV R0,#10
   L:MOV R1,#0FFH
   M:MOV R2,#0FAH
      DJNZ R2,$
      DJNZ R1,M
      DJNZ R0,L
      RET
END

使用特权

评论回复
8
xushouxue999| | 2010-5-5 19:19 | 只看该作者
呵呵那就得改改程序了!你试试这样做,看是不是你想要的!
MAIN:
         MOV 54H,#4
         MOV A,#07FH
   S:   
         MOV P0,A
         LCALL DELAY
         RRC     A
         RR       A
         DJNZ   54H, S
         SJMP $

使用特权

评论回复
9
xushouxue999| | 2010-5-5 19:25 | 只看该作者
似乎楼主说“我只想将P0.7,P0.5,P0.3,P0.1点亮,但到p0.1却不良了”,意思似乎是其他不点亮!
也可能是我的理解有误!对不起!

使用特权

评论回复
10
huise2008|  楼主 | 2010-5-5 20:09 | 只看该作者
很感谢大家的回帖,我想的是只有8个发光管,由p0口控制,低电平时点亮。程序先点亮p0.7,然后delay点亮p0.5然后delay点亮p0.3,然后delay点亮p0.1。现在运行到p0.3亮变截止了,按程序应该到p0.1点亮后才静止保持p0.1点亮。

使用特权

评论回复
11
chfirst| | 2010-5-5 20:29 | 只看该作者
要实现lz说的结果:
首先确实应该像xushouxue999说的把程序中RR命令改为RRC命令,不然就变为
点亮p0.7后每次依次点亮6,5再4,3再2,1再以后就保持全亮了。
按说程序没错了,建议检查下硬件吧。
等待强人了。

使用特权

评论回复
12
huise2008|  楼主 | 2010-5-5 20:34 | 只看该作者
我已经试过了, 把MOV 54H,#3改为 MOV 54H,#4就行了为何呀,不明白呀,讲一下呗大侠们谢啦

使用特权

评论回复
13
chfirst| | 2010-5-5 20:55 | 只看该作者
改后代码:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:MOV 54H,#4
     MOV A,#07FH
         MOV PSW,#80H
   S:MOV P0,A
     LCALL DELAY
     RRC A
     RRC A
     DJNZ 54H, S
     SJMP $
ORG 0100H
DELAY:MOV R0,#10
   L:MOV R1,#0FFH
   M:MOV R2,#0FAH
      DJNZ R2,$
      DJNZ R1,M
      DJNZ R0,L
      RET
END
首先RR是不带循环的右移
而RRC为带CY进位的右移,使用RRC命令,才能使#07FH在
RRC A
RRC A
后变为#0EFH,从而只点亮P0.5
如果使用RR的话,这是就变为#01FH,P0.7,6,5都会亮的。
DJNZ命令是先减后判断,所以54H为#3时连第一次只循环了3次
即只运行了4次RRC命令,所以啊,就停在了P0.3处。改为#4H后
就变好了。

使用特权

评论回复
14
chfirst| | 2010-5-5 21:03 | 只看该作者
不对,最后说错了,其实#3H时循环了3次,
不对的原因是最后一次循环时虽然执行了RRC但没有返回到S
执行mov P0 ,A

使用特权

评论回复
15
xuling425300| | 2010-5-6 10:28 | 只看该作者
P0口作为输出时要上啦电阻!或下拉电阻

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

125

帖子

1

粉丝