⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 原文件 main.c

📁 msp430开发完整工程文件msp430开发完整工程文件msp430开发完整工程文件msp430开发完整工程文件
💻 C
字号:
#include <msp430x14x.h>
#include <stdlib.h>

void Init_clk(void);              //函数声明
void Init_ADC(void);
void Init_TimerA(void);
void Init_port(void);
void Init_sys(void);
void BaoLuo_Detector(int nLen);
void bandpassfilter(int nLen);

int nADC_Flag;           //全局变量,标志ADC12采集到新数据
int nADC_Count;
int ADC_BUF_Temp[318];   //交换数据的缓冲区
int ADC_BUF_Temp1[318];
int ADC_BUF_Temp2[318];
int ADC_BUF[318];


//********************主函数***************************
void main(void)
{ 
  int i;
  int nCount;

  WDTCTL =WDTPW + WDTHOLD;      //关闭看门狗
  _DINT();                      //禁止中断

  nADC_Flag=0;                  //初始化变量
  nADC_Count=0;
  nCount=0;

  Init_sys();
  _EINT();                     //该函数打开中断

start:
  LPM1;                        //低功耗模式1
  if (nADC_Flag ==1)
  {
    //LPM1_EXIT;               //退出休眠模式
    nADC_Flag =0;
    bandpassfilter(318);       //???
    BaoLuo_Detector(318);      //???
  
    for (i=0;i<1;i++)          //设置门限比较
    {
      if (ADC_BUF_Temp2[i]>3)
         nCount+=1;
    }
    if (nCount>200)             //满足条件则实现功能
    {
      P3OUT |=BIT2;
      P4OUT |=BIT0;
      P4OUT |=BIT1;
      P4OUT |=BIT2;
      P4OUT |=BIT3;
    }
    else 
    {
      nCount=0;
      P3OUT &=~(BIT2);
      P4OUT &=~(BIT0);
      P4OUT &=~(BIT1);
      P4OUT &=~(BIT2);
      P4OUT &=~(BIT3);
      LPM1;  //工作模式1
    }
  goto start;
  }
}


//***********ADC12,定时器A初始化,定时器中断*****************
void Init_sys(void)               //系统初始化
{
  Init_clk();
  Init_ADC();
  Init_TimerA();
  Init_port(); 
}
 
//***********************初始化时钟*************************
void Init_clk(void)
{
   unsigned int i;
   
   BCSCTL1=0X00;                  //将寄存器BCSCTL1的内容清零
                                  //XT2开启,LFTX1工作在低频,ACLK的分频因子为1
   do
   {
      IFG1 &=~OFIFG;              //清除OSCFault标志位
      for(i=0x20;i>0;i--);        //IFG1中断标志寄存器1
   }
    while((IFG1 & OFIFG)== OFIFG);//如果OSCFault=1
    
    BCSCTL2=0X00;
    BCSCTL2 += SELM_2;            //MCLK的时钟源为TX2CLK,分频因子为1
    BCSCTL2 += SELS +DIVS_3;      //SMCLK的时钟源为TX2CLK,分频因子为8
    return;
}

//*******************初始化ADC12*****************
void Init_ADC(void)
{
  WDTCTL= WDTPW + WDTHOLD;
  
  P6SEL= 0X10;                    //选择P6.7口为外围模块模拟输入
  
  ADC12CTL0 &=~(ENC);             //使能ADC12寄存器修改,ENC=0
  ADC12CTL1 |= CSTARTADD_0;       //转换起始地址
  ADC12MCTL0 = INCH_0+EOS;        //参考电压设置
  
  ADC12CTL0 =ADC12ON;             //ADC12内核控制,打开ADC12可以转换
  ADC12CTL0 =MSC;                 //首次转换由SHI信号的上升沿触发采样定时器,而后采样转换
                                  //将在前一次转换完成后立即进行,不需要SHI的上升沿触发
  ADC12CTL1 |=CONSEQ_1;           //序列通道单次转换
  
  ADC12CTL1 |=ADC12SSEL_3;        //ADC内核时钟SMCLK
  ADC12CTL1 |=ADC12DIV_0;         //不分频
  ADC12CTL0 |=ENC;
  ADC12CTL1 |=(SHP);              //采样脉冲由采样定时器产生
  ADC12CTL1 =SHS0;
  
  
  return;
}

//******************初始化定时器A********************
void Init_TimerA(void)
{
  
  TACTL =TASSEL1+TACLR;    //选择SMCLK,计数器清零
  TACTL &=~(ID1);          //不分频
  TACTL &=~(ID0);
  
  CCTL1 |=CCIE;            //捕获/比较控制寄存器中断允许
  CCR1 =50;                //设置计数为50,计时时间间隔0.05ms或20KHZ
  TACTL |=MC0;             //增计数模式

  return;
}

//*******************端口初始化******************
void Init_port(void)
{
  P1DIR=0X10;             //设置P1.4为输入
  P1SEL=0;                //设置P1.4为一般I/O口
  P3DIR=0X07;             //同上类似
  P3SEL=0;
  P4DIR=0X0F;
  P4SEL=0;
  P6DIR=0X10;
  
}

//*****************定时器中断,完成ADC转换********
//#pragma vector=CCIFG0_VECTOR
//TIMERA0
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
//interrupt [TIMERA0_VECTOR] void TimerA_ISR(void)
{
  int results;
  int i;
  
  ADC12CTL0 &=~ENC;             //关闭ADC12转换
  results = ADC12MEM0;          //读出转换结果
  ADC_BUF[nADC_Count] =results;                     
  
  nADC_Count +=1;
  if(nADC_Count ==318)          //设置采样点数,缓存大小
  {
    nADC_Flag =1;               //设置标志
    for(i =0;i<1;i++) ADC_BUF_Temp[i]=ADC_BUF[i];
    nADC_Count =0;
  }
  
  ADC12CTL0 |= ENC+ADC12SC;     //开ADC12转换

}

//**************fir滤波器设计*********************
//int h1[]={-5.0002e-005,4.4518e-005,7.1623e-006,-1.6362e-005,-2.2914e-005,-1.2762e-005,1.0423e-005,3.894e-005,6.169e-005,6.6992e-005,4.742e-005,4.4912e-006,-4.9226e-005,-9.2831e-005,-0.00010449,-7.1387e-005,2.2389e-006,9.2878e-005,0.00016412,0.00018021,0.00012228,2.2599e-007,-0.00014583,-0.0002575,-0.00028018,-0.0001878,7.8165e-007,0.00022197,0.00038735,0.00041748,0.00027761,-4.0998e-007,-0.00032127,-0.0005568,-0.00059595,-0.00039349,5.9121e-007,0.00044927,0.00077387,0.00082318,0.00054043,-5.2489e-007,-0.00060951,-0.0010444,-0.0011052,-0.00072201,5.1519e-007,0.00080597,0.0013747,0.0014481,0.00094187,-4.2438e-007,-0.0010419,-0.0017698,-0.0018568,-0.0012029,3.5133e-007,0.00132,0.0022339,0.0023351,0.0015075,-2.556e-007,-0.0016421,-0.0027697,-0.0028855,-0.0018566,1.2834e-007,0.0020091,0.0033781,0.0035085,0.0022507,1.5833e-008,-0.0024206,-0.0040582,-0.0042026,-0.0026883,-1.3623e-007,0.0028749,0.0048067,0.0049643,0.0031672,2.946e-007,-0.0033688,-0.0056182,-0.0057876,-0.0036831,-4.6517e-007,0.0038979,0.0064847,0.0066641,0.0042307,6.0912e-007,-0.0044561,-0.0073961,-0.0075832,-0.0048032,-7.5098e-007,0.0050361,0.00834,0.008532,0.0053923,8.6507e-007,-0.0056291,-0.0093021,-0.0094958,-0.0059887,-9.5962e-007,0.0062255,0.010266,0.010458,0.0065823,1.0171e-006,-0.0068148,-0.011215,-0.011402,-0.007162,-1.06e-006,0.0073858,0.012131,0.012309,0.0077166,1.0486e-006,-0.0079273,-0.012996,-0.013161,-0.0082349,-9.996e-007,0.008428,0.01379,0.01394,0.008706,9.2612e-007,-0.0088773,-0.014499,-0.014629,-0.0091194,-8.134e-007,0.0092653,0.015105,0.015213,0.0094661,6.5574e-007,-0.0095832,-0.015595,-0.015678,-0.009738,-4.8481e-007,0.0098237,0.015957,0.016014,0.009929,2.9908e-007,-0.0099812,-0.016184,-0.016213,-0.010034,-1.0586e-007,0.010052,0.01627,0.01627,0.010052,-1.0586e-007,-0.010034,-0.016213,-0.016184,-0.0099812,2.9908e-007,0.009929,0.016014,0.015957,0.0098237,-4.8481e-007,-0.009738,-0.015678,-0.015595,-0.0095832,6.5574e-007,0.0094661,0.015213,0.015105,0.0092653,-8.134e-007,-0.0091194,-0.014629,-0.014499,-0.0088773,9.2612e-007,0.008706,0.01394,0.01379,0.008428,-9.996e-007,-0.0082349,-0.013161,-0.012996,-0.0079273,1.0486e-006,0.0077166,0.012309,0.012131,0.0073858,-1.06e-006,-0.007162,-0.011402,-0.011215,-0.0068148,1.0171e-006,0.0065823,0.010458,0.010266,0.0062255,-9.5962e-007,-0.0059887,-0.0094958,-0.0093021,-0.0056291,8.6507e-007,0.0053923,0.008532,0.00834,0.0050361,-7.5098e-007,-0.0048032,-0.0075832,-0.0073961,-0.0044561,6.0912e-007,0.0042307,0.0066641,0.0064847,0.0038979,-4.6517e-007,-0.0036831,-0.0057876,-0.0056182,-0.0033688,2.946e-007,0.0031672,0.0049643,0.0048067,0.0028749,-1.3623e-007,-0.0026883,-0.0042026,-0.0040582,-0.0024206,1.5833e-008,0.0022507,0.0035085,0.0033781,0.0020091,1.2834e-007,-0.0018566,-0.0028855,-0.0027697,-0.0016421,-2.556e-007,0.0015075,0.0023351,0.0022339,0.00132,3.5133e-007,-0.0012029,-0.0018568,-0.0017698,-0.0010419,-4.2438e-007,0.00094187,0.0014481,0.0013747,0.00080597,5.1519e-007,-0.00072201,-0.0011052,-0.0010444,-0.00060951,-5.2489e-007,0.00054043,0.00082318,0.00077387,0.00044927,5.9121e-007,-0.00039349,-0.00059595,-0.0005568,-0.00032127,-4.0998e-007,0.00027761,0.00041748,0.00038735,0.00022197,7.8165e-007,-0.0001878,-0.00028018,-0.0002575,-0.00014583,2.2599e-007,0.00012228,0.00018021,0.00016412,9.2878e-005,2.2389e-006,-7.1387e-005,-0.00010449,-9.2831e-005,-4.9226e-005,4.4912e-006,4.742e-005,6.6992e-005,6.169e-005,3.894e-005,1.0423e-005,-1.2762e-005,-2.2914e-005,-1.6362e-005,7.1623e-006,4.4518e-005,-5.0002e-005};
int h2[]={0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,0,0,1,1,1,1,0,-1,-2,-2,-1,0,1,2,3,2,0,-2,-3,-4,-2,0,3,5,5,3,0,-4,-6,-7,-4,0,5,8,9,6,0,-6,-11,-11,-7,0,8,14,14,9,0,-10,-17,-18,-11,0,12,21,22,14,0,-15,-25,-26,-17,0,18,30,31,19,0,-21,-35,-36,-23,0,24,40,41,26,0,-27,-45,-47,-30,0,31,51,52,33,0,-35,-57,-58,-37,0,38,63,64,40,0,-42,-69,-70,-44,0,45,75,76,47,0,-49,-80,-81,-51,0,52,85,86,54,0,-55,-89,-90,-56,0,57,93,94,58,0,-59,-96,-96,-60,0,60,98,98,61,0,-61,-99,-100,-62,0,62,100,100,62,0,-62,-100,-99,-61,0,61,98,98,60,0,-60,-96,-96,-59,0,58,94,93,57,0,-56,-90,-89,-55,0,54,86,85,52,0,-51,-81,-80,-49,0,47,76,75,45,0,-44,-70,-69,-42,0,40,64,63,38,0,-37,-58,-57,-35,0,33,52,51,31,0,-30,-47,-45,-27,0,26,41,40,24,0,-23,-36,-35,-21,0,19,31,30,18,0,-17,-26,-25,-15,0,14,22,21,12,0,-11,-18,-17,-10,0,9,14,14,8,0,-7,-11,-11,-6,0,6,9,8,5,0,-4,-7,-6,-4,0,3,5,5,3,0,-2,-4,-3,-2,0,2,3,2,1,0,-1,-2,-2,-1,0,1,1,1,1,0,0,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0};

void bandpassfilter(int Len)
{ 
  int i,j,k;
  int Buff1[318]={0};              //318信号长度,待定!!
  int sum0;
  for (i=0;i<318;i++) 
  {
    Buff1[1]=ADC_BUF_Temp[i];
    sum0=0;
    for(j=0;j<Len;j++)sum0+=Buff1[j]*h2[j];
    ADC_BUF_Temp1[i]=sum0;
  }
  for (k=0;k<Len-1;k++)Buff1[Len-k+1]=Buff1[Len-k];
}

//*********************包络检波**************************
//int h3[]={0};
int h4[]={0};

void BaoLuo_Detector(int nLen)
{
  int i,j,k;
  int Buff2[318]={0};
  int sum1;
  for (i=0;i<nLen;i++) 
  {
    Buff2[1]=ADC_BUF_Temp1[i];
    Buff2[i]=abs(Buff2[i]);                 //取绝对值
    sum1=0;
    for(j=0;j<nLen;j++)sum1+=Buff2[j]*h4[j];//FIR低通滤波
    ADC_BUF_Temp2[i]=sum1>>15;
  }
  for (k=0;k<nLen-1;k++)
  {
    Buff2[nLen-k+1]=Buff2[nLen-k];
  }
}

/*
h5[212]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,0,1,2,2,1,0,-2,-3,-4,-3,0,3,6,6,4,0,-5,-9,-10	-7,0,8,14,15,10,0,-11,-20,-21,-14,0,16,27,28,18,0,-21,-35,-37,-24,0,26,44,46,30,0,-32,-54,-56,-36,0,38,63,65,42,0,-44,-73,-75,-47,0,49,82,83,52,0,-54,-89,-90,-57,0,58,95,96,60	0,-61,-99,-99,-61,0,62,100,100,62,0,-61,-99,-99,-61,0,60,96,95,58,0,-57,-90,-89,-54,0,52,83,82,49,0,-47,-75,-73,-44,0,42,65,63,38,0,-36,-56,-54,-32,0,30,46,44,26,0,-24,-37,-35,-21,0,18,28,27,16,0,-14,-21,-20,-11,0,10,15,14,8,0,-7,-10,-9,-5,0,4,6,6,3,0,-3,-4,-3,-2,0,1,2,2,1,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
h6[128]={0,0,0,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,0,0,-1,-3,-4,-5,-7,-8,-10,-12,-13,-15,-16,-17,-18,-19,-19,-19,-18,-17,-15,-13,-10,-6,-2,3,9,14,21,27,34,41,49,56,63,69,75,81,86,91,94,97,99,100,100,99,97,94,91,86,81,75,69,63,56,49,41,34,27,21,14,9,3,-2,-6,-10,-13,-15,-17,-18,-19,-19,-19,-18,-17,-16,-15,-13,-12,-10,-8,-7,-5,-4,-3,-1,0,0,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,0,0,0};
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -