内部循环和外部循环是指循环嵌套,一个循环的内部又包括了另一个循环。
在结构上,位于内部的循环叫内循环,位于外部的循环叫外循环,由外循环控制内循环。
例如: 上面程序中的 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调试程序时,遇到读取外部数据、死循环使得程序不能继续执行时怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)