您的位置:首页 > 其它

延时程序几乎在每个单片机程序中都能看到,一个延时程序的好坏直接影响单片机的运行效率!

2010-02-23 09:30 197 查看
延时程序几乎在每个单片机程序中都能看到,一个延时程序的好坏直接影响单片机的运行效率,不同的软件工程师使用同样的编程工具实现同样的功能,程序的效率、代码的大小、可移植性是完全不一样的。跟大家分享一下下面的延时程序:

#include "reg52.h"

sbit P10=P1^0;
//*********延时子程序******
void delay0(unsigned int i)
{
while ((i--)!=1 ); // 延时10*i个机器周期
}

//*********延时子程序******
void delay1(unsigned int i)
{
while ( --i ); // 延时8*i+2个机器周期
}

//*********延时子程序******
void delay2(unsigned int i)
{
while ( i-- ); // 延时(i+1)*9+2个机器周期
}

//*********延时子程序******
void delay3(unsigned char j)
{
while ( --j ); // 延时2*j+1个机器周期
}

//*********延时子程序******
void delay4(unsigned char j)
{
while ( j-- ); // 延时(j+1)*6+1个机器周期
}

///////////////////////////////////////////////////////////////
// KeilC51精确延时小程序
// 应用平台:51单片机
// 外部晶振:11.0592MHz
// 在C平台下编写代码,通过看汇编代码,一点一点把时间抠准.
//一. 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--);
}

//二. 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--);
}
////////////////////////////////////////////////////////////////////////

void main(void)
{
while (1)
{
P10=0;
delay0(10);
P10=1;
delay1(10);
P10=0;
delay2(10);
P10=1;
delay3(10);
P10=0;
delay4(10);
P10=1;
delay500ms();
P10=0;
delay200ms();
P10=1;
delay10ms();
P10=0;
delay1s();
P10=1;
}
}

采用Keil uVision3进行编译,编译结果如下:

Program Size: data=9.0 xdata=0 code=180

"dalay" - 0 Error(s), 0 Warning(s).

以上程序代码都经过详细的测试,大家可以放心使用,如有更好的建议可以发E-Mail:gxay2000@126.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐