MSP430F149 Timer_B捕获问题

2019-03-24 12:29发布

各位大虾:

我的程序是要实现测量PWM的占空比,正常情况下信号为高电平,下降沿开始计时,上升沿结束计时。

但是目前发现这样的问题,就是下降沿能够捕获到,但是上升沿无论如何捕获不到。(前几天,完全同样的程序就是正常的,但是这几天,同样的程序同样的硬件,就不行了。。。)

想请各位帮帮忙~!小弟先在这里谢谢各位了!

初始化部分部分是这样写的
void Clock_Init()
{
  uchar i;
  BCSCTL1&=~XT2OFF;     //START XT2(8MHZ)
  BCSCTL2|=SELM_2+SELS;   
  do{                   //等待时钟转换
    IFG1&=~OFIFG;
    for(i=0;i<100;i++)
       _NOP();
  }
  while((IFG1&OFIFG)!=0);
  IFG1&=~OFIFG;
}

void Port_Init()
{  
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
//    P4DIR = 0XFF;P4OUT = 0XFF;       //这里这句不注释掉的话,P4.0就无法捕获,这又是为什么呢?
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
}


void Timer_B0_Init( void )
{
  P4SEL|=BIT0;
  TBCCTL0 &= ~(CCIS1+CCIS0);    //捕获输入CCIxB
  TBCCTL0 |= CM_2+SCS+CAP+CCIE;    //下降沿触发+同步+捕获模式+中断开启
  TBCTL |= TBSSEL_1+MC_2+TBCLR;     //选择ACLK(32768Hz)+连续计数+清除TBR
}

中断程序是这样的
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0_CAP(void)
{
  if(TBCCTL0&CM_2)                    //捕获到下降沿
  {
    TBCTL|=TBCLR;                     //TBR清零
    TBCCTL0=(TBCCTL0&(~CM_2))|CM_1;    //改为上升沿捕获
  }
  else if(TBCCTL0&CM_1)               //捕获到上升沿     //这里怎么也进不来~
  {
    T_Diff+=TBCCR0;                     //记录低电平时间
    TBCCTL0=(TBCCTL0&(~CM_1))|CM_2;    //改为下降沿捕获
  }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
yunhaiking
2019-03-25 02:11
不用判断啊,你这样嘛,捕获一次就保存一次,捕获了两次就可以求脉宽了,然后再下一次捕获两次。为什么非要判断是上升沿还是下降沿的捕获。

一周热门 更多>

相关问题

    相关文章