51单片机12mhz 延时20ms
时间: 2023-07-24 17:20:19 浏览: 207
在51单片机中,可以使用定时器来进行延时操作。以12MHz的晶振为例,可以使用定时器0或定时器1来实现20ms的延时。
定时器0需要设置为模式1,计数器初值为65536 - (20ms * 12000) = 880,即T0RH = 3、T0RL = 112。然后启动定时器0,等待定时器溢出中断即可。
定时器1也需要设置为模式1,计数器初值为65536 - (20ms * 12000) = 880,即TH1 = 3、TL1 = 112。然后启动定时器1,等待定时器溢出中断即可。
以下是使用定时器0实现20ms延时的示例代码:
```c
#include <reg51.h>
void delay_ms(unsigned int time);
void main()
{
while (1)
{
// 延时20ms
delay_ms(20);
// 在此处执行需要延时的操作
}
}
void delay_ms(unsigned int time)
{
unsigned int i;
TMOD = 0x01; // 定时器0模式1
TH0 = 0x03; // 计数器初值
TL0 = 0xB0;
TR0 = 1; // 启动定时器0
for (i = 0; i < time; i++)
{
while (!TF0); // 等待定时器0溢出中断
TF0 = 0; // 清除定时器0溢出中断标志
TH0 = 0x03; // 重新赋值计数器初值
TL0 = 0xB0;
}
TR0 = 0; // 停止定时器0
}
```
阅读全文