cc2530 定时器控制LED灯以不同的频率闪烁

1、cc2530有两个LED灯:

定时器有4种工作方式;

 

可通过定时器 T1 以及 定时器 T3同时来分别控制LED灯的闪烁,我们让定时器1处于8分频的自由模式下,T1 为16位的计数器,计数器每8/(30*1000000)的值加1,在自由模式下计数器计数到0xffff发生溢出中断的时间为0.16秒。而T3为8位的计数器,在自由模式下计数器计数到0xffff发生溢出中断的时间为0.000 064秒。

代码如下:

#include <ioCC2530.h>
#define led2 P0_1
#define led3 P0_4
int counter=0;//定时器1的溢出次数
int counter1=0;//定时器3的溢出次数
//led初始化
void LED_Init()
{
    P0SEL &=~0X12;
    P0DIR |=0X12;
}
void Init_T1()
{
    CLKCONCMD &=~0X7F;//晶振设置为32MHz
    while (CLKCONSTA &=0X40);//等待晶振稳定
    
    EA=1;//打开中断
    T1IE=1;//开T1溢出中断
    T1CTL=0X05;//设置预分频系数为8
    

}
void Init_T3()
{ 
    CLKCONCMD &=~0X7F;//晶振设置为32MHz
    while (CLKCONSTA &=0X40);//等待晶振稳定
    
    EA=1;//打开中断
    T3IE=1;
    T3CTL=0X7c;
}

void main()
{
     LED_Init();
     Init_T1();
     Init_T3();
     led2=0;
     led3=0;
     while(1)
     {
        
     }
}



#pragma vector =T1_VECTOR
__interrupt void T1_ISR(void)
{
    IRCON = 0X00;//清除中断标志位
    if(counter<300)
    { 
      counter++;
    }
    else
    { 
      counter=0;
      led2=!led2;
    }
}


#pragma vector =T3_VECTOR
__interrupt void T3_ISR(void)
{
    IRCON = 0X00;//清除中断标志位
    if(counter1<300)
    { 
      counter1++;
    }
    else
    { 
      counter1=0;
      led3=!led3;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值