微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > MSP430F149 关于 脉冲捕捉 一直不进入沿中断 求各位大佬 指教

MSP430F149 关于 脉冲捕捉 一直不进入沿中断 求各位大佬 指教

时间:10-02 整理:3721RD 点击:
/****************主函数****************/
void main(void)
{  
    uint i;
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    P6DIR |= BIT2;P6OUT &= ~BIT2;   //打开电平转换
    P2DIR |= BIT3;P2OUT &= ~BIT3;   //电平转换方向3.3V--->5V
    P5DIR = 0xff;
    P5OUT = 0xff;

      /*------选择系统主时钟为8MHz-------*/
    BCSCTL1 &= ~XT2OFF;                 //打开XT2高频晶体振荡器
    do
    {
        IFG1 &= ~OFIFG;                 //清除晶振失败标志
        for (i = 0xFF; i > 0; i--);     //等待8MHz晶体起振
    }
    while ((IFG1 & OFIFG));             //晶振失效标志仍然存在?
    BCSCTL2 |= SELM_2 + SELS;           //MCLK和SMCLK选择高频晶振
      /*------选择系统主时钟为8MHz-------*/   
    P3DIR |= 0X07;
    P4DIR |= 0XFF;
    LCD_init();
    set_pos(0,6);
    LCD_write_data('W');
    LCD_write_data('T');
    LCD_write_data('F');     
    P2DIR |= BIT0;                  //设置P2.0为输出
    P1SEL |= BIT2; //设置P1.2端口为功能模块使用
    P1DIR &=~ BIT2;  
    P1IFG = 0;
    TACTL = TASSEL1+TACLR+TAIE+MC1; //定时器A时钟信号选择SMCLK,同时设置定时器A计数模式为连续增计模式
    CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源

    start = 1;
    disp_m = 1;
    end = 1;
    overflow = 0;
    show_falg = 0;

    _EINT();
    while(1)
   {
     P2OUT |= BIT0;
     delay(160);         //给Trig一个启动脉冲
     P2OUT &=~ BIT0;
     while(show_falg); //等待 Echo的 下降沿
     show();             //更新显示

   }
}
#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
  switch(TAIV) //向量查询
  { case 2: //捕获中断
    if(CCTL1&CM0) //上升沿
    {
      CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
      start=TAR; //记录初始时间
      overflow=0; //溢出计数变量复位
    }
    else if (CCTL1&CM1) //下降沿
    {
      CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
      end=TAR; //用start,end,overflow计算脉冲宽度
      show_falg = 1;  //打开显示计算处理程序
    }
    break;
  case 10: //定时器溢出中断
    overflow++;
    break; //溢出计数加1
  default:break;
  }
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top