单片机内部循环吗和外部循环的寄存器是什么,R6和R7吗

单片机内部循环吗和外部循环的寄存器是什么,R6和R7吗,第1张

内部循环和外部循环是指循环嵌套,一个循环的内部又包括了另一个循环。

在结构上,位于内部的循环叫内循环,位于外部的循环叫外循环,由外循环控制内循环。

例如: 上面程序中的 DAY2:DJNZ R6,DLY2 就是内循环 循环次数为123次,每次执行

DJNZ R6,DLY2 指令的时间为2个机器周期。

上面程序中的DAY2:DJNZ R6,DLY2

NOP

DJNZ R7,DLY1

就是外循环 循环次数为200次,R6为内循环计数器,R7为外循环计数器。

由外循环计数器R7控制DJNZ R6,DLY2和 NOP反复执行200次。

总的循环延时时间=[(内循环时间)]×外循环次数

补充:从结构上就可以看出,R6寄存器和DAY2:DJNZ R6,DLY2等是外部循环寄存器R7

循环的所包含的一个部分。故R6是内部循环的寄存器

如果变量定义在循环内部则做不到,循环结束变量就销毁了。不过可以把相应变量定义在循环外部。

样例程序

#include <iostream>

int main()

{

    for (int i = 0; i != 1; ++i);

    std::cout << i << std::endl; //出错

    return 0;

}#include <iostream>

int main()

{

    int i = 0;

    for (; i != 1; ++i);

    std::cout << i << std::endl; //输出1

    return 0;

}

在循环处设断点,程序执行到后修改一下外部数据,使其满足跳出循环的条件,然后再执行,这样就可以继续调试下去。如果这种情况很多,可以通过在程序中增加条件编译语句方便调试。比如:

#define DEBUG //条件编译选择,可放在文件头部H文件之后。

。。。。。。。

#ifdef DEBUG

x=0; //调试时使用这条语句,执行下一句时就能跳出循环了

#endif

while(x==1); //假设这就是你所说的读取外部数据的语句,未读到数据则原地循环

调试完成后注掉#define DEBUG,也就是

//#define DEBUG

这样正式编译时x=0;这条语句就不会被编译进去了。以后调试时再恢复。

这只是个例子,相信你能理解这个含义从而加以应用。

#include <stdioh>

int main()

{

int i,j;

i=1;

while(i<=5)

{

j = 1;

do

{

printf("%d",j);

j++;

}while(j <= 5);

printf("\n");

i++;

}

return 0;

}

以上就是关于单片机内部循环吗和外部循环的寄存器是什么,R6和R7吗全部的内容,包括:单片机内部循环吗和外部循环的寄存器是什么,R6和R7吗、如何在for循环外面得到循环里面的某个变量值、在用KEIL调试程序时,遇到读取外部数据、死循环使得程序不能继续执行时怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9526223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存