新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 8051单片机精确延时程序

8051单片机精确延时程序

作者:时间:2016-11-24来源:网络收藏
各种教材都喜欢用for循环再嵌套一个for循环来实现延时,下列是通过定时器来延时;

本文引用地址:http://www.eepw.com.cn/article/201611/320673.htm

delay(t)表示延时t ms;

也可以通过定时器中断的方式来延时,但是每次延时的时间非常有限,对于11.0592MHz的晶振,每次中断延时只有约71ms.

延时函数

void delay(unsigned int t)//延时t ms

{

TMOD=0x01;//设置工作模式

TR0=1; //启动定时器0

ET0=0x00;//禁止定时中断

while(t!=0)//循环次数t

{

TH0=0xFC;

TL0=0x66;//设置计数初值

while(TF0!=1);//查询计数器溢出标志位

TF0=0;//溢出后清零

t--;

}

}

此外,还用excel制作了一个计算计数初值的的小工具,输入晶振和需要延时的最小单位,就自动计算出计算初值,并转换为16进制(用DEC2HEX函数)

各种教材都喜欢用for循环再嵌套一个for循环来实现延时,下列是通过定时器来延时;

delay(t)表示延时t ms;

也可以通过定时器中断的方式来延时,但是每次延时的时间非常有限,对于11.0592MHz的晶振,每次中断延时只有约71ms.

延时函数

void delay(unsigned int t)//延时t ms

{

TMOD=0x01;//设置工作模式

TR0=1; //启动定时器0

ET0=0x00;//禁止定时中断

while(t!=0)//循环次数t

{

TH0=0xFC;

TL0=0x66;//设置计数初值

while(TF0!=1);//查询计数器溢出标志位

TF0=0;//溢出后清零

t--;

}

}

此外,还用excel制作了一个计算计数初值的的小工具,输入晶振和需要延时的最小单位,就自动计算出计算初值,并转换为16进制(用DEC2HEX函数)



评论


技术专区

关闭