单片机C语言延迟程序时间怎么算

单片机C语言延迟程序时间怎么算,第1张

  用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。

  给大家提供一个延时子程序模块,并以此给一个出我们经常用到的延时的数据表格。

单片机C语言延迟程序时间怎么算,单片机C语言延迟程序时间怎么算,第2张

  延时模块:其中问号代表要填的数,要延时多少,到表格中去找数据,然后填上就OK!切忌3条FOR语句不能颠倒顺序

  void Delay()

  {

  unsigned char a,b,c;

  for(a=0;a《?;a++)

  for(b=0;b《?;b++)

  for(c++=0;c《?;c++);

  }

  基本上我们平时用到的延时都在这里了,每种延时的误差都很小,最大也不过3us,有的甚至没有误差,已经很精确了,如果想延时1秒钟,你可以连续调用延时250ms的程序4次,总共延时误差12us,这样的误差已经不算误差了,用汇编语言编写还达不到这个程度。

  C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。

  一。 500ms延时子程序   程序:

  void delay500ms(void)

  {

  unsigned char i,j,k;

  for(i=15;i》0;i--)

  for(j=202;j》0;j--)

  for(k=81;k》0;k--);

  }

  计算分析:

  程序共有三层循环

  一层循环n:R5*2 = 81*2 = 162us DJNZ 2us

  二层循环m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5赋值 1us = 3us

  三层循环: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6赋值 1us = 3us

  循环外: 5us 子程序调用 2us + 子程序返回 2us + R7赋值 1us = 5us

  延时总时间 = 三层循环 + 循环外 = 499995+5 = 500000us =500ms

  计算公式:延时时间=[(2*R5+3)*R6+3]*R7+5

  二。 200ms延时子程序   程序:

  void delay200ms(void)

  {

  unsigned char i,j,k;

  for(i=5;i》0;i--)

  for(j=132;j》0;j--)

  for(k=150;k》0;k--);

  }

  三。 10ms延时子程序   程序:

  void delay10ms(void)

  {

  unsigned char i,j,k;

  for(i=5;i》0;i--)

  for(j=4;j》0;j--)

  for(k=248;k》0;k--);

  }

  四。 1s延时子程序   程序:

  void delay1s(void)

  {

  unsigned char h,i,j,k;

  for(h=5;h》0;h--)

  for(i=4;i》0;i--)

  for(j=116;j》0;j--)

  for(k=214;k》0;k--);

  }

  现在你不再为延时不精确担忧了,参照表中的数据写延时,想延时多少就能延时多少。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2717232.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存