程序如下,主要用来调试新焊的板子上430的ad转换功能。
#include"MSP430x23x.h"
int AD_TEMP = 0;
/************************A/D转换初始化*********************/
void Init_Adc(void)
{
P6SEL |= 0x08; //选择P6.3选择第二功能A3
ADC12CTL0 |= ADC12ON + SHT0_2; //采样保持时间为16个ADC12CLK,采样时间4*t*4;
ADC12CTL0 |= REF2_5V+REFON; //给DAC用内部2.5V参考源
ADC12CTL1 |= SHS_0 + SHP; //SAMPCON信号选择为采样时序电路产生的信号
ADC12CTL1 |= CSTARTADD_0; //转换存储器地址位,选择单次转换的地址
ADC12MCTL0 |= INCH_3+SREF_0; //选择转换通道为A3
ADC12CTL0 |= ENC; //ADC转换允许
ADC12CTL0 |= ADC12SC;
}
void main(void)
{
float VD = 0.0;
WDTCTL=WDTPW+WDTHOLD; //停止看门狗
Init_Adc();
while(1)
{
P5OUT |= BIT1; P5OUT |= BIT2;
ADC12CTL0 |= ADC12SC;
while((ADC12IFG & BIT0)==0); //等待转换完成ADC12IFG.0
for(int i = 1; i<500;i++) {} //加的小延时
AD_TEMP = ADC12MEM0; //读取存储器里的值
VD= (float)(AD_TEMP)*2.5/4095; //还原成模拟量
if(VD>=0.5){P5OUT = 0x00;} //无关紧要的部分,以前程序里的用于点亮指示灯的
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
结果是模拟输入电压是1v时,AD_TEMP(即ADC12MEM0)的值为1294,1196,1365,1151,1138,1277.这好像根本不对。补充下,模拟输入量是直接与单片机管脚相连的,中间无其他部分。