打印

求助 MSP430测速程序(TimerA双路捕获)

[复制链接]
4442|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pancsl|  楼主 | 2013-5-14 01:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下程序是TimerA的双路捕获测速程序,请问如果直接把TimerA改成TimerB需要注意什么?(也就是把所有A改成B)或者说可以直接改么?会出现什么问题? 跪谢!

#include <msp430x14x.h>
#include "TA.h"
#include "cry1602.h"

/***************************************************************
捕获模块的应用,用P1^3和P12作为外部的脉冲的捕获输入端,实现小车速度检测。
volatile
***************************************************************/
volatile unsigned int new_cap1=0;                     
unsigned int old_cap1=0;                    
unsigned int cap_diff1=0;                    
unsigned int diff_array1[16];       // 记录两个上升沿的计数间隔。
unsigned int capture_array1[16];             // 记录各个上升沿到达时的TCCR0的值。
unsigned long int sum_diff1=0;
volatile unsigned int ave_diff1;              //脉冲周期的平均值
unsigned char index1=0;
unsigned char cap_flag1=0;
unsigned char i,j=0;
volatile unsigned int new_cap2=0;                     
unsigned int old_cap2=0;                    
unsigned int cap_diff2=0;                    
unsigned int diff_array2[16];       // 记录两个上升沿的计数间隔。
unsigned int capture_array2[16];             // 记录各个上升沿到达时的TCCR0的值。
unsigned long int sum_diff2=0;
volatile unsigned int ave_diff2;              //脉冲周期的平均值
unsigned char index2=0;
unsigned char cap_flag2=0;

  //P6DIR|=BIT0;

void TimerA(void)
{
  P1SEL |= (BIT3+BIT2);                     // 选择P1^3和P1^2作为外部计数脉冲的输入端
//  P6DIR|=BIT0;
  
  CCTL1 = CM_1 + SCS + CCIS_0 + CAP + CCIE; // Rising edge + CCI0A (P1.2)
                                            // + Capture Mode + Interrupt  
  CCTL2 = CM_1 + SCS + CCIS_0 + CAP + CCIE; // Rising edge + CCI0A (P1.3)
                                            // + Capture Mode + Interrupt
  TACTL = TASSEL_2 + MC_2+ID_3;                  // SMCLK + Continuous Mode + divide 8
  
}

/*****************************************************************************
定时器A中断函数
多中断中断源:CC1~2 TA
******************************************************************************/
#pragma vector=TIMERA1_VECTOR
__interrupt void TimerA1()
{
//以下为参考处理程序,不使用的中断源应当删除
switch (__even_in_range(TAIV, 10))
{
   case 2:
            { //捕获/比较1中断
                    new_cap1 = TACCR1;
                    cap_diff1 = new_cap1 - old_cap1;
                    diff_array1[index1] = cap_diff1;            
                    capture_array1[index1++] = new_cap1;
                    if (index1 == 5)
                    {
                       //P6OUT ^=0X01;
                        cap_flag1=1;                        
                        index1 = 0;
                        for(i=0;i<5;i++)
                        {
                          sum_diff1 +=diff_array1[i];
                        }                    
                        ave_diff1=sum_diff1/5;
                        sum_diff1=0;
                     }
                    else
                    {
                      cap_flag1=0;
                    }
                    old_cap1 = new_cap1;                     
                  //  LPM0_EXIT; //退出中断后退出低功耗模式            
                    break;
            }
case 4:
            { //捕获/比较2中断
              //init_p2();
         //           P6OUT ^=0X01;
                    new_cap2 = TACCR2;
                    cap_diff2 = new_cap2 - old_cap2;
                    diff_array2[index2] = cap_diff2;            
                    capture_array2[index2++] = new_cap2;
                    if (index2 == 5)
                    {
                        cap_flag2=1;
                        index2 = 0;
                        for(i=0;i<5;i++)
                        {
                          sum_diff2+=diff_array2[i];
                        }
                        ave_diff2=sum_diff2/5;
                        sum_diff2=0;
                    }
                    else
                    {
                      cap_flag2=0;
                    }
                     old_cap2 = new_cap2;
                 //   LPM0_EXIT;
              break;
            }
}

   //     if((cap_flag1==1)||(cap_flag2==1))
    //    {
  //  P6DIR &=~(BIT0);      
         LPM0_EXIT; //退出中断后退出低功耗模式。
   //     }
}

相关帖子

沙发
airwill| | 2013-5-14 12:27 | 只看该作者
定时器功能差不多,倒是可以改,
还有 IO 端口相关的部分就按 IO 分配来改咯

使用特权

评论回复
板凳
本帖最后由 在路上的旁观者 于 2013-6-6 14:43 编辑

:)看看

使用特权

评论回复
地板
本帖最后由 在路上的旁观者 于 2013-6-6 14:43 编辑

??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝