完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
本帖最后由 suae 于 2011-7-27 16:24 编辑
1.毫秒级的延时 AVR单片机 延时程序 延时1ms; void delay_1ms(void) { unsigned int i; for(i=1;i<(unsigned int)(xtal*143-2);i++) ; } 当晶振频率为8M时,延时函数软件仿真的结果为1000.25μs.当晶振频率为4M时,延时函数软件仿真结果为999.5μs. AVR 延时程序 如果需要准确的1ms延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。 下面的函数可以获得1ms的整数倍的延时时间: AVR单片机 延时程序 void delay(unsigned int n) { unsigned int i; for(i=0;i delay_1ms(); } 如果需要准确的延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值. AVR 延时程序 2.微秒延时 晶振4M,编辑器ICCAVR,芯片mega16 //最大延时时间131.072ms void delay(unsigned int i) //延时时间T=2*(i+1)us其中1= { while(--i); } 晶振频率为8MHz时1μs延时函数: AVR 延时程序 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"); 语句实现延时。 在程序中需要微秒级的延时时,可以用以下函数实现。 AVR 延时程序 void delay_us(unsigned int n) { unsigned int i; for(i=0;i delay_1us(); } 说明:如果需要准确的延时时间,则还必须关中断,并通过软件仿真后,再确定循环的次数及循环初值. 强调:在实际应用中一般不直接使用软件进行长时间的延时,AVR 延时程序,因为MCU一直停留延时函数中(称为阻断),不能再干其它的事睛(除了中断外),只有非常简单的应用或者简单的演示时才能使用延时函数实现长时间延时。实际应用中,对长时间(较简单任务一般指几十毫秒以上,对于复杂的应用,一般指几毫秒以上)的延时,应采用非阻断式的延时方式,或者使用定时器中断来完成延时。AVR单片机 延时程序 |
|
相关推荐
2 个讨论
|
|
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16904 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 19:39 , Processed in 0.749513 second(s), Total 45, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1235