单片机C语言中怎么实现微秒级延时?
比如说i=6;while(i--)i;是延时了68微秒,怎么看出来的?请求帮助,谢谢!!最后一个i是多写的,没有那个i;是i=6;while(i--);为什么是延时68微...
比如说i=6;while(i--)i;是延时了68微秒,怎么看出来的?请求帮助,谢谢!!
最后一个i是多写的,没有那个i;是i=6;while(i--);为什么是延时68微秒。我用的是STC89C52单片机。 展开
最后一个i是多写的,没有那个i;是i=6;while(i--);为什么是延时68微秒。我用的是STC89C52单片机。 展开
4个回答
展开全部
大致的原理 就是根据CPU的指标 得到CPU执行一条指令的时间t
然后通过循环一定次数 即执行一定条数的指令N
t*N就是时间了
仅适用于单线程的单片机
对于有线程或者是有中断的情况下会不准确
然后通过循环一定次数 即执行一定条数的指令N
t*N就是时间了
仅适用于单线程的单片机
对于有线程或者是有中断的情况下会不准确
追问
比如STC89C52单片机时钟频率11.0592MHz,它执行一条语句的时间是1,0851us,但是怎么能看出i=6;while(i--);就是延时了68微妙;或者i=103;while(i>0);i--;又是延时了多少微秒呢,谢谢!!
追答
编译成汇编 然后计算会执行多少条指令 乘上每条时间就可以了
由于编译的时候和编译器以及优化有关 所以单独从C上是看不出来的
另外,如果要求精确 最好用汇编命令写延时 因为编译的话 有可能不同时候得到的代码就变了
_nop();
一般用这个函数 执行一次等于一个语句时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单片机执行一步运算需要一定的时间,这根单片机的晶振有关!
while(i--)执行了6次,6步的时间!
while(i--)执行了6次,6步的时间!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这些属于软件延时,会有一定的误差,但一般的测试没有问题,你可以用KEIL软件仿真,在你写的代码前后各设置一个断点,从第一个断点开始,单步运行到下个断点,KEIL左侧会显示执行这段代码所用的时间。 本质上就是,单片机执行完这段代码的时间,就是你所要的时间。
这款单片机不能硬件调试,如果是其它类型能调试 的MCU,你可以用示波器测出来。
这款单片机不能硬件调试,如果是其它类型能调试 的MCU,你可以用示波器测出来。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询