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
不知这是因为什么原因,和编译器配置优化有关系吗?求大神相助~~~
我今天也在调试这个延时,同样发现问题,也不知如何操作 本帖最后由 yklstudent 于 2013-2-28 10:03 编辑
AS6.0自带的延时函数很准确的 比AS4准确多了 不是一个等级的
不准只能说你还不会用
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); 仗剑天涯 发表于 2013-3-7 14:27 static/image/common/back.gif
嗯,也正是因为它的延时比较准,所以我才用库里带的延时函数,但是现在的问题是调试信息显示没有延时这么 ...
不全啊 不太好看啊 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); //反向
}
}
仗剑天涯 发表于 2013-3-9 11:16 static/image/common/back.gif
F_CPU应该先定义 再把delay.h包含进来才对
不然delay.h内的F_CPU应该使用的还是默认的值
所以跟你想的有误差吧 yklstudent 发表于 2013-3-9 12:35 static/image/common/back.gif
F_CPU应该先定义 再把delay.h包含进来才对
不然delay.h内的F_CPU应该使用的还是默认的值
所以跟你想的有 ...
恩恩,果然是这个问题!谢谢您!!
页:
[1]