关于MSP430F149的A/D转换:(都必须经过以下阶段) 1、设置通道 2、打开ADC,设置采样时间 3、使用采用定时器 4、设置参考电压 5、使能开始 6、采样开始 7、等待转换完成 8、把转换的值存入变量 一、单通道单次转换()
#include #define uint unsigned int /********************************************************************************** 延时语句 *********************************************************************************/ #define CPU_F ((double)8000000.0) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
uint ad_temp; void main(void) { WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 P6SEL=0X01; //通道0 ADC12CTL0=ADC12ON+SHT0_2+MSC; //打开ADC12内核+采样周期+仅首次转换由SHI信号的上升沿触发采样定时器后面的采样在前一次完成后,立即进行 /* 1、ADC12ON: ADC12内核控制位 0:关闭内核 1:表示打开内核 2、ADC12CTL0 只有在ENC=0时才能被修改 */ ADC12CTL1=SHP+CONSEQ_0; //SAMPCON源自采样定时器,由采样输入信号的上升沿触发+单通道单次转换 /* 1、SHP 采样信号(SAMPCON)选择控制位 0:采样信号源自采样触发器输入信号 1:采样信号源自采样采样定时器,由采样输入信号的上升沿触发采样定时器 2、CONSEQ 转换模式选择位 0:单通道单次转换 1:序列通道单次转换模式 2:单通道多次转换模式 3:序列通道多次转换模式 */ ADCMCTL0=SREF_0; //Vr+=AVcc,Vr-=AVss; /* SREF 参考电压选择位 */ ADC12CTL0|=ENC; //首次转换由SAMPCON上升沿启动 /* ENC 转换允许位 0:ADC12为初始状态,不能启动A/D转换 1:首次转换由采样信号上升沿启动 */ ADC12CTL0|=ADC12SC; //采样/转换控制位开 /* ADC12SC 采样/转换控制位 */ delay_ms(100); //等待转换完成 ad_temp=ADC12MEM0; //将转换的值赋给变量ad_temp; delay_ms(50); } 二、单通道多次转换 void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P6SEL=0x01;
ADC12CTL0=ADC12ON+SHT0_0+MSC;//打开内核,设置采样时间,设置采样模式
ADC12CTL1=SHP+CONSEQ_2; //选择采样信号,采用单通道多次转换模式
ADC12IE=0X01; //使能中断ADC12IFG.0
ADC12CTL0|=ENC; //转换允许
_EINT();
ADC12CTL0|=ADC12SC; //开始转换
_BIR_SR(LPM0_bits);
}
#pragma vector = ADC_VECTOR
__interrupt void ADC12ISR(void)
{ ad_temp = ADC12MEM0;
}
|