CC2530之定时器T1
在本次学习中,主要通过定时器来控制LED的亮灭。
首先,先查看相关电路图。由图可知,当CC2530端口1的0号引脚输出低电平时,LED1将被点亮。
接下来,先查看与LED(P1_0)配置相关的寄存器。
端口1功能选择寄存器(P1SEL)。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为普通的I/O口,若设置为1,则将相关引脚设为外设I/O,默认值都为0。
端口1方向选择寄存器(P1DIR)。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为输入引脚,若设置为1,则将相关引脚设为输出引脚,默认值都为0。
端口1输入模式寄存器(P1INP)。这是一个8位的寄存器,对应端口1的8个引脚,将相应位设为0,表示将相应引脚设置为上拉/下拉模式,若设置为1,则将相关引脚设为三态模式,其中P1_0和P1_1没有上拉/下拉功能,可以不用配置,默认值都为0。
再来看看与定时器相关的寄存器
1. 定时器1的控制寄存器(T1CTL)_。
该寄存器的bit3和bit2位用来设置分频值
- 00:分频值为1
- 01:分频值为8
- 10:分频值为32
- 11:分频值为128
bit1和bit0位用来设置计数模式
- 00:暂停计数
- 01:自由计数,从0x0000计数到0xFFFF,不断重复计数。
- 10:模计数,从0x0000计数到T1CC0,不断重复计数。
- 11:向上/向下计数,从0x0000计数到T1CC0再从T1CC0计数到0x0000,不断重复。
定时器1状态标志寄存器(T1STAT)。
- bit5:定时器1的溢出中断标志
- bit4:定时器1通道4的中断标志
- bit3: 定时器1通道3的中断标志
- bit2:定时器1通道2的中断标志
- bit1:定时器1通道1的中断标志
- bit0:定时器1通道0的中断标志
中断标志4寄存器(IRCON)。
- bit1:定时器1中断标志,当中断发生时置为1,当CPU向量指向中断服务例程时置为0
- bit1:定时器1中断标志,当中断发生时置为1,当CPU向量指向中断服务例程时置为0
/*设置定时器,当发生溢出中断时,LED进行一次翻转*/
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0
void LEDInit(void)
{
P1SEL &= ~0x01;
P1DIR |= 0x01;
}
void TIM1Init(void)
{
T1CTL |= 0x0d;//128分频,自由计数模式
}
void main(void)
{
LEDInit();
TIM1Init();
while(1)
{
if(IRCON>0) //是否发生中断
{
LED1 = !LED1;
IRCON = 0;
}
}
}