原理图
选择T1STAT[4:0]
代码:
#include<ioCC2530.h>
void LED_Init(void);
void TIME1_Init(void);
int main()
{
LED_Init(); //初始化灯
TIME1_Init(); //初始化定时器
while(1);
}
void LED_Init(void)
{
/*LED初始化*/
P1SEL &= ~0x03;
P1DIR |= 0x03;
}
void TIME1_Init(void)
{
/*定时器初始化*/
//初始化中断寄存器
IEN1 |= 0x02; //xxxx xx1x 初始定时器1的中断
EA = 1;
TIMIF |= 0x40; //x1xx xxxx 清除定时器1的中断标志位
T1CCTL0 |= 0x04; //xxxx x1xx 设置定时器1的通道为比较模式
//(16M * cnt) / 2= 0.5 => 62500
/*比较值有十六位,比较值分别用高值和低值写入*/
T1CC0L = 0x24; //xx1x x1xx 设置低位比较值
T1CC0H = 0xF4; //1111 x1xx 设置高位比较值
/*必须先设置低位再设置高位*/
/*T1CTL:定时器1控制方式,这里是从0计数到T1CC0,128分频*/
/*IRGEN:作用是当设置定时器3通道1和定时器1的计数输入必须将其设置为0*/
T1CTL = 0x0E; //xxxx xxxx -> xxxx 1110 IRGEN第零位为0
T1STAT = 0; //开启定时器1的中断标记位
}
/*编写中断服务函数*/
#pragma vector = T1_VECTOR //#pragma vector来提供中断函数P0口的入口地址
__interrupt void T1_ISR(void)
{
if(T1STAT & 0x01)//判断0位是否为1 xxxx xxx1 是否定时器1进入了中断
{
P1_0 = !P1_0;
P1_1 = !P1_1;
}
T1STAT &= ~0x01; //0000 0001 -> 1111 1110 清除中断标记位
}