52单片机利用定时器模式 0 现实 1s 延时函数
时间: 2023-08-05 18:43:46 浏览: 60
在51单片机中,我们可以使用定时器0来实现1s的延时功能。具体方法如下:
1. 设置定时器0的工作模式为模式0,即13位定时器模式,同时将其时钟源设置为时钟频率12T模式。
2. 计算出定时器0的初值TH0和TL0。由于时钟源为12T模式,每个机器周期为1/12MHz=83.33ns,故1s为12,000,000个机器周期。由于定时器0是13位计数器,故初值为8192-12000%8192=7296,即TH0=0x1c,TL0=0x00。
3. 启动定时器0,并等待定时器溢出。定时器溢出后,TH0和TL0会自动重新装载初值。
4. 当定时器0溢出次数达到所需的延时次数时,停止定时器0的工作。
具体的代码实现如下:
```c
#include <reg52.h>
void delay_s(unsigned char s)
{
unsigned char th0, tl0;
unsigned int i, j;
th0 = 0x1c;
tl0 = 0x00;
TMOD &= 0xf0; // 设置定时器0的工作模式为模式0
TMOD |= 0x00;
TH0 = th0; // 设置定时器0的初值
TL0 = tl0;
TR0 = 1; // 启动定时器0
for (i = 0; i < s; i++)
{
for (j = 0; j < 120; j++) // 等待定时器溢出120次
{
while (TF0 == 0); // 等待定时器溢出
TF0 = 0; // 清除定时器溢出标志
}
}
TR0 = 0; // 停止定时器0
}
```
调用delay_s函数即可实现1s的延时。