两路捕获的问题?

2019-03-24 15:55发布

为什么我只能够捕获一路呢?第二路不能够正常的工作呢?
#include <msp430x14x.h>
#include "LCD1602.h" unsigned int upflag=0;
unsigned int downflag=0; int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
   LcdInit();
  P1DIR &=~ BIT2+BIT3;
  P1SEL = BIT2+BIT3;                   //设置P1.2为端口功能模块使用,即做捕获源
  TACTL = TASSEL_2 +TACLR +TAIE + MC1;//ACLK
  CCTL1 = CM_1 +SCS +CAP +CCIE;     //输入上升沿捕获,CCI0A为您捕获信号源
  CCTL2 = CM_1 +SCS +CAP +CCIE;       //输入上升沿捕获,CCI0A为您捕获信号源
 _EINT();
 while(1){
    WriteCommand(0x80);
    WriteData(upflag+0x30);
     WriteCommand(0xC0);
    WriteData(downflag+0x30);
 }
}
/*******************************************
      定时器A中断服务子函数
      捕获待测信号上升沿
**********************************************/
#pragma vector = TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
  switch(TAIV)                    //向量查询
  {
  case 2:                        //捕获中断
    if(CCTL1 & CM0)            //捕获到上升沿
      upflag++;  TACCTL1 &=~CCIFG;  break;
  case 4:    
    if(CCTL2 & CM0)             //捕获到上升沿
      upflag++;  TACCTL2 &=~CCIFG;   break;
  default:
    break;
  }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Main函数
1楼-- · 2019-03-24 18:32
< 你好,请将你使用的MSP430型号告之。谢谢。
whgwuhan
2楼-- · 2019-03-24 21:43
< :TI_MSP430_内容页_SA7 -->

       楼主,你这程序写的太蛋疼了,初始化了两个中断使能,但是只有一个中断处理函数,这怎么能行呢?你编译没发现问题吗?正确的是一个中断时能,上升沿使能,在中断处理函数里,在进行下降沿的处理。

      示例:

    #pragma vector=TIMERB0_VECTOR       
__interrupt void TimerB0(void)
{
   if(TBCCTL0&CM1)                        //
捕获到下降沿

     {
       TBCTL|=TBCLR;
       TBCCTL0=(TBCCTL0&(~CM1))|CM0;    //
改为上升沿捕获:CM1置零,CM0置一


     }
   else if(TBCCTL0&CM0)                    //
捕获到上升沿

     {
       width[i++]=TBCCR0;                  //
记录下结束时间

       TBCCTL0=(TBCCTL0&(~CM0))|CM1;   //
改为下降沿捕获:CM0置零,CM1置一

       if(i==10) i=0;
              
     }

}

 

一周热门 更多>

相关问题

    相关文章