一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: benli

[其他综合] 求个可传递参数的延时函数

[复制链接]
发表于 2014-8-14 18:53 | 显示全部楼层
void delay(unsigned int  n_us)
{
    unsigned int  i=n_us;  //注意这里还有周期
     while(i)
    {
           i--;
    }       
}
比较接近精确的定时
在精确就嵌入汇编程序了,如果用Keil的话看以打开汇编后的源文件看看
回复

使用道具 举报

发表于 2014-8-14 23:30 | 显示全部楼层
fujiachun 发表于 2014-8-14 18:53
void delay(unsigned int  n_us)
{
    unsigned int  i=n_us;  //注意这里还有周期

自己测试一下就知道延时多少了~说多了浪费时间,几分钟写个程序就搞定的事情~
回复

使用道具 举报

发表于 2014-8-15 06:09 | 显示全部楼层
桃之夭夭 发表于 2014-8-14 23:30
自己测试一下就知道延时多少了~说多了浪费时间,几分钟写个程序就搞定的事情~

C51精确延时,绝对精确!发布: 2010-1-10 14:25 | 作者: cat_li | 来源: 电子爱好者社区
转自:http://www.ourdev.cn/bbs/bbs_con ... 298&bbs_id=9999
有些特殊的应用会用到比较精确的延时(比如DS18B20等),而C不像汇编,延时精准度不好算。本人经过反复调试,对照KEIL编译后的汇编源文件,得出了以下几条精确延时的语句(绝对精确!本人已通过实际测试),今天贴上来,希望对需要的朋友有所帮助。

sbit LED  =  P1^0;      // 定义一个管脚(延时测试用)
unsigned int i = 3;     // 注意i,j的数据类型,
unsigned char j = 3;    // 不同的数据类型延时有很大不同
//-----------------各种精确延时语句-----------------------------------
while( (i--)!=1 );      // 延时10*i个机器周期
i = 10; while( --i );   // 延时8*i+2个机器周期
i = 10; while( i-- );   // 延时(i+1)*9+2个机器周期
j = 5;  while( --j );   // 延时2*j+1个机器周期
j = 5;  while( j-- );   // 延时(j+1)*6+1个机器周期

回复

使用道具 举报

发表于 2014-8-15 09:19 | 显示全部楼层
单片机小精灵
回复

使用道具 举报

发表于 2014-8-15 09:35 | 显示全部楼层
精确延时我一般都是估计个差不多,然后用示波器看实际输出,很快就搞定了。
回复

使用道具 举报

 楼主| 发表于 2014-8-15 12:26 来自手机 | 显示全部楼层
fujiachun 发表于 2014-8-15 06:09  C51精确延时,绝对精确!发布: 2010-1-10 14:25 | 作者: cat_li | 来源: 电子爱好者社区  转自:http://w ...

几个机器周期的延时还不如用nop简单精确呢
回复

使用道具 举报

发表于 2014-8-15 12:32 | 显示全部楼层
benli 发表于 2014-8-15 12:26
几个机器周期的延时还不如用nop简单精确呢

for 循环编译后的汇编会多很多的,并且随着变量的类型变化很大,所以精确延时很少使用for循环的。
回复

使用道具 举报

发表于 2014-8-15 12:36 | 显示全部楼层
benli 发表于 2014-8-15 12:26
几个机器周期的延时还不如用nop简单精确呢

抛砖引玉而已
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-18 21:56 , Processed in 0.033606 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表