51单片机设置定时器
时间: 2023-07-04 22:20:38 浏览: 108
51单片机的定时器分为两种:定时器0和定时器1。它们都是16位的计数器,可以通过寄存器对它们进行配置。
以下是一个简单的示例程序,演示如何设置定时器0和定时器1:
```c
#include<reg52.h> // 引入51单片机的头文件
void timer0_init(){ // 定时器0初始化函数
TMOD |= 0x01; // 设置定时器0为模式1
TH0 = 0xfc; // 设置定时器0的初始值为0xfc67
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
EA = 1; // 允许全局中断
}
void timer1_init(){ // 定时器1初始化函数
TMOD |= 0x10; // 设置定时器1为模式1
TH1 = 0xfd; // 设置定时器1的初始值为0xfd67
TL1 = 0x67;
ET1 = 1; // 允许定时器1中断
TR1 = 1; // 启动定时器1
EA = 1; // 允许全局中断
}
void timer0_isr() interrupt 1{ // 定时器0中断处理函数
// 这里写定时器0中断处理代码
}
void timer1_isr() interrupt 3{ // 定时器1中断处理函数
// 这里写定时器1中断处理代码
}
void main(){
timer0_init(); // 初始化定时器0
timer1_init(); // 初始化定时器1
while(1); // 程序无限循环
}
```
在上面的程序中,我们使用了`TMOD`寄存器来设置定时器的工作模式,使用`TH0`和`TL0`寄存器来设置定时器0的初始值,使用`TH1`和`TL1`寄存器来设置定时器1的初始值。我们还使用了`ET0`和`ET1`寄存器来使能定时器0和定时器1的中断,并使用`TR0`和`TR1`寄存器来启动定时器0和定时器1的计数。
在程序中,我们还定义了两个中断处理函数`timer0_isr`和`timer1_isr`,用于处理定时器0和定时器1的中断。这些中断处理函数的实现取决于你的具体需求,可以在其中编写任何需要执行的代码。
最后,在`main`函数中,我们初始化定时器0和定时器1,并在一个无限循环中等待中断事件的发生。
阅读全文