📄 msp430_mma7361.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 + -