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

📄 msp430_mma7361.txt

📁 这是采用msp430单片机采集freescale加速度信号
💻 TXT
字号:

#include "typedefname.h"
#include <msp430x43x.h>
/* ----------- system file --------*/

//-------------------------------------------------------------------------------
//this is a subroutine for setup ADC
//mode is : rate 32khz
void Setup_AD_chanal(void)
{  
 //ADC12CTL0 = REF2_5V;
  //ADC12CTL0 |= REFON;
  ADC12CTL0=0; // turn off adc12
  P6SEL |= BIT0+BIT1+BIT2;                        // P6.1 ADC option select 
  ADC12CTL1 = SHP+ADC12SSEL_2+CONSEQ_1;             // Use sampling timer, repeated sequence  
  ADC12CTL0 = ADC12ON+MSC;       // Turn on ADC12, 
  ADC12MCTL0 = INCH_0;                  // ref+=AVcc, channel = A0
  ADC12MCTL1 = INCH_1;                  // ref+=AVcc, channel = A1
  ADC12MCTL2 = INCH_2+EOS;              // ref+=AVcc, channel = A1       
  ADC12CTL0 |= ENC;
} 



//================================================================================
//main programme moudle 
//================================================================================
void main (void)  
   { 
   //Setup_SystemCLK();
   SysBootOperating();
   //////////////////////////////////////////////////////
   //Debug_Pro();   
   ///////////////////////////////////////////////////////
   while(1){//  main loop
     }
} //this is main programme finished 




#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A0 (void)  // control adc 
{
   unsigned char i = 0;
   static unsigned char ADCCollectStateFlag;
   //if(PowerMode_uc>0){
   // PowerMode_uc = 0;
    _BIC_SR_IRQ(LPM3_bits);
   // }
   if (ADCCollectStateFlag==1){
      if (CSysTask.MotionFlag==0){
         CCR0 += 32704; // 1 
         ADC12CTL0 |= ADC12ON;       // Turn on ADC12, 
         ADC12CTL0 |= ENC;
         ADC12CTL0 |= ADC12SC+ENC;         // Sampling open 
         ADCCMPXBuf = ADCSourceXBuf;
         ADCCMPYBuf = ADCSourceYBuf;
         ADCCMPZBuf = ADCSourceZBuf; 
         while ((ADC12CTL1 & ADC12BUSY) == 1);   // ADC12BUSY?
         //---------------------------------
         ADCSourceXBuf = (unsigned char)(ADC12MEM2>>4);
         ADCSourceYBuf = (unsigned char)(ADC12MEM1>>4);
         ADCSourceZBuf = (unsigned char)(ADC12MEM0>>4);
         if (ADCCMPXBuf > ADCSourceXBuf)i = ADCCMPXBuf-ADCSourceXBuf;
         else i = ADCSourceXBuf-ADCCMPXBuf;
         if (i > 4){
           CSysTask.MotionFlag=1;
           CSysTask.TimeOutCount = 0;
           CSysTask.ADCFlag ++;
           Init_SleepPara();
         }else{
           if (ADCCMPYBuf > ADCSourceYBuf)i = ADCCMPYBuf-ADCSourceYBuf;
           else i = ADCSourceYBuf-ADCCMPYBuf;
           if (i > 6){
             CSysTask.MotionFlag=1;
             CSysTask.TimeOutCount = 0;
             CSysTask.ADCFlag ++;
             Init_SleepPara();
           }else{
              if (ADCCMPZBuf > ADCSourceZBuf)i = ADCCMPZBuf-ADCSourceZBuf;
              else i = ADCSourceZBuf-ADCCMPZBuf;
              if (i > 6){
                CSysTask.MotionFlag=1;
                CSysTask.TimeOutCount = 0;
                CSysTask.ADCFlag ++;
                Init_SleepPara();
              }
           }
         }
         //---------------------------------
         MM7360LT_POWER_OFF;  // close sensor power 
         //MM7360LT_SLEEP_ON;
         ADC12CTL0 &= ~(ENC+ADC12ON); // Turn off ADC12, 
         //ADC12CTL0 &= ~ADC12ON;        
         ADCCollectStateFlag=0;
         if (CSysTask.Mode != USBM_INTI){
             CSysTask.TimeOutCount++;// 1Hz
             //////////////////////////////////////
             if (CSysTask.TimeOutCount == 1800){// 30 mintue * 60 sec 1800
                 if ((CRecDay.Hour>=9)&&(CRecDay.Hour<22)){
                      LCDCTL |= LCDON; // close LCD
                      BTCTL |= BT_fLCD_DIV32;
                      LCD_FullOff();
                      CSysTask.Mode = SLEEPM_ALARM;
                      System_StateFlag = 21;
                 }else{
                      CSysTask.Mode = SLEEPM_SLEEP;
                      System_StateFlag = 20;
                      LCDCTL &= ~LCDON; // close LCD
                      BTCTL &= ~BT_fLCD_DIV32;
                 }
             }else if(CSysTask.TimeOutCount == 120){// 2 mintue 120
                 CSysTask.IdleCount = 0;
                 CSysTask.Mode = SLEEPM_SLEEP;
                 System_StateFlag = 20;
                 LCDCTL &= ~LCDON; // close LCD
                 BTCTL &= ~BT_fLCD_DIV32;
             }
             if (CSysTask.Mode == SLEEPM_ALARM)CSysTask.DispMessage = DISPLAY_SLEEPM_ALARM;
             if (CSysTask.Mode == SLEEPM_SLEEP)CSysTask.DispMessage = DISPLAY_SLEEPM_SLEEP;
         }else CSysTask.TimeOutCount = 0;
         //////////////////////////////////////
      }else{
         CCR0 += 1984; // 16 
         ADC12CTL0 |= ADC12ON;       // Turn on ADC12, 
         ADC12CTL0 |= ENC;
         ADC12CTL0 |= ADC12SC+ENC;         // Sampling open  
         //-------------------------------
         FX_raw[2]=FX_raw[1];//
         FY_raw[2]=FY_raw[1];//
         FZ_raw[2]=FZ_raw[1];// 
     
         FX_raw[1]=FX_raw[0];
         FY_raw[1]=FY_raw[0];
         FZ_raw[1]=FZ_raw[0]; 
         //-------------------------------
         while ((ADC12CTL1 & ADC12BUSY) == 1);   // ADC12BUSY?
         ADCSourceXBuf = (unsigned char)(ADC12MEM2>>4);//16
         ADCSourceYBuf = (unsigned char)(ADC12MEM1>>4);//16
         ADCSourceZBuf = (unsigned char)(ADC12MEM0>>4);//16
         //---------------------------------
         MM7360LT_POWER_OFF;  // close sensor power 
         //MM7360LT_SLEEP_ON;
         ADC12CTL0 &= ~(ENC+ADC12ON); // Turn off ADC12, 
         //ADC12CTL0 &= ~ADC12ON;
         ADCCollectStateFlag=0;
         CSysTask.ADCFlag ++;
         
         //USB_TXByte(ADCSourceXBuf);
         //USB_TXByte(ADCSourceYBuf);
         //USB_TXByte(ADCSourceZBuf);
       }
    }else{
      ADCCollectStateFlag=1; // open adc sensor VCC
      CCR0 += 64; // 512 hz 
      MM7360LT_POWER_ON;
      //MM7360LT_SLEEP_OFF;
    }
}

⌨️ 快捷键说明

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