1 / 3
文档名称:

AVR延时函数.doc

格式:doc   页数:3页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

AVR延时函数.doc

上传人:luyinyzha 2016/7/9 文件大小:0 KB

下载得到文件列表

AVR延时函数.doc

文档介绍

文档介绍:AVR 的精确延时程序(2009-12-28 06:41:30) 1. 毫秒级的延时延时 1ms; void delay_1ms(void) { unsigned int i; for(i=1;i<(unsigned int)(xtal*143-2_;i++) ;} 在上式中, xtal 为晶振频率,单位为 MHz. 当晶振频率为 8M时, 延时函数软件仿真的结果为 μ s. 当晶振频率为 4M时, 延时函数软件仿真结果为 μ s. 如果需要准确的 1ms 延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。下面的函数可以获得 1ms 的整数倍的延时时间: void delay(unsigned int n) { unsigned int i; for(i=0;i<n;i++) delay_1ms(); } 如果需要准确的延时时间, 则本计算公式只供参考, 应通过软件仿真后, 再确定循环的次数及循环初值. 2. 微秒延时晶振频率为 8MHz 时1μs 延时函数: void delay_1us(void) { asm("nop"); } 当然也可以使用宏定义来实现 1μs 延时: #define delay_1us(); asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop") 如果小于 1μs 的延时,只有使用宏定义实现,当然,也可以直接插入在线汇编 asm("nop"); 语句实现延时。在程序中需要微秒级的延时时,可以用以下函数实现。 void delay_us(unsigned int n) { unsigned int i; for(i=0;i<n;i++) delay_1us(); } 说明:如果需要准确的延时时间,则还必须关中断,并通过软件仿真后,再确定循环的次数及循环初值. 强调:在实际应用中一般不直接使用软件进行长时间的延时,因为 MCU 一直停留延时函数中(称为阻断), 不能再干其它的事睛( 除了中断外), 只有非常简单的应用或者简单的演示时才能使用延时函数实现长时间延时。实际应用中, 对长时间( 较简单任务一般指几十毫秒以上, 对于复杂的应用, 一般指几毫秒以上)的延时,应采用非阻断式的延时方式,或者使用定时器中断来完成延时。 WINAVR 自带延时函数说明 文件位于 X:\WinAVR\avr\include\avr 中。 中有两个函数--------_delay_ms(double __ms) 和_delay_us(double __us) , 分别延时__ms*F_CPU 毫秒、__us*F_CP U 微秒,(单片机晶振是 F_CPU MHZ )两函数的原型分别如下: 1、_delay_us(double __us) static __inline__ void _delay_us(double __us) { uint8_t __ticks; double __tmp = ((F_CPU) / 3e6) * __us; if (__tmp < ) __tic