关于延时程序的问题

[复制链接]
2371|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 发表于 2011-12-22 21:27 | 显示全部楼层
定时器 或者用__delay_cycles( );
tianm 发表于 2011-12-23 15:15 | 显示全部楼层
这种延时方法 一般实测用多少次循环
peter_zheng 发表于 2011-12-23 17:39 | 显示全部楼层
for消耗3个时钟周期,就跟你说的是一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

1500

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部