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

📄 adc12.c

📁 msp430串口程序 MSP430_UART_DEMO
💻 C
字号:


#include "includes.h"

#define   VREF           SREF_1
unsigned int adc_mem[3];
/*
***************************************************************************************
*          ADC12采样型号为TIMEB OUT1,3276.8HZ,转换时钟为4MHz,
***************************************************************************************
*/

int adc_convert(unsigned int *reslut)
{
  unsigned int i;
  P6SEL |= 0x07;                        // Enable A/D channel A0
  ADC12CTL0 = ADC12ON+MSC+SHT0_8+REFON+REF2_5V;  // Turn on and set up ADC12
  ADC12CTL1 = SHP+CONSEQ_1;             // Use sampling timer, single sequence
  ADC12MCTL0 = SREF_1 + INCH_0;                  // Vr+=Vref+
  ADC12MCTL1 = SREF_1 + INCH_1;                  // Vr+=Vref+
  ADC12MCTL2 = SREF_1 + INCH_2 + EOS;            // Vr+=Vref+
  for ( i=0; i<0x3600; i++)              // Delay for reference start-up
  {
  }

  reslut[0] = 0;
  reslut[1] = 0;
  reslut[2] = 0;
  ADC12CTL0 |= ENC;                     // Enable conversions
  i = 16;

  while (i--)
  {

    ADC12CTL0 |= ADC12SC;               // Start conversion
    while (!(0x04 & ADC12IFG));
    //ADC12IFG = 0;
    reslut[0] += ADC12MEM0;
    reslut[1] += ADC12MEM1;
    reslut[2] += ADC12MEM2;
    _NOP();                             // SET BREAKPOINT HERE
  }
  ADC12CTL0 = 0;
   return 1;
}

///////////
// 打开,关闭外部5V电源
void open_5_v(void)
{
  P2DIR |= BIT0;
  P2OUT &= ~BIT0;
}

void close_5_v(void)
{
  P2DIR |= BIT0;
  P2OUT |= BIT0;
}

int sample_air_pressure(void)
{
  return 0;
}

void dac_0_out_via_p_6_7(void)
{
  P6SEL |= BIT6;
  ADC12CTL0 =  REFON;          // Internal 1.5V ref on
}




///////////////////////////////////////
// 采集温度,湿度,气压,
//////////////////////////////////////
int adc_sample_weather(WH_SAMPLE *p_wh)
{
  open_5_v();
  P6SEL = BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT6 + BIT7;

  ADC12CTL0 = ADC12ON + MSC + SHT0_8 + REFON;  // Turn on and set up ADC12
   // 等待基准电压准备好
  delay(4000);

  ADC12CTL1 = SHP + CONSEQ_1;             // Use sampling timer, single sequence

  p_wh->temp = 0;
  p_wh->humidity = 0;
  p_wh->air_pressure = 0;
// 采样温度
#if __VER__ < 300
  OA1CTL0 = OAPM_1 + OAP_0 + OAADC0;    // 选择P1.4输入,低速模式,接通ADC13
  // 增益设为3,放大4倍
  OA1CTL1 = OAFC_4 + OAFBR_4;            // Mode, rail-to-rail inputs
#else
  OA1CTL0 = OAPM_1 + OAP_0 + OAADC0;    // 选择P1.4输入,低速模式,接通ADC13
  // 增益设为3,放大4倍
  OA1CTL1 = OAFC_4 + OAFBR_4;            // Mode, rail-to-rail inputs
#endif
  ADC12MCTL0 = SREF_1 + INCH_13;                  // Vr+=Vref+
  ADC12MCTL1 = SREF_1 + INCH_13;                  // Vr+=Vref+
  ADC12MCTL2 = SREF_1 + INCH_13;            // Vr+=Vref+
  ADC12MCTL3 = SREF_1 + INCH_13;            // Vr+=Vref+
  // 采样湿度
  ADC12MCTL4 = SREF_1 + INCH_13;                  // Vr+=Vref+
  ADC12MCTL6 = SREF_1 + INCH_13;                  // Vr+=Vref+
  ADC12MCTL6 = SREF_1 + INCH_13;            // Vr+=Vref+
  ADC12MCTL7 = SREF_1 + INCH_13 + EOS;            // Vr+=Vref+

  // 启动AD转换
  ADC12CTL0 |= ENC;                     // Enable conversions
  ADC12CTL0 |= ADC12SC;               // Start conversion

  while ((0x80& ADC12IFG) == 0);
  p_wh->temp += ADC12MEM0;
  p_wh->temp += ADC12MEM1;
  p_wh->temp += ADC12MEM2;
  p_wh->temp += ADC12MEM3;
  p_wh->humidity += ADC12MEM4;
  p_wh->humidity += ADC12MEM5;
  p_wh->humidity += ADC12MEM6;
  p_wh->humidity += ADC12MEM7;
  ADC12CTL0 = 0;
  //close_5_v();
  return 1;
}

⌨️ 快捷键说明

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