1. 首页 > 科技

C51单片机延时程序,需要不精确延时2小时,请问大神怎么写延时代码,谢谢!

C51单片机延时程序,需要不精确延时2小时,请问大神怎么写延时代码,谢谢!

单片机如何编写延时2min的延时子程序??帮帮忙吧!我是初学者,急需此答案。谢谢了

2min?为什么这几天这么多都在问这么久的延时,不知道你为什么要这么长延时,如果只是单纯的2min延时别的什么都不做的话那一般的延时函数是这样的(单片机晶振12M情况下,12T周期):

void Delay_100MS(unsigned int x)

{

unsigned int a,b;

for(a = x; a > 0; a--)

for(b = 11000; b > 0;b--);

}

你只需要用Delay_MS(1200);就可以,但是这么久的延时是很不科学的,这个思路也很不可取。要2min的时间可以用定时器,这样既准确又不会影响主程序的运行。祝成功~

c51怎么写延时程序??

用汇编语句写循环,看每个指令的周期是多少

循环一次要多少个指令,加上前后的几个,就是总的延时

网上有关于这方面的讨论的帖子的

怎样用51单片机实现小时级延时

51单片机的机器周期是晶振的12分频的倒数。所以你24Mhz的机器周期是T=12/12M=0.5us。

  假设你要定时的数是M,则初值等于M/机器周期(表示执行多少个机器周期)。

  若初值小于65536

  TH0=(65536-初值)%256

  TL0=(65536-初值)/256

  51在24MHZ的最大定时是65536*T=0.032768s,远小于一小时。

  所以为了方便计算,我们假设定时0.01s,然后执行3600/0.01次。

  M=0.01/T=20000

  TH0=(65536-初值)%256=0xB1

  TL0=(65536-初值)/256=0x7F

  用这个数一次定时精确值是0.0100485s。执行360000次精确值是3617.46s。

  中断程序是:

  timer0() interrupt 1

  {

  TR0=0;

  ET0=0;

  TH0=0xB1;

  TL0=0x7F;

  if(delay_1hour)

  {

  if(j) //如果j大于0

  {

  TR0=1;j--; //说明还没到3600次

  }

  else

  {

  if(i) 就算j等于0了,i大于0,说明还没到100次

  {

  TR=1;j=3600;

  }

  else

  {

  flag_1hour=0; //循环了3600000次10ms,关闭延时标志位。。

  }

  }

  }

  ET0=1;

  }

  调用程序:

  void delay1hour()

  {

  delay_1hour=1;i=100;j=3600;TR0=1;

  }//在任意你想开始延时一小时的地方加这个函数。

在延时期间,单片机还可以干其他指令。

请问大神,C51的延时怎么算延时100微秒

用定时器延时更精确:

我就写个基本的东西,你根据你的程序补全来使用:

#include <reg51.h>

main(){TOMD=0X01;TH0=(65536-100)/256;TL0=(65536-100)%256;TR0=1;ET0=1;EA=1;

while(1){;}

}

void funtime0(void) interrupt 1{TH0=(65536-100)/256;TL0=(65536-100)%256;

}