微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新人上路求带

新人上路求带

时间: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
我的思路错在哪儿?

哪个好心人帮帮我啊

你不用这样钻牛角。如果你会汇编语言,这个问题就很容易解决,汇编语言每条指令用多少个机器周期都已经规定了,你可以很方便的按语句,按循环次数算出延时的时间。但是到了c语言,计算软件延时时间就不能按语句精确计算了。毕竟是高级语言,他每个指令,每个语句要用的时间本身就无法去计算,哪个教程都没写。你可以用仿真软件去直接观察,用单步执行键观察,执行一句用多长时间,循环多少次。这样把延时算出来。再说了,内嵌的四条语句,执行一次用多少个机器周期你确定?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top