单片机语言精确延时实现方法与分析.pdfVIP

  • 0
  • 0
  • 约1.38千字
  • 约 2页
  • 2026-03-10 发布于北京
  • 举报

单片机语言精确延时实现方法与分析.pdf

C语言的精确延时

以下所有测试若作为子函数,则调用时还要加上调用的2us和返回的2us,再加上赋值的时

间。

long4us(赋值)+2us(),int2us,char1us,3for则不用.

即作为子函数调用全部要加的时间为long+10us,int+6us,char+5us,3for+0us.

*/

#includeat89x52.h

voiddelay(void)

{

unsignedlongi;

i=135;

while(--i);

}

voidmain(void)

{

/*unsignedlongi;

i=113;

while(--i);

//此种形式定时时间为i*480/Mus。最大误差不会超过1us,此1us主要是由某些特殊晶振不

能被整除引起.

//i最大值为.M=12MHz下,Tmax=171798691800us约=17万秒

//大概生成代码是74

*/

/*unsignedinti;

i=113;

while(--i);

//此种形式定时时间为i*96/Mus。最大误差不会超过1us,此1us主要是由某些特殊晶振不

能被整除引起.

//i最大值为65535.M=12MHz下,Tmax=524280us约=0.5秒(500ms)

//大概生成代码是32

*/

/*unsignedchari;

i=150;

while(--i);

//此种形式定时时间为i*24/Mus。最大误差不会超过1us,此1us主要是由某些特殊晶振不

能被整除引起.

//i最大值为255.M=12MHz下,Tmax=510us约=0.5ms(500us)

//大概生成代码是23

*/

/*unsignedchari,j,k;

for(i=10;i0;i--)

for(j=10;j0;j--)

for(k=10;k0;k--)

;

//此种形式定时时间为(((2*i+3)*j+3)*k+1)*12/Mus。最大误差不会超过1us,

//此1us主要是由某些特殊晶振不能被整除引起.

//一层循环n:R5*2DJNZ2us

//二层循环m:R6*(n+3)DJNZ2us+R5賦值1us=3us

//三层循环:R7*(m+3)DJNZ2us+R6賦值1us=3us

//循环外:R7赋值1us

//i最大值为255.M=12MHz下,Tmax=33.358591s

//大概生成代码是31。不过计算挺,要用软件计算,而且不是每1us都能算得到。

*/

delay();//子函数调用才用此行

P1_1=0;

while(1);

}

文档评论(0)

1亿VIP精品文档

相关文档