这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 关于延时程序的求助

共10条 1/1 1 跳转至

关于延时程序的求助

高工
2012-07-02 22:18:40     打赏
void delay(uint i) { for(;i!=0;i--); } void delay(uint i) { while(i--); } void delay(uint i) { while(--i); } 求大侠帮忙给个以上三个us级别延时函数的精确度分析,谢谢了!



关键词: 关于     延时     程序     求助    

菜鸟
2012-07-03 13:24:28     打赏
2楼
void delay(uint i)
 { 
   for(;i!=0;i--); 
}

oid delay(uint i) 
{
 while(i--);
 }
 
void delay(uint i)
 { while(--i); } 

你的问题,真若有大神也难以回答。
延时函数很难做大精确延时,延时时间的长短取决你CPU的主频和指令周期。

一般的计算延时函数时间的办法:
看看你的代码反汇编成汇编语言的时候,共有几条指令;
你单片机的主频是多少,再对照体系结构计算出每条指令需要几个指令周期,每个指令周期是多长时间。

知道这些才能知道精确的延时。

或者你用示波器去看个大概时间也可以。
精确地定时都是用定时器的,如果是调整时序的时候用到延时,那么精度是不需要这么高的。

高工
2012-07-03 13:36:49     打赏
3楼
谢谢,我就是想知道怎样用这些稍微精确点的程序,12M的晶振。传感器采集数据的情况下经常会用到us级别的延时。。

高工
2012-07-03 19:28:23     打赏
4楼
精确是相对的,你想要多精确?
跟51的汇编程序一样精确到一个机器周期,
这类程序基本不可能

如果只是数据通信用,延时精度应该可以不用作太多考虑

最后,数据通信也也可以用定时器的

专家
2012-07-04 16:01:09     打赏
5楼
i--  与 --i ,一个是执行了在减,一个是减了再执行!!

高工
2012-07-05 12:57:02     打赏
6楼

一般是在一个时间范围内都能工作


菜鸟
2012-07-05 14:44:37     打赏
7楼

计算指令周期


助工
2012-07-11 08:59:04     打赏
8楼
这个很难算精确,不同编译器,结果都不同,要精确用定时器或用汇编

院士
2012-07-12 09:04:10     打赏
9楼
楼主 是用得什么编译器啊?!
如果是IAR,其提供了官方的库函数__delay_cycles()函数,即为一个机器周期。

菜鸟
2012-09-19 13:56:35     打赏
10楼
值得学习……

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]