单片机精确延时函数

#include
#include

/*********************11.0592晶振**************************/
#ifdef RATE_110592 // 定义晶振频率
// 延时1ms
void delay_ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作模式1
TF0 = 0; // 清溢出标志,软清零

TH0 = 0xfc;
TL0 = 0x66;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待
TR0 = 0; // 关闭定时器0
}
}

// 延时10ms
void delay_10ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作模式1
TF0 = 0; // 清溢出标志,软清零

TH0 = 0xdc;
TL0 = 0x00;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待
TR0 = 0; // 关闭定时器0
}
}

// 延时50ms
void delay_50ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作模式1
TF0 = 0; // 清溢出标志,软清零

TH0 = 0x4c;
TL0 = 0x00;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待
TR0 = 0; // 关闭定时器0
}
}

#endif // RATE_110592


/************************12MHz晶振*************************/
#ifdef RATE_12M // 定义晶振频率

//延时1ms
void delay_ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作在模式1
TF0 = 0; // 清溢出标志位,软清零

TH0 = 0xfc;
TL0 = 0x18;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待

TR0 = 0; // 关闭定时器0
}
}

// 延时10ms
void delay_10ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作模式1
TF0 = 0; // 清溢出标志位,软清零

TH0 = 0xd8;
TL0 = 0xf0;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待

TR0 = 0; // 关闭定时器0
}
}

// 延时50ms
void delay_50ms(unsigned int ms)
{
unsigned int i;
for(i = 0; i < ms; i++)
{
TMOD = 0x01; // 定时器0,工作模式1
TF0 = 0; // 清溢出标志位,软清零

TH0 = 0x3c;
TL0 = 0xb0;
TR0 = 1; // 启动定时器0

while(TF0 == 0){;} // 定时器无溢出,循环等待

TR0 = 0; // 关闭定时器0
}
}

#endif // RATE_12M







相关文档
最新文档