源码
#include "iocc2530.h"//引用CC2530头文件int t1_Count=0; //定时器1溢出次数计数void Init_Led(void){
/*******************LED1初始化部分******************/P1SEL &=~ 0x01; //设置P1_0口为通用I/O口P1DIR |= 0x01; //设置P1_0口为输出口P1_0=0; //熄灭LED1
/**************************************************/
}
void Init_T1(void){
/*****************定时器1初始化部分****************/T1CTL |=0x0C; //定时器1时钟频率128分频T1CC0L = 0x12; //设置最大计数值的低8位T1CC0H = 0x7A; //设置最大计数值的高8位T1IE = 1; //使能定时器1中断T1OVFIM = 1; //使能定时器1溢出中断EA = 1; //使能总中断T1CTL |= 0x03; //定时器1采用正计数/倒计数模式/**********************************************/
}
void main(void){Init_Led();Init_T1();while(1); //程序主循环
}
/**************************************************************
函数名称:T1_INT
功 能:定时器1中断处理函数
入口参数:无
出口参数:无
返 回 值:无
**************************************************************/
#pragma vector = T1_VECTOR
__interrupt void T1_INT(void)
{T1STAT &= ~0x20; //清除定时器1溢出中断标志位t1_Count++; //定时器1溢出次数加1,溢出周期为0.5sif(t1_Count == 3) //如果溢出次数到达3,说明经过了1.5s{P1_0 = 1; //点亮LED1}
if(t1_Count == 4) //如果溢出次数到达4,说明经过了2秒{P1_0 = 0; //熄灭LED1t1_Count = 0; //清零定时器1溢出次数}
}
源码讲解
#include "iocc2530.h"//引用CC2530头文件
int t1_Count=0; //定时器1溢出次数计数
void Init_Led(void){
/*******************LED1初始化部分******************/
P1SEL &=~ 0x01;
//设置P1_0口为通用I/O口
P1DIR |= 0x01;
//设置P1_0口为输出口
P1_0=0; //熄灭LED1
/**************************************************/
}
void Init_T1(void){
/*****************定时器1初始化部分****************/
T1CTL |=0x0C;
//定时器1时钟频率128分频
T1CC0L = 0x12;
//设置最大计数值的低8位
T1CC0H = 0x7A;
//设置最大计数值的高8位
T1IE = 1;
外部中断配置流程表3.5 IEN1寄存器的描述
//使能定时器1中断
T1OVFIM = 1;
定时器 1、定时器 3 和定时器 4 还分别拥有一个计数溢出中断屏蔽位,
分别是T1OVFIM、T3OVFIM和T4OVFIM。当这些位被设置成1时,对应定时器的计数溢出中断便被使能,这些位都可以进行位寻址。不过一般用户不需要对其进行设置,因为这些位在CC2530上电时的初始值就是1。如果要手工设置,可以用以下代码实现。T1OVFIM=1; //使能定时器1溢出中断最后要使能系统总中断EA。
//使能定时器1溢出中断
EA = 1;
IEN0寄存器的描述
//使能总中断
T1CTL |= 0x03;
//定时器1采用正计数/倒计数模式
/**********************************************/
}
void main(void){
Init_Led();
Init_T1();
while(1); //程序主循环
}
/**************************************************************
函数名称:T1_INT
功 能:定时器1中断处理函数
入口参数:无
出口参数:无
返 回 值:无
**************************************************************/
#pragma vector = T1_VECTOR
__interrupt void T1_INT(void)
{
T1STAT &= ~0x20;
//清除定时器1溢出中断标志位
T1STAT寄存器的描述
t1_Count++; //定时器1溢出次数加1,溢出周期为0.5s
if(t1_Count == 3) //如果溢出次数到达3,说明经过了1.5s
{
P1_0 = 1; //点亮LED1
}
if(t1_Count == 4) //如果溢出次数到达4,说明经过了2秒
{
P1_0 = 0; //熄灭LED1
t1_Count = 0; //清零定时器1溢出次数
}
}