我是靠谱客的博主 欢喜小土豆,最近开发中收集的这篇文章主要介绍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;
    }
}

最后

以上就是欢喜小土豆为你收集整理的cc2530 定时器控制LED灯以不同的频率闪烁的全部内容,希望文章能够帮你解决cc2530 定时器控制LED灯以不同的频率闪烁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部