单片机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单片机。
展开
 我来答
天云小店
推荐于2017-09-02 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:789万
展开全部

可以用_nop_( )函数来实现微秒级的延时。

_nop_();            // 直接当成一条语句使用,产生一条NOP指令

NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。


注:使用该函数时,需要将头文件#include<intrins.h>包含进源文件中。

风若远去何人留
2014-08-05 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部
大致的原理 就是根据CPU的指标 得到CPU执行一条指令的时间t
然后通过循环一定次数 即执行一定条数的指令N
t*N就是时间了
仅适用于单线程的单片机
对于有线程或者是有中断的情况下会不准确
追问
比如STC89C52单片机时钟频率11.0592MHz,它执行一条语句的时间是1,0851us,但是怎么能看出i=6;while(i--);就是延时了68微妙;或者i=103;while(i>0);i--;又是延时了多少微秒呢,谢谢!!
追答
编译成汇编 然后计算会执行多少条指令 乘上每条时间就可以了
由于编译的时候和编译器以及优化有关 所以单独从C上是看不出来的

另外,如果要求精确 最好用汇编命令写延时 因为编译的话 有可能不同时候得到的代码就变了

_nop();
一般用这个函数 执行一次等于一个语句时间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天行健0君自强
2014-08-05 · 超过13用户采纳过TA的回答
知道答主
回答量:65
采纳率:60%
帮助的人:25.8万
展开全部
单片机执行一步运算需要一定的时间,这根单片机的晶振有关!
while(i--)执行了6次,6步的时间!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wjfhsym
推荐于2017-10-07 · TA获得超过946个赞
知道小有建树答主
回答量:475
采纳率:85%
帮助的人:306万
展开全部
这些属于软件延时,会有一定的误差,但一般的测试没有问题,你可以用KEIL软件仿真,在你写的代码前后各设置一个断点,从第一个断点开始,单步运行到下个断点,KEIL左侧会显示执行这段代码所用的时间。 本质上就是,单片机执行完这段代码的时间,就是你所要的时间。
这款单片机不能硬件调试,如果是其它类型能调试 的MCU,你可以用示波器测出来。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式