完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
很多的单片机的真高手和假高手 都不喜欢用 软件延时 !
我不是高手,所以我还用!!! 我只用过keil编译器 ! KEIL 编译器的优化级别 对我写得下面这些函数是有影响的.. Keil V8.02 中第0-3级 是一个档 4-5级是 一个档 6-9级是一个档 =========================== 例如下的这些例子在 0-3的级别下还是很精确的 注意:INT8U 你用 unsigned char 替代就可以用了 /*------------------------ 软件延时(单位:秒) KEIL 优化级别为0-3时 -------------------------*/ /*------------------------ 最长延时时间255秒 晶振12Mhz 若count=0,实际延时0.000014秒 若count=1,实际延时1.000024秒 若count=2,实际延时2.000034秒 若count=3,实际延时3.000044秒 若count=n,实际延时n + 0.000014 + (0.00001 * n)秒 //--------------------------------------------- void Delay_Sec(INT8U count) { long int i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 16666; i++) { ; } } } /*------------------------ 软件延时(单位:秒) KEIL 优化级别为0-3时 -------------------------*/ /*------------------------ 最长延时时间255秒 晶振11.0592Mhz 若count=0,实际延时0.00001519秒 若count=1,实际延时1.00006945秒 若count=2,实际延时2.00012369秒 若count=3,实际延时3.00017795秒 若count=n,实际延时n + 0.00001519 + (0.0000542 * n)秒 //------------------------ void Delay_Sec(INT8U count) { long int i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 15360; i++) { ; } } } -------------------------*/ /*------------------------ 软件延时(单位:秒) KEIL 优化级别为0-3时 -------------------------*/ /*------------------------ 最长延时时间255秒 晶振22.1184Mhz 若count=0,实际延时0.00000760秒 若count=1,实际延时1.00041667秒 若count=2,实际延时2.00082574秒 若count=3,实际延时3.00123481秒 若count=n,实际延时n + 0.00000760 + (0.00040907 * n)秒 //--------------------------------- void Delay_Sec(INT8U count) { INT16U i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 47275; i++) { ; } } } -------------------------*/ ========================================================== ======================== ========================== /*------------------------ 软件延时(单位:毫秒) KEIL v8.02 优化级别 0-3好用 -------------------------*/ /*------------------------ 最长延时时间255毫秒 晶振22.1184Mhz 若count=0,实际延时0.00760毫秒 若count=1,实际延时1.00966毫秒 若count=2,实际延时2.01172毫秒 若count=3,实际延时3.01378毫秒 若count=n,实际延时n + 0.00760 + (0.00206 * n)毫秒 //--------------------------------- void Delay_Ms(INT8U count) { INT8U i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 229; i++) { ; } } } /*------------------------ 软件延时(单位:毫秒) keil V8.02 优化级别 0-3好用 -------------------------*/ /*------------------------ 最长延时时间255毫秒 晶振11.0592Mhz 若count=0,实际延时0.01519毫秒 若count=1,实际延时1.02105毫秒 若count=2,实际延时2.02691毫秒 若count=3,实际延时3.03277毫秒 若count=n,实际延时n + 0.01519 + (0.00586 * n)毫秒 //--------------------------------- void Delay_Ms(INT8U count) { INT8U i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 114; i++) { ; } } } -------------------------*/ /*------------------------ 最长延时时间255毫秒 晶振12Mhz (优化级别 0-3好用) 软件延时(单位:毫秒) (若count=0,实际延时0.014毫秒 若count=1,实际延时1.021毫秒 若count=2,实际延时2.028毫秒 若count=3,实际延时3.035毫秒 若count=4,实际延时4.042毫秒 若count=5,实际延时5.049毫秒) 若count=n,实际延时n + 0.014 + (0.007 * n)毫秒 //--------------------------------- void Delay_Ms(INT8U count) { INT8U i; INT8U j; for (j = 0; j < count; j++) { for (i = 0; i < 124; i++) { ; } } } -------------------------*/ 以上 这些函数 如果你将keil 优化级别设置为 4 或者是5 也是 可以用的 ,不过 就不是很精确了 !! 就是说我那些 计算 延时的公式 就不是非常非常准确了,不过也可以凑合着用 !! 就是那些 若 Count = ,,, 实际延时 是 ...........的 那些公式。 如果优化级别是6-9那么这些公式就非常不准确了!!!至于为什么不准确,你看看优化级别的说明就清楚了!! ========================= 再次强调 这些公式都是我自己推推导出来的 所以很有可能存在问题 这些公式的推导 (在优化级别0-3时 ) 考虑的是 count =0 到 255的这256种情况下的准确性 。而不仅仅是其中的一种情况。 ====================================================== 那么在所有的优化级别下的通用的 延时函数应该怎么写呢? 应该是用那个 _nop_(); 吧 这样编译器就不会优化掉这些_nop_();了。调用那个叫 strings。h ,差不多是这个名字。这个你肯定比我清楚 ! |
|
相关推荐 |
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码
304 浏览 0 评论
【瑞萨RA2L1入门学习】+ MacOS安装e2studio
253 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作
650 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】3D 图形显示
510 浏览 0 评论
641 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12212 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 13:56 , Processed in 0.512367 second(s), Total 44, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号