专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

精确延时整理(12T单片机)

作者:佚名   来源:本站原创   点击数:  更新时间:2014年04月10日   【字体:

注:1.编译软件为"Keil uVision3"(Keil uVision2也试用)。用其他编译软件的话就不准了。
       2.需要包含头文件<intrins.h>
       3.所有函数的延时时间都是在12Mhz晶振下计算的,如用其他晶振需进行换算。
       4.函数的执行时间为“函数的参数”乘以精确到的时间。例如delayms(unsigned char n)函数,其精确度为1ms,如果写入语句delayms(4),那就是延时4ms。
       5.计算出来的延时时间不包括函数调用与返回的时间。如果函数的精确度较高,且参数较小,那么实际延时时间就可能与计算的时间差很远。
 
(1)精确到2us的延时(12MHz)
void delayus(unsigned char n)
{ while(--n);
}
 
(2)精确到100us的延时(12MHz)
void delay100us(unsigned char n) 
{ unsigned char i;
  for(;n;n--)
   { _nop_();
     for(i=46;i;i--);
   }
}
 
(3)精确的半毫秒延时函数(12MHz)
void delay1_2ms(unsigned char n)
{ unsigned char i;
  for(;n!=0;n--)
   { _nop_();
     for(i=246u;i!=0;i--);
   }
}
 
(4)精确的毫秒延时函数(12MHz)
void delayms(unsigned char n)
{ unsigned char i;
  for(;n!=0;n--)
   { for(i=248u;i!=0;i--);
     for(i=248u;i!=0;i--);
   }
}
 

关闭窗口