打印

[紧急求助] MSP430F149 Timer_B捕获问题

[复制链接]
1602|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jameslllong|  楼主 | 2013-6-16 11:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾:

我的程序是要实现测量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;    //改为下降沿捕获
  }
}

相关帖子

沙发
1988020566| | 2013-6-18 09:34 | 只看该作者
要捕获pwm吗?

使用特权

评论回复
板凳
1988020566| | 2013-6-18 09:35 | 只看该作者
你如何检测的程序不执行?你可以使用led检测一下的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝