新人上路求带
时间:10-02
整理:3721RD
点击:
uchar a,b;
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
晶振:12MHz
执行这个循环后为什么是1ms?
for(a=1;a>0;a--):
1、a=1;
2、a>0;
3、a--;
4、a=0跳出循环
共执行4条指令
for(b=199;b>0;b--){
for(a=1;a>0;a--)
}
1、b=199;
2、b>0;
3、for(a=1;a>0;a--)相当于执行四条指令;
4、b--; (b=198)
5、b>0;
…
595、b--; (b=1)
596、b>0;
597、for();
598、b--; (b=0)
599、b=0; 跳出循环
共计:599条指令
t=599×12/12MHz=0.599ms
我的思路错在哪儿?
for (b=199;b>0;b--)
{
for(a=1;a>0;a--);
}
晶振:12MHz
执行这个循环后为什么是1ms?
for(a=1;a>0;a--):
1、a=1;
2、a>0;
3、a--;
4、a=0跳出循环
共执行4条指令
for(b=199;b>0;b--){
for(a=1;a>0;a--)
}
1、b=199;
2、b>0;
3、for(a=1;a>0;a--)相当于执行四条指令;
4、b--; (b=198)
5、b>0;
…
595、b--; (b=1)
596、b>0;
597、for();
598、b--; (b=0)
599、b=0; 跳出循环
共计:599条指令
t=599×12/12MHz=0.599ms
我的思路错在哪儿?
哪个好心人帮帮我啊
你不用这样钻牛角。如果你会汇编语言,这个问题就很容易解决,汇编语言每条指令用多少个机器周期都已经规定了,你可以很方便的按语句,按循环次数算出延时的时间。但是到了c语言,计算软件延时时间就不能按语句精确计算了。毕竟是高级语言,他每个指令,每个语句要用的时间本身就无法去计算,哪个教程都没写。你可以用仿真软件去直接观察,用单步执行键观察,执行一句用多长时间,循环多少次。这样把延时算出来。再说了,内嵌的四条语句,执行一次用多少个机器周期你确定?