关于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;
}