51单片机Delay函数
时间: 2023-11-11 08:14:36 浏览: 301
51单片机中常用的Delay函数有两种实现方式:软件延时和硬件延时。
1. 软件延时
软件延时是指通过程序循环等待来实现延时的方式。例如,当需要延时1毫秒时,可以在程序中加入一个循环,使程序在该循环内循环一定次数,从而实现1毫秒的延时。这种方式的实现简单,但精度较低,而且会占用CPU资源。
以下是一种简单的软件延时实现方式(以延时1毫秒为例):
```c
void Delay(unsigned int n)
{
unsigned int i, j;
for(i = 0; i < n; i++)
for(j = 0; j < 110; j++);
}
```
其中,n表示需要延时的毫秒数。通过两层循环,程序在该函数内循环了n次,每次内部循环110次,从而实现1毫秒的延时。需要注意的是,循环次数的具体值需要根据单片机的主频来调整。
2. 硬件延时
硬件延时是指通过单片机自带的定时器模块来实现延时的方式。使用定时器模块可以提高延时的精度,而且不会占用CPU资源。在使用定时器模块实现延时时,需要注意定时器的工作模式、计时初值和中断设置等参数的配置。
以下是一种简单的硬件延时实现方式(以延时1毫秒为例):
```c
void Delay(unsigned int n)
{
TMOD &= 0xF0; //清空低四位
TMOD |= 0x01; //设置为模式1,16位定时器模式
while(n--)
{
TH0 = 0xFC; //设置高8位初值
TL0 = 0x67; //设置低8位初值
TR0 = 1; //启动定时器0
while(!TF0); //等待定时器0溢出
TR0 = 0; //停止定时器0
TF0 = 0; //清除定时器0溢出标志
}
}
```
其中,n表示需要延时的毫秒数。在该函数中,我们使用了定时器0来实现延时,通过设置TH0和TL0寄存器的初值来控制定时器的计时时间。在等待定时器0溢出时,程序会一直循环等待,直到定时器0溢出后跳出循环。需要注意的是,定时器的具体计时时间和初值需要根据单片机的主频和定时器的工作模式来调整。
阅读全文