搜索
bottom↓
回复: 3

MSP430 捕获模式无法进入中断求解

[复制链接]

出0入0汤圆

发表于 2012-8-10 00:45:39 | 显示全部楼层 |阅读模式
要写一个超声波测距的程序。
选用430的TimerA 的CCR1捕获
程序如下:
#include <msp430x16x.h>
#include  "HCSR04.h "
#define uchar unsigned char
#define uint  unsigned int
#define  RISE  1
#define  FALL  0
unsigned char Edge=1;//当前触发沿
uint m=0,temp[2],p,g=0;
double s;
float l;
uchar j=0;
unsigned long int t;

void Init_CLK(void)
{
   unsigned int iq0;
   BCSCTL1&=~0X00;      //打开XT2振荡器
   do
   {
      IFG1 &= ~OFIFG;   // 清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
    }
    while ((IFG1 & OFIFG) != 0);    // 判断XT2是否起振
    BCSCTL2 =SELM_2+SELS;   //选择MCLK、SMCLK为XT2
}

void Init_TA(void)  //工作在捕获模式
{
    TACTL |=TASSEL_2+ID_3+MC0+TACLR+TAIE;  //  8M主系统时钟  8分频1M  1us 增计数
    CCTL1 =CM0+CCIS_0+SCS+CAP+CCIE;  //上升沿捕获 CCIA10 同步 捕获模式 开启中断允许
    CCR0=50000; // 计时为0.05s
    CCTL1 &=~CCIFG;  // 清除CCR1中断标志
    TACTL &=~TAIFG;  // 清除定时器溢出中断标志
}

void Init_IO(void)
{
    P1DIR &=~BIT2;
    P1SEL |=BIT2;  //输入模式  捕获
   
    P1DIR |=BIT4;
    P1SEL |=BIT4;  //输入模式  捕获
   
   
    P3DIR |=BIT6;  //超声波配置
    P3SEL &=~BIT6;
    P3OUT &=~BIT6; // 给控制端开始低电平
   
  
}
void Send_Signal(void)
{
  //P1OUT &=~BIT4;
  SET_TRIG;
  Delay_us(20);
  CLR_TRIG;
  
}



void Delay_us(uchar n)
{
  for(uchar p=0;p<n;p++)
  for(uchar i=0;i<8;i++);
}

void main( void )
{
  
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  Init_CLK();
  Init_TA();
  Init_IO();
  _EINT();
  while(1)
  {
      Send_Signal();
  }
}

#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_a1(void)
{

       switch(TAIV)
       {
           case 2 :
                 if(Edge==RISE)
                            {
                              temp[j]= TACCR1; // temp[j]=TAR;
                              TACCTL1 |= CAP+CM_2+CCIS_0+SCS+CCIE;//改为下降沿捕获
                              Edge = FALL;//下降沿捕获标志
                              j++;
                              break;
                             }
                    else
                            {
                              _DINT();
                              temp[j]= TACCR1;
                              TACCR1 = 0;
                              TACCTL1|= CAP+CM_1+CCIS_0+SCS+CCIE;//改为上升沿捕获
                              Edge = RISE;//上升沿捕获标志  
                              j++;
                              _EINT();
                            }
          case 10 : m++; break;
          case 4 : break;
           
      }
      
        if(j==2)
        {
            if(temp[1]<temp[0]) m--;
            p=temp[1]-temp[0];
            j=0;
            t=p+m*50000;
            m=0;
          }
CCTL1 &=~CCIFG;  // 清除CCR1中断标志
TACTL &=~TAIFG;  // 清除定时器溢出中断标志
}

我给捕获控制IO输入的是1K赫兹的方波。但是一直无法进入 TAIV的2 就是CCR1捕获中断。
不知道是什么原因,求高手讲解。
还有就是TAIV 中的TAIFG 就是是10 和定时器TACTL中的TAIFG(定时器溢出位)有什么区别?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-8-10 00:46:36 | 显示全部楼层
深知深夜发帖会沉的,但是还是顶顶。希望大家帮帮指点一二

出0入0汤圆

 楼主| 发表于 2012-8-10 11:23:04 | 显示全部楼层
晚上发帖真的伤不起呀。

出0入0汤圆

 楼主| 发表于 2012-8-10 21:41:08 | 显示全部楼层
木有人、、
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 16:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表