ZigBee CC2530 定时器1中断
这段时间做一个智能家居的项目,用到ZigBee芯片,自然想到用CC2530。
今天分享一个很简单的,通过按键控制定时器开启关闭,定时器中断函数里控制LED闪烁。
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
#define LED1 P1_0 //定义LED1为P10口控制
#define LED2 P1_1 //定义LED2为P11口控制
#define LED3 P1_4 //定义LED3为P14口控制
#define KEY_S1 P0_1 //
/****************************/
//定时器1中断函数
/****************************/
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
LED1 = !LED1;
}
void Delay(uint n)
{
uint i;
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
}
void TimerInit(void)
{
CLKCONCMD &= ~0x40; //选择外部石英晶振
while(!(SLEEPSTA & 0x40)); //等待晶振稳定
CLKCONCMD &= ~0x47; //TICHSPD二分频,CLKSPD不分频
SLEEPCMD |= 0x04; //关闭RC振荡器
T1CTL = 0x0E; //设置定时器T1,128分频,模模式,从0计数到T1CC0
T1CC0L = 62500%256; //装入定时器初值(比较值)
T1CC0H = 62500/256;
T1CCTL0 |= 0x04; //设置捕获比较通道0为比较模式,用以触发中断
T1IE = 1; //使能Timer1中断
EA = 1; //开启总中断
}
void LedInit(void)
{
P1DIR = 0x13; //P10 P11 P14为输出
}
void KeyInit(void)
{
P0SEL &= ~0X02;
P0DIR &= ~0X02;
P0INP |= 0x02;
}
/*************************** //主函数 ***************************/
void main()
{
int isStop=0;
LedInit();
KeyInit();
TimerInit();
while(1)
{
if(KEY_S1 == 0)
{
Delay(100);
if(KEY_S1 == 0)
{
while(KEY_S1==0);
if(isStop)
{
isStop=0;
T1CTL = 0x0C;
}else{
isStop=1;
T1CTL = 0x0E;
}
}
}
}
}