原创 delay

2009-8-26 16:47 2901 4 4 分类: MCU/ 嵌入式

WINAVR 调用delay函数的方法
之前一些演示程序中的延时均采用编写的软件延時子程序,可是程序运行时的实际延时时间并不是我们软件延時子程序中设定的时间。而采用WINAVR自帶的延時函數, 则延时时间的精度大大提高。软件延時最好不要用自己寫的,一是很容易被优化掉;二是時間不大好算。如果用WINAVR的話,可以用它自帶的延時函數。



WINAVR 调用delay函数:

#include <avr/delay.h>     // 头文件
// _delay_loop_2(XXXX);  // 16-bit count, 4 cycles/loop  
// _delay_loop_1(XX);      //   8-bit count, 3 cycles/loop  

/*----------------------------*/
void delay_1ms(void)        //1ms延时函数 
{   
      _delay_loop_2(2000);  // 16-bit count,4 cycles/loop   
}                  // 8MHz/8000=1ms, 8000/4=2000=1ms   
                      //使用不同的晶振,可以自己来计算出()里的值

/*----------------------------*/ 
void delay_nms(unsigned int n)       //N ms延时函数 
{
      unsigned int i="0";
      for (i=0;i<n;i++)
      delay_1ms(); 
}

实际应用编写如下:
/*----------------------------*/
#include <avr/delay.h>     // 头文件
#define FREQ  8                 //工作频率为8MHz,可以更改为4、2、1

/*----------------------------*/
void delay_ms(unsigned int ms)
{
     unsigned int  i;   

     for(i=0;i<ms;i++ )
     {
            _delay_loop_2(250*FREQ);   //16-bit count, 4 cycles/loop  
     }                                            //8MHz/8000=1ms 8000/4=2000=1ms    


}

b.gif
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条