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;
}