打印
[AVR单片机]

avr自带的延迟函数有问题?

[复制链接]
1867|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
楼上的功力深厚

使用特权

评论回复
5
kangxuebin| | 2012-10-19 21:50 | 只看该作者
3楼:正解

使用特权

评论回复
6
古道热肠| | 2012-10-20 16:42 | 只看该作者
#define F_CPU 8000000   //把上面这条语句放到程序中再编译试一下。
如果找不到定义,系统会用默认的1M晶振来编译的,也可把芯片的振荡选项改成内置1M,然后再测试延时,如果正常了,那就反证问题肯定是没设置晶振了。

使用特权

评论回复
7
dmxyzk| | 2012-10-22 20:26 | 只看该作者
我也有同样问题

使用特权

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

本版积分规则

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

45

主题

354

帖子

0

粉丝