[AVR单片机] 关于avr单片机的延时函数

[复制链接]
8807|17
 楼主| sdu_yqc 发表于 2011-4-9 19:55 | 显示全部楼层 |阅读模式
void delay(uint m) //延时程序ms
{ uint i,j;
for(i=0;i<m;i++)
for(j=0;j<1141;j++);
}
请问,这个1141是怎么得出来的? 我在网上看的,1141改成141就是延时微秒了,对吗?求解释
cooolsky 发表于 2011-4-9 19:59 | 显示全部楼层
跟晶振频率有关..然后keil软件里有模拟的..
airwill 发表于 2011-4-10 16:46 | 显示全部楼层
在 GCCAVR 的 delay.h 文件中, 讲述了这个问题. 可以先去看一下
技美电子 发表于 2011-4-10 18:28 | 显示全部楼层
IAR里面有个库函数超准的。__delay_cycles(n)
ccxlslr 发表于 2011-4-12 14:33 | 显示全部楼层
NB,这都有人研究,中国单片机还是很有前途的
joyme 发表于 2011-4-19 15:49 | 显示全部楼层
141还是延时us,谁家的单片机能跑那么快呀?
无赖2033 发表于 2011-6-6 23:13 | 显示全部楼层
不是这样的,这跟你的晶振频率有关的,你可以用avrstdio仿真
uabuntsu 发表于 2011-7-12 22:31 | 显示全部楼层
本帖最后由 uabuntsu 于 2011-7-30 16:30 编辑

头文件中定义了精确延时了呀。
#include<util/delay.h>

然后就可以使用:
_delay_us(double m)  //微秒级延迟,
_delay_ms(double m)  //毫秒级延迟
hotpower 发表于 2011-7-13 08:56 | 显示全部楼层
winavr的软件延时是相当准确的。
jamin.x 发表于 2011-9-27 18:39 | 显示全部楼层
和晶振又关系
jamin.x 发表于 2011-9-27 18:53 | 显示全部楼层
我用的ATMEGA16L,晶振8mhz,使用外部晶振电路,延时函数如下:
  void Delay_1ms(unsigned int n)
{
      unsigned int i,j;
      for(i=0;i<n;i++)
     {
         for (j=0;j<570;j++);
      }
}
ziyun5 发表于 2011-10-2 21:10 | 显示全部楼层
如果你有时间的话,我建议你去看看keil里的文档,绝对对你有帮助
hbsun 发表于 2011-10-3 16:16 | 显示全部楼层
用AVR STUDIO看一下反汇编,算出每次循环执行多少条指令以及单,双周期指令云云,然后再根据你的单片机主频可以计算出延时时间,也可以从AVRSTUDIO软件仿真上直接读出来。。。
一颗心的思考 发表于 2014-10-23 12:48 | 显示全部楼层
ziyun5 发表于 2011-10-2 21:10
如果你有时间的话,我建议你去看看keil里的文档,绝对对你有帮助

keil?
hillslb 发表于 2014-11-28 13:09 | 显示全部楼层
这种延时程序,我觉得还是删掉的好,一般都不会用这种死循环,到ms级,最多就几个us用这个
courage苏 发表于 2014-12-1 00:43 来自手机 | 显示全部楼层
用周期计算,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

140

帖子

1

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