打印

在循环内容上做**吗

[复制链接]
3979|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ll_sd|  楼主 | 2008-12-24 22:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
rt,对于循环次数小于256次的,可以用如下方法进行循环,但大于256次怎么解决?
mov r1,#0ffh
循环内容
djnz r1 循环内容
这里循环的内容是输出一个确定的数,需要输出大于256次,例如500次。因为这个数已经确定,所以不能通过判断这个数来确定是否要循环。这种情况怎么实现?

相关帖子

沙发
赤铸| | 2008-12-24 22:34 | 只看该作者

自己做16位整数减法

判断16位数是否为零

使用特权

评论回复
板凳
E007| | 2008-12-24 22:39 | 只看该作者

嵌套循环呗

使用特权

评论回复
地板
ll_sd|  楼主 | 2008-12-24 22:58 | 只看该作者

2楼说一下思路吧

16位减法没搞过。
ps,循环嵌套不可行。

使用特权

评论回复
5
ljm810010| | 2008-12-24 23:06 | 只看该作者

哈哈,2楼方法就是循环嵌套,本质一样。

使用特权

评论回复
6
ll_sd|  楼主 | 2008-12-24 23:13 | 只看该作者

循环嵌套是不可行的

难道用汇编没戏?

使用特权

评论回复
7
E007| | 2008-12-24 23:25 | 只看该作者

LZ说出个不可行的原因?

    你不就是500次吗?随便1-65535次都是可行的,如果想做更高,还可以再加一层嵌套,比你每次都做16位或更高位的减法快多了.如果你愿意累你的MCU和不嫌麻烦,那就每次都做16位或更高位数的减法好了~~~

使用特权

评论回复
8
ljm810010| | 2008-12-24 23:31 | 只看该作者

C或汇编方法都一样,LZ说不行,只能说理解有误区

使用特权

评论回复
9
E007| | 2008-12-24 23:39 | 只看该作者

呵呵......

使用特权

评论回复
10
ll_sd|  楼主 | 2008-12-24 23:39 | 只看该作者

举个例子。

mov r0,#0ffh
mov r1,#02h
loop: mov a,r3
      call send  ;这里假设把a的内容发送512次
      djnz r0,loop
      djnz r1,loop
这样能实现512次循环吗?


使用特权

评论回复
11
E007| | 2008-12-24 23:45 | 只看该作者

你看可不可以???

    mov r0,0xF4
    mov r1,1
loop:
    mov a,r0
    jz end_loop
    // do something
    djnz r0,loop
    mov a,r1
    jz end_loop
    djnz r1,loop
end_loop:
    .....


直接用变量给r0,r1赋值都没问题.
如果是写程序就已经固定了的值,中间判0的4句都可以去掉,就象你那样.

使用特权

评论回复
12
E007| | 2008-12-24 23:46 | 只看该作者

你的那个

第一句赋个0值不就成了么,DJNZ一执行就成0XFF了.

使用特权

评论回复
13
ljm810010| | 2008-12-24 23:50 | 只看该作者

呵呵

mov r0,#512
mov r1,#(512/256)
loop: mov a,r3
      call send  ;这里假设把a的内容发送512次
      djnz r0,loop
      djnz r1,loop
这样就能实现512次循环。

使用特权

评论回复
14
E007| | 2008-12-24 23:54 | 只看该作者

老大,赋值越范围了,512>255,被CUT掉,不过结果会是正确的,呵呵..

使用特权

评论回复
15
ljm810010| | 2008-12-25 00:00 | 只看该作者

是呀,结果会出乎意料的正确

这样可读性也强了

使用特权

评论回复
16
E007| | 2008-12-25 00:00 | 只看该作者

我知道这肯定结果会正确的,不过这样不是严谨的程序写法

使用特权

评论回复
17
ljm810010| | 2008-12-25 00:03 | 只看该作者

要严谨就写成 mov r0,#(512 mod 256) 吧!

使用特权

评论回复
18
E007| | 2008-12-25 00:08 | 只看该作者

Yeah~

使用特权

评论回复
19
ll_sd|  楼主 | 2008-12-25 08:54 | 只看该作者

13楼的还是个死循环

13楼的还是个死循环,跟我刚才发的那个一样的问题。
11楼的思路是对的但程序要改一下,还是以循环500次为例,如果r1设为1只能循环244次
 mov r0,#f4h
    mov r1,#02h
loop://do something
    mov a,r0
    jz loop2
    djnz r0,loop
loop2:djnz r1,loop    
不然在执行完内循环后直接跳出外循环了
问题总算解决,谢谢2位的帮助
   

使用特权

评论回复
20
lyjian| | 2008-12-25 09:22 | 只看该作者

13楼的明明就可以

使用特权

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

本版积分规则

61

主题

394

帖子

0

粉丝