(有贴代码)msp430g2553怎么实现两个捕获口来求时间差

2019-03-24 13:29发布

下面的代码求指导,或者有哪位大神会msp430g2553实现两个捕获口来求时间差,求帮助~

#include <msp430g2553.h>
#include "12864ser.h"
//#include "math.h"

unsigned int capture0_value = 0;
unsigned int capture1_value = 0;
float diff_time_value = 0;
float diff_distance = 0;
unsigned char flag_cnt = 0;

void main()
{
  unsigned char s1[] ={"声音定位系统"};
  unsigned char s2[] ={"X 轴:"};
  unsigned char s3[] ={"Y 轴:"};
  WDTCTL = WDTPW + WDTHOLD;          //stop watching dog
  BCSCTL1 = CALBC1_16MHZ;  //设定cpu
  DCOCTL = CALDCO_16MHZ;   //配置DCOCLK产生16M时钟
  BCSCTL2 |= SELM_1 + DIVM_0 + DIVS_0;  //主时钟MCLK选择DCOCLK,不分频.子时钟SMCLK选择DCOCLK,不分频

  P2DIR |= BIT3 + BIT4;       //开输出
  P1DIR &= ~(BIT1 + BIT2 + BIT6 + BIT7);   //four input p1.4~p1.7
  P1SEL |= BIT1 + BIT2;


  TACTL = TASSEL_2 + TACLR + MC_1; //SMCLK,up mode
  //capture 0
  TACCTL0 = CCIE + CM_2 + CCIS_0 + CAP + SCS ;    //neg. edge,enabled interrupt,CCIxA,capture mode,            
  //capture 1
  TACCTL1 = CCIE + CM_2 + CCIS_0 + CAP + SCS ;    //neg. edge,enabled interrupt,CCIxA,capture mode,            
  TACCR0 = 16;
  TACCR1 = 16;

  _BIS_SR(GIE);                 // Enter LPM0 w/ interrupt

  init_lcd();             //初始化
  delay_ms(10);

      //  wr_string(uchar x,uchar y0,uchar *p);
    wr_string(1,0,s1);   //第二个参数是行号
    delay_ms(1000);
    wr_string(0,1,s2);
    delay_ms(1000);
    wr_string(0,2,s3);
    delay_ms(1000);
    wr_float(3,1,123.564);
    delay_ms(1000);
    wr_float(3,2,169.2145);
    delay_ms(1000);

  while (1)
  {
    if (flag_cnt == 2)
    {
      flag_cnt = 0;          //clear flag
      if(capture0_value - capture1_value <= 0)
        diff_time_value = capture1_value - capture0_value;
      else
        diff_time_value = capture0_value - capture1_value;
      diff_distance = diff_time_value *340 * 1.087 / 1000;    //uints:mm
    }
  }
}

#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{
  switch (TAIV)
  {
  case 0x02:
    capture1_value = TACCR1;
    flag_cnt++;
  case 0x04:break;   //capture 2
  case 0x0a:break;
  }
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer_A1 (void)
{
  capture0_value = TACCR0;
  flag_cnt++;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
elulis
1楼-- · 2019-03-24 22:17
 精彩回答 2  元偷偷看……
elulis
2楼-- · 2019-03-25 00:33
< :TI_MSP430_内容页_SA7 --> 补充一下,TAIV是在TIMER0_A1_VECTOR中才有的。
benni
3楼-- · 2019-03-25 06:30
恩。。看了你的贴子,知道了在TIMER0_A0_VECTOR中读CCR0,在TIMER0_A1_VECTOR中读CCR1或者CCR2,非常感谢。我是想用三个捕获口来捕获三个声音接收器的脉冲,然后根据它们三个的时间差来算出发声的坐标。你看,我这还有叙问题吗?对了,还用就是CCR2的捕获输入源是那个I/O口,我在datasheet里没看到~
benni
4楼-- · 2019-03-25 08:39
 精彩回答 2  元偷偷看……
elulis
5楼-- · 2019-03-25 10:43
哇!是激光灭蚊器嘛~很先进的样子~
的确没有看到TA0.2的引脚……如果P2.4或者P2.5中有空闲的引脚试试TA1.2吧。
benni
6楼-- · 2019-03-25 13:51
呃。没有啦,就是在做TI杯的电赛题目,之前没有用过430的捕获功能,所以要赶快弄好,可是写好,一直没有出结,TA1.2是timerB的吗?

一周热门 更多>

相关问题

    相关文章