STC89C51使用定时器1
时间: 2023-12-08 17:04:29 浏览: 77
STC89C51数据手册_.zip
STC89C51是一款单片机,其中定时器1是其中一个非常常用的计时器,可以用来产生一些基本的定时功能。下面是一个使用定时器1的示例代码,可以让LED每隔1秒钟闪烁一次。
```c
#include <reg51.h>
//定义常量
#define uint unsigned int
#define uchar unsigned char
//定义LED引脚
sbit LED = P0^0;
//声明函数
void Init_Timer1(void);
void Timer1_ISR(void);
//定义全局变量
uint g_tick = 0;
void main()
{
Init_Timer1(); //初始化定时器1
EA = 1; //启用中断
while(1)
{
//主循环中可以处理其他任务
}
}
void Init_Timer1(void)
{
TMOD |= 0x10; //设置定时器1为模式1
TH1 = 0xFC; //设置定时器1的初始值
TL1 = 0x66;
TR1 = 1; //启动定时器1
}
void Timer1_ISR(void) interrupt 3 //定时器1中断服务程序
{
g_tick++; //增加计时器计数
if(g_tick >= 1000) //1秒钟到达
{
g_tick = 0; //复位计时器
LED = ~LED; //LED翻转
}
TH1 = 0xFC; //重新设置定时器1的初始值
TL1 = 0x66;
}
```
在该示例代码中,我们定义了一个计时器变量g_tick,每隔1毫秒会增加1,当g_tick累加到1000时,LED会翻转一次,然后g_tick会被复位为0,重新开始计时。我们使用定时器1中断服务程序来实现1毫秒的定时功能,并且在该中断服务程序中判断是否到达1秒钟,并控制LED的翻转。需要注意的是,在使用定时器1时,要设置定时器的初始值,这里我们设置为0xFC66,这样定时器1每隔1毫秒就会自动减少1,当减少到0时,就会触发中断。
阅读全文