430单片机定时器工作在捕获模式,为什么我没捕获到。?

2019-03-24 14:05发布

我把初始化捕获和中断函数贴出来。。   大侠帮我看看有没问题啊。。。。?在P1,1接一个3V方波,就是不能进入捕获中断(定时器溢出中断能进入)
void InitCaputor()
{
  //IO初始化
  P1DIR &= ~BIT1;
  P1SEL |=BIT1;       //P1.1设置为捕获输入CCI0A
  TACCTL1 = CM_1 + SCS +CCIS_0 + CAP + CCIE;
  //时钟源ACLK + 增计数模式 + TAIFG中断使能
  CCR0 = 1000;
  TACTL = TASSEL_1 + MC_1 + TAIE;
}

中断函数:
#pragma vector = TIMERA1_VECTOR
__interrupt void overflow_ISR(void)
{
  switch(TAIV)
  {
  case 2 : {
              if(cap_rise==0)                                       //P1.1接一个3V的方波信号,这这只一个端点,程序无法到达
              {
                 cap_first=TACCR1;    //第一次捕获记录CCR0中的数
                 cap_rise++;         //脉冲数+1
              }
              else
              {
                 cap_last=TACCR1;    //记录最后一次CCR0中的数  
                 cap_rise++;        
              }
              break;
           }
  case 4 : break;
  case 10:{                           //定时器连续计数模式 溢出中断
            if(cap_first==cap_last)   //未发生捕获
            {
              pulse = 0;   
            }
            else
            {
            pulse = cap_rise-1;      //捕获到的脉冲数
            cap_rise = 0;            //脉冲计数器 清零
            time = cap_last - cap_first;      //时间间隔
            getok = 1;                     //设置标志位 完成频率采集
            cap_last = 0;
            cap_first = 0;
            _BIC_SR_IRQ(CPUOFF);               //退出低功耗模式 进行频率运算
            }
            break;            
          }
  }
} 此帖出自小平头技术问答
0条回答

一周热门 更多>

相关问题

    相关文章