仗剑天涯 发表于 2013-2-27 21:50:44

avr studio调用_delay_ms(double _ms)的问题

本帖最后由 仗剑天涯 于 2013-2-27 21:51 编辑

avr studio6中,我想要调用库函数_delay_ms(double _ms)进行延时,晶振频率设置了8MHZ:
# define F_CPU 8000000UL

这是在while循环里的一个延时后反转PORTA0的状态:
while (1)
{               
         _delay_ms(10.0);
         PORTA ^= BIT(0);   //取反       
}
但是不知为何,通过软件调试,发现函数的延时时间没有10ms


不知这是因为什么原因,和编译器配置优化有关系吗?求大神相助~~~

pangbin4 发表于 2013-2-27 23:20:42

我今天也在调试这个延时,同样发现问题,也不知如何操作

yklstudent 发表于 2013-2-27 23:59:14

本帖最后由 yklstudent 于 2013-2-28 10:03 编辑

AS6.0自带的延时函数很准确的 比AS4准确多了 不是一个等级的
不准只能说你还不会用

仗剑天涯 发表于 2013-3-7 14:27:50

yklstudent 发表于 2013-2-27 23:59 static/image/common/back.gif
AS6.0自带的延时函数很准确的 比AS4准确多了 不是一个等级的
不准只能说你还不会用
...

嗯,也正是因为它的延时比较准,所以我才用库里带的延时函数,但是现在的问题是调试信息显示没有延时这么长时间,而且我程序下到我的开发板上,可以很明显感受到LED的闪动频率太快了。您能帮我分析一下是什么原因吗?
下面这是相关的代码:#defineBIT(n)   (0x01<<n)
for(int i=0;i<100;i++)
{
   delay_ms(10.0);
}
PORTA ^=BIT(0);

yklstudent 发表于 2013-3-7 14:55:05

仗剑天涯 发表于 2013-3-7 14:27 static/image/common/back.gif
嗯,也正是因为它的延时比较准,所以我才用库里带的延时函数,但是现在的问题是调试信息显示没有延时这么 ...

不全啊 不太好看啊

仗剑天涯 发表于 2013-3-9 11:16:54

yklstudent 发表于 2013-3-7 14:55 static/image/common/back.gif
不全啊 不太好看啊

#include <avr/io.h>

#include <util/delay.h>

# define F_CPU 8000000UL
#define uchar    unsigned char
#define BIT(n)(0x01<<n)

void mydelay_s(int time)
{
        volatile int i;
        for(i=0;i<time;i++)
        {
                _delay_ms(10);
        }
}
int main()
{
        DDRF =0x00;
        DDRF |= BIT(2);   //设置F口输出
        DDRF |= BIT(1);
        PORTF |= BIT(2);
        PORTF |=BIT(1);
       
        DDRC |= 0xff;   //关数码管
        PORTC |= 0xff;
        DDRA |= 0xff;
        PORTA |= 0xff;
       
        DDRF = 0xff;
        DDRF &= ~BIT(2);
        DDRF &= ~BIT(1);
        PORTF |= BIT(3);
        //前面都是开发板的配置
       
       
        DDRA = 0xff;   //A管脚设为输出
        PORTA = 0xfe;   //最后一个亮
        while (1)
        {
                mydelay_s(500);   //5S为一个周期
                PORTA ^= BIT(0);   //反向       
        }
}

yklstudent 发表于 2013-3-9 12:35:42

仗剑天涯 发表于 2013-3-9 11:16 static/image/common/back.gif


F_CPU应该先定义 再把delay.h包含进来才对
不然delay.h内的F_CPU应该使用的还是默认的值
所以跟你想的有误差吧

仗剑天涯 发表于 2013-3-11 18:39:06

yklstudent 发表于 2013-3-9 12:35 static/image/common/back.gif
F_CPU应该先定义 再把delay.h包含进来才对
不然delay.h内的F_CPU应该使用的还是默认的值
所以跟你想的有 ...

恩恩,果然是这个问题!谢谢您!!
页: [1]
查看完整版本: avr studio调用_delay_ms(double _ms)的问题