AVR的问题

crazydog1982 2007-09-20 10:40:05
第一种:
#include<avr/io.h>
#include<avr/sleep.h>
#include<avr/signal.h>
#include<avr/interrupt.h>
#include<avr/delay.h>
void port_init()
{
DDRB = 0xFF;
PORTB = 0;
}
void shine() //闪
{
unsigned char data=0;
while(1)
{
data = ~data;
PORTB = data;
_delay_ms(2);
}
}
int main()
{
port_init();
shine();
return 0;
}

第二种:

#include<avr/io.h>
#include<avr/sleep.h>
#include<avr/signal.h>
#include<avr/interrupt.h>
#include<avr/delay.h>
void port_init()
{
DDRB = 0xFF;
PORTB = 0;
}

int main()
{
unsigned char data=0;
port_init();
while(1)
{
data = ~data;
PORTB = data;
_delay_ms(2);
}

return 0;
}

在第一种里面,延时2ms但测到波形长度超过2.3ms
而第二种是正确的2ms
为什么会这样?
...全文
105 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dai_Weis 2007-10-07
  • 打赏
  • 举报
回复
看一下汇编代码就知道了,函数调用时要多做些工作,想要延时准确使用定时器是个好办法。
lbing7 2007-09-20
  • 打赏
  • 举报
回复
_delay_ms(2);

有它的实现吗?

从现在给出的代码看的话是没有任何问题的

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧