CC2530编写呼吸灯,采用定时器T1的自由运行模式

呼吸灯一直闪烁,看不出呼吸的过程,不知哪里出了问题?望各位不吝赐教。代码如下:

/******************呼吸灯************************/
void  t1_init()
{
   T1CTL=0x05;//8分频,自由运行模式
    TIMIF|=0x40;
    IRCON=0x00;
    EA=1;
    T1IE=1;
    T1CNTL=(65535-2000)%256;//(8/16M)*1000=1ms定时
    T1CNTH=(65535-2000)/256;
}

#pragma vector=T1_VECTOR
__interrupt void T1(void)
{
  pwm_wanttime++;
  breath_wanttime++;
  if(pwm_wanttime==pwm_value)  
    D3=1;//灯亮
  if(pwm_wanttime==10)
  {
     pwm_wanttime=0;
     D3=0;//灯灭
  }
  
  if((breath_wanttime==200)&&(directflag==0))//每隔200ms变化一次占空比
  {
    breath_wanttime=0;
    pwm_value++;
    if(pwm_value==9)  directflag=1;
  }
  if((breath_wanttime==200)&&(directflag==1))
  {
    breath_wanttime=0;
    pwm_value--;
    if(pwm_value==1)  directflag=0;
  }
}

/********************MAIN************************/
void main(void)
{
   halBoardInit();//选手不得在此函数内添加代码
    ConfigRf_Init();//选手不得在此函数内添加代码
 //端口初始化
    P1SEL&=~(0x1f);
    P1DIR=0x1b;
    P0SEL&=~(0X02);
    P0DIR&=~(0X02);
    D3=D4=D5=D6=0;
    //定时器T1 8分频,自由运行模式
    t1_init();
   while(1)
   {
      ;
   }
}

【以下回答由 GPT 生成】

根据提供的代码,我注意到以下几个可能会导致呼吸灯效果无法显示的问题:

  1. 频率问题:在代码的t1_init函数中,设置了T1的计数值来控制定时器的频率。根据提供的代码,每1ms触发一次T1中断。为了呼吸灯能够呈现出明显的呼吸过程,需要调整呼吸灯的占空比变换速度和频率。

  2. 呼吸灯控制:根据代码逻辑,pwm_wanttime每次T1中断都会自增,然后根据条件判断来控制LED的亮灭状态。但根据提供的代码,没有看到变量的初始值定义,我无法判断是否正确地初始化了相关变量。

  3. 呼吸灯占空比变化:根据提供的代码,pwm_value变量在每次breath_wanttime达到200时进行变化。但没有提供相关变量的初始值定义,我无法判断pwm_value的范围是否正确,并且在达到上限或下限时是否能够正确地切换变化的方向。

解决这些问题需要更深入地了解你所使用的硬件平台和你编写的函数。请提供更多代码和硬件配置的细节,以便更准确地诊断和解决问题。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

这是变量的定义哦
uint8 pwm_wanttime=0;//多长时间改变一次占空比即PWM的一个周期
uint16 breath_wanttime=0;//占空比改变的速度
uint8 directflag=0;//渐亮还是渐暗判断位
uint8 pwm_value=0;//脉冲中高电平持续时间(占空比)