大家帮我看看这个捕获实验哪里有错误?调试的时候,计算得出的时间总是和理论值不...

2019-03-24 12:21发布

#include "msp430G2553.h"
unsigned int start,end;//定义两个无符号整形变量start和end
unsigned char overflow;//定义一个无符号字符型变量overflow
void main( void )
{
  WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
  P1DIR|=BIT0+BIT6;//P1.0和P1.6设置为输出
  P1DIR&=~BIT2;//P1.2设置为输入
  P1SEL|=BIT0+BIT2;//复用功能选择P1.0->ACLK输出,P1.2->捕获输入
  P1OUT&=~BIT6;//关闭P1.6LED
  BCSCTL1 =DIVA_3;//ACLK8分频(vlo=12Khz)
  TACCTL1=CM_1+SCS+CCIS_0+CAP+CCIE;//上升沿捕获+同步捕获+CCI1A(p1.2)输入+捕获功能+捕获中断
  TACTL=TASSEL_2+MC_2+ID_3+TAIE+TACLR;//选择SMCLK(DCO=1.1Mhz)时钟源,8分频,连续计数模式、开启定时器中断、定时器清零
  while(1)
  {
          _BIS_SR(LPM0_bits+GIE);//进入低功耗模式0,开启全局中断
  }
}
#pragma vector=TIMER0_A1_VECTOR        //#pragma 预处理指令,指明引起中断的中断向量类型
__interrupt void Timer_A (void)//中断处理函数
{
  switch(TAIV)//向量查询
  {
    case 2://捕获中断
      if(CCTL1&CM_1)//上升沿
      {
        CCTL1=(CCTL1&(~CM_1))|CM_2;//更变设置为下降沿触发
        start=TAR;//记录初始时间
        overflow=0;//溢出计数变量复位
      }
      else if(CCTL1&CM_2)//下降沿
      {
          CCTL1=(CCTL1&(~CM_2))|CM_1;//更变设置为上升沿触发
          end=TAR;//记录结束时间
      }
      P1OUT|=BIT6;//拉升P1.6电平
      break;
    case 10://定时器溢出中断
      overflow++;//溢出计数加1
      break;
    default:
      break;
   }
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
wangfuchong
2019-03-25 11:15
那相差多少呀?计算有没有小忽视的地方?调试看过相应的几个值了么?

一周热门 更多>

相关问题

    相关文章