打印

关于延时程序的问题

[复制链接]
1786|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
acer4736|  楼主 | 2011-12-22 20:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问void Delay_ms(unsigned long nValue)//毫秒为单位,8MHz为主时钟

{

    unsigned long nCount;

    int i;

    unsigned long j;

    nCount = 2667;

    for(i = nValue;i > 0;i--)

    {

     for(j = nCount;j > 0;j--);

    }

    return;

}

中2667如何得来的 ,是一条指令需要3个时钟周期么,2667=8000/3,对吗?

相关帖子

沙发
ic开发者| | 2011-12-22 20:27 | 只看该作者
确定延时时间的办法是观察上面这段C代码编译成的汇编代码,
然后看每条汇编代码所用到的指令,每条汇编指令对应的周期是一定的,
这样再根据跳转次数就能够计算延时时间了。
如果是精确的延时建议用定时器

使用特权

评论回复
板凳
初涉职场| | 2011-12-22 20:36 | 只看该作者
这种写法在被不同编译器优化时,或不同的优化等级优化时,有可能会出现不同的汇编代码,导致时间有差异。所以还是用定时器好。

使用特权

评论回复
地板
hold住| | 2011-12-22 20:58 | 只看该作者
软件延时,只是一些粗略的延时,准确的延时还是需要通过定时器来实现的。

使用特权

评论回复
5
专注力5| | 2011-12-22 21:27 | 只看该作者
定时器 或者用__delay_cycles( );

使用特权

评论回复
6
tianm| | 2011-12-23 15:15 | 只看该作者
这种延时方法 一般实测用多少次循环

使用特权

评论回复
7
peter_zheng| | 2011-12-23 17:39 | 只看该作者
for消耗3个时钟周期,就跟你说的是一样的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

1500

帖子

3

粉丝