延时程序几乎在每个单片机程序中都能看到,一个延时程序的好坏直接影响单片机的运行效率!
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
#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
相关文章推荐
- FastClick消除点击延时提高程序的运行效率
- linux多核多进程访问文件示例程序(每个核上运行一个程序)
- 在iOS中UILabel作为一个文本标签,在实现程序中几乎每个页面都会用到UILabel,UILabel的常用属性:textColor(文本颜色),text(文本值),font(文本字体),textA
- 在一个大DataTable的基础上去除重复数据,分别创建2个小DataTable,省去多次数据库连接,提高效率,加快程序运行
- FastClick消除点击延时提高程序的运行效率
- 本软件包将每个openssl的apps程序做成一个可直接运行调试的VC Console 类型应用程序
- 一个简单的计算程序时间运行效率的工具
- 一个程序来比较cuda/c在GPU/CPU的运行效率
- 关于手机前端FastClick消除点击延时提高程序的运行效率
- [阿里巴巴2015校园招聘]写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。 .
- FastClick消除点击延时提高程序的运行效率
- 单片机中一个程序的运行过程
- 一个程序来比较cuda/c在GPU/CPU的运行效率
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
- 写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。请注意程序效率。
- 提高程序运行效率的10个简单方法(转)
- 使Qt程序在Windows系统中仅运行一个实例
- 单片机内程序运行的时候ram空间是如何分配的?
- linux程序只运行一个实例
- 提升Python程序运行效率的6个方法