上篇专题中描述的是采用查询的方式完成定时器Timer1模模式程序的设计,本篇则介绍采用中断的方式完成定时器Timer1模模式程序的设计。查询的方式,上篇已经介绍过就是在主程序中不断的查询中断标志是否被置位,置位后则进行相应处理。中断的方式则为,当中断产生时,CC2530在硬件的作用下将程序跳转到中断中断服务程序去执行。先贴出中断方式的程序:
#include
#define uint8 unsigned char
#define uint16 unsigned int
#define BIT(x) (1 << x)
#define LED1 P1_0
/****************************/
//函数声明
/****************************/
void initial(void);
/**************************************/
//主函数
/**************************************/
void main(void)
{
initial();
while(1)
{
}
}
/****************************/
//初始化函数
/****************************/
void initial(void)
{
/*设置P1.0为输出模式*/
P1DIR ^= BIT(0);
/*关闭LED1*/
LED1 = 1;
/*选择外部石英晶振*/
CLKCONCMD &= ~0x40;
/*等待晶振稳定*/
while(!(SLEEPSTA & 0x40));
/*TICHSPD二分频,CLKSPD不分频*/
CLKCONCMD &= ~0x47;
/*关闭RC振荡器*/
SLEEPCMD |= 0x04;
/*设置定时器T1,128分频,模模式,从0计数到T1CC0*/
T1CTL |= 0x0E;
/*装入定时器初值(比较值)*/
T1CC0L = 62500%256;
T1CC0H = 62500/256;
/*设置捕获比较通道0为比较模式,用以触发中断*/
T1CCTL0 ^=BIT(2);
/*使能Timer1中断*/
T1IE = 1;
/*开启总中断*/
EA = 1;
}
/****************************/
//定时器1中断函数
/****************************/
#pragma vector = T1_VECTOR
__interrupt void T1_ISR(void)
{
LED1 = !LED1;
}
By:霜月孤鸟
2015.12.5