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