[AVR单片机] avr自带的延迟函数有问题?

[复制链接]
 楼主| yushiqian2012 发表于 2012-9-26 20:56 | 显示全部楼层 |阅读模式
我用示波器看了一下,用_delay_us(1),竟然延迟了9us,用_delay_us(50),竟然延迟了200多us,这是为啥啊?我写的熔丝位1MHZ,另外我的avr芯片是atmega128
ccxlslr 发表于 2012-9-27 14:12 | 显示全部楼层
在配置编译参数时,也要配置成1M。
airwill 发表于 2012-9-28 19:17 | 显示全部楼层
void
_delay_us(double __us)
{
        uint8_t __ticks;
        double __tmp = ((F_CPU) / 3e6) * __us;
        if (__tmp < 1.0)
                __ticks = 1;
        else if (__tmp > 255)
                __ticks = 0;        /* i.e. 256 */
        else
                __ticks = (uint8_t)__tmp;
        _delay_loop_1(__ticks);
}

这里, 唯一影响的是 F_CPU, 估计楼主的 CPU 频率没有准确设置.
john_lee 发表于 2012-9-29 01:12 | 显示全部楼层
楼上的功力深厚
kangxuebin 发表于 2012-10-19 21:50 | 显示全部楼层
3楼:正解
古道热肠 发表于 2012-10-20 16:42 | 显示全部楼层
#define F_CPU 8000000   //把上面这条语句放到程序中再编译试一下。
如果找不到定义,系统会用默认的1M晶振来编译的,也可把芯片的振荡选项改成内置1M,然后再测试延时,如果正常了,那就反证问题肯定是没设置晶振了。
dmxyzk 发表于 2012-10-22 20:26 | 显示全部楼层
我也有同样问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不需要别人来证明自己,自己的态度更重要

45

主题

354

帖子

0

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