前言
前面讲了定时器1,定时器1是16位的,而定时器3和4是8位的,只有两个独立的比较通道,每个通道只能使用一个IO引脚。因此,要使用定时器3或4来控制LED灯的闪烁也非常简单。
假如我们要用定时器3查询方式来实现LED1的闪烁,应该怎么做呢?
其实是很简单的,由于是查询方式,所以不需要开启中断,只需要给定时器分频,然后,给定时器装个计数的值。因此只需要用到两个寄存器。
捕获比较寄存器TxCCn
T3CC0=0xf0;//从0x00计数到0xf0;如果不写,默认是0x00计数到0xff
然后就是给定时分频了,这时候就需要用到控制寄存器
定时器3的控制寄存器T3CTL
T3CTL = 0xF8; //128分频;自由运行,从0x00到0xFF反复计数
最后我们只需要判断标志位是否>0就可以了
大致代码如下
void Timer3_init(void)
{
T3CTL = 0xF8; //128分频;自由运行,从0x00到0xFF反复计数
}
void main(void)
{
unsigned char count=0;
LEDinit(); //LED1初始化
Timer3_init(); //Timer3初始化
while(1)
{
if(T3IF>0) //查询溢出标志
{
T3IF=0;
if((++count)==254) //溢出一次约为0.5s
{
count=0;
LED1 = ~LED1; //LED1取反
}
}
}
}
下期我们介绍如何用中断方式来控制LED的闪烁。