给出一段51单片机定时器的c语言代码
时间: 2023-09-19 19:10:18 浏览: 121
基于51单片机的定时器C程序
5星 · 资源好评率100%
以下是一个基于51单片机的定时器中断的C语言代码示例:
```c
#include <reg51.h>
#define TIMER0_RELOAD_VALUE 0xB1 // 定时器计数器重新加载值(定时1ms)
volatile unsigned int timer_count = 0; // 定时器计数器
void timer0_init(void)
{
TMOD |= 0x01; // 设置为模式1(16位定时器模式)
TH0 = (unsigned char)(TIMER0_RELOAD_VALUE >> 8); // 设置计数器初始值高8位
TL0 = (unsigned char)TIMER0_RELOAD_VALUE; // 设置计数器初始值低8位
ET0 = 1; // 允许定时器中断
TR0 = 1; // 启动定时器
EA = 1; // 全局中断使能
}
void timer0_interrupt_handler(void) interrupt 1
{
TH0 = (unsigned char)(TIMER0_RELOAD_VALUE >> 8); // 重新加载计数器初始值高8位
TL0 = (unsigned char)TIMER0_RELOAD_VALUE; // 重新加载计数器初始值低8位
timer_count++; // 定时器计数器加1
}
void main(void)
{
timer0_init(); // 初始化定时器
while (1)
{
if (timer_count >= 1000) // 判断是否达到指定时间(1s)
{
timer_count = 0; // 计数器清零
// 执行需要定时的任务
}
}
}
```
该示例中使用了定时器0(16位定时器),将其设置为模式1,计数器初始值为0xB1,每次计数到0xFFFF时会自动重新加载初始值。当计数器计数到指定值时,定时器中断会触发,执行定时器中断处理函数 `timer0_interrupt_handler` 中的代码。在主函数中,可以根据需要的定时时间设置条件判断,执行相应的任务。
阅读全文