CC2530定时器T1查询和T3中断
程序员文章站
2022-06-09 20:16:17
...
文章主要讲解CC2530两种定时器控制LED的实验
首先我们了解CC2530 LED部分电路图
一、T1查询方式
T1CTL:定时器1的控制,D1D0控制运行模式,D3D2设置分频划分值
T1STAI:定时器1的状态寄存器,D4 ~ D0为通道4 ~ 0的中断标志,D5为溢出标志位,当计数到最终计数值是自动置1
IRCON:中断标志4,0为无中断请求,1为有中断请求
定时器1的工作原理:
定时器1工作在*方式下,定时器1开始工作后从0x0000开始加1计算,一直到0xffff。0xffff再加1则溢出,发生溢出中断。此时定时器将发出一个溢出中断请求并将IRCON的D1置为1。此后定时器自动重新计数,再次从0x0000计数到0xffff。
T1定时器控制LED程序如下:
/*设置定时器,当发生溢出中断时,LED进行一次翻转*/
#include <ioCC2530.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LED1 P1_0
void LEDInit(void)
{
P1DIR |= 0x01; //设置P1_0为输出
LED1 = 1; //LED1初始熄灭
}
void TIM1Init(void)
{
T1CTL |= 0x0d;//128分频,*计数模式
T1STAT = 0x21;//通道0,中断有效
}
void main(void)
{
uchar count = 0;
LEDInit();
TIM1Init();
while(1)
{
if(IRCON > 0) //是否发生中断
{
IRCON = 0;
if(count++ >= 0)
{
count =0;
LED1 = !LED1;
}
}
}
}
二、T3中断方式
T3CTL:控制寄存器
T3中断方式程序如下:
/*程序描述:利用定时器 3 T3 中断方式控制*/
// 定时器初始化
void InitT3()
{
T3CTL |= 0x08 ; // 开溢出中断
T3IE = 1; // 开总中断和 3 T3 中断
T3CTL|=0XE0; //128 分频 ,128/16000000*N=0.5S,N=62500
T3CTL &= ~0X03; // 自动重装 0x00 -0xff 65200/256=254( 次)
T3CTL |=0X10; // 启动
EA = 1; // 开总中断
}
void main(void)
{
InitLed(); // 调用初始化函数
InitT3();
while(1)
{
;
}
}
#pragma vector = T3_VECTOR // 定时器 T3
__interrupt void T3_ISR(void)
{
IRCON = 0x00; // 清中断标志 , 也可由硬件自动完成
if(++count > 254) //254 次中断后 LED 取反,闪烁一轮(约为 0.5 秒时间)
{
count = 0; // 计数清零
LED1 = ~LED1;
}
}
上一篇: TextView实现图文混排