msp430g2553定时器捕获问题,请大神帮忙~

2019-03-24 09:12发布

  1. #include <msp430.h>

  2. #define uint unsigned int

  3. uint start=0;end1=0;end2=0;m=0;n=0;
  4. unsigned  char i=0;overflow1=0;overflow2=0;overflow3=0;
  5. int flag=0;
  6. //float t=0;
  7. void main(void)
  8. {
  9.     WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
  10.     DCOCTL =  CALDCO_16MHZ;   // 调取出厂校准后存储在Flash中的参数
  11.     BCSCTL1 = CALBC1_16MHZ;  // BCSCTL3参数默认不用设
  12.     P1DIR |=BIT0;
  13.     Time_init();
  14.     while(flag)
  15.     {
  16.         m=overflow2*32768+(end1-start);
  17.         n=overflow3*32768+(end2-start);
  18.     //    t=m/n*pi;
  19.     }

  20.     _enable_interrupts();  //使能总中断
  21.     _bis_SR_register(CPUOFF); //LPM3方式休眠
  22. }


  23. void Time_init()
  24. {
  25.    // BCSCTL3|=LFXT1S_0;
  26.     P1SEL |= BIT2;                             //设置P1.2端口为功能模块使用
  27.     P1DIR &= ~BIT2;
  28.     CCTL1 |=CM_3+SCS+CAP+CCIE;                //输入上升沿捕获,同步,capture模式 CCI0A为捕获信号源,中断使能
  29.     TACCTL1 &=~CCIFG; //清CCR1 的标志位
  30.     TACTL |=TACLR;
  31.     TACTL |= TASSEL_1+TAIE+MC_2;          //定时器A时钟信号选择ACLK ,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式

  32. }



  33. #pragma vector=TIMER0_A1_VECTOR
  34. __interrupt void  timer_A0(void)
  35. {
  36.         P1OUT ^= 0x01;
  37.         switch(TAIV)                              //向量查询
  38.         {
  39.         case 2:                                //捕获中断
  40.                    flag=1;
  41.                    if(CCTL1&CM0)                      //上升沿
  42.            {
  43.                            i++;
  44.               if(i==1)
  45.               {
  46.                     CCTL1=(CCTL1&(~CM0))|CM1;       //更变设置为下降沿触发
  47.                     start=TACCR1;                      //记录初始时间
  48.                     //          overflow1=0;                     //溢出计数变量复位
  49.                }
  50.               if(i==2)
  51.               {
  52.                 CCTL1=(CCTL1&(~CM0))|CM1;       //更变设置为下降沿触发
  53.                 end2=TACCR1;                      //记录初始时间
  54.                 overflow3=overflow1;
  55.                 i=0;
  56.                 overflow1=0;                     //溢出计数变量复位
  57.                }
  58.            }
  59.            else if(CCTL1&CM1)                 //下降沿
  60.            {
  61.             CCTL1=(CCTL1&(~CM1))|CM0;       //更变设置为上升沿触发
  62.             end1=TACCR1;                        //用start,end,overflow计算脉冲宽度
  63.             overflow2=overflow1;
  64.             TACTL &=~TAIE;                    //不使能中断
  65.             CCTL1 &=~CCIE;
  66.             P1SEL &=~BIT2;
  67.             _DINT();
  68.             LPM0_EXIT;
  69.            }
  70.            break;
  71.     case 10:                               //定时器溢出中断
  72.        overflow1++;
  73.        break;                              //溢出计数加1
  74.     default:break;
  75.   }
  76. }
复制代码刚刚接触430,写了一个测相位的程序,但是为什么定时器捕获进不去中断,是不是哪里设置有错误,求大神帮忙看看,谢谢
此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章