我用的MSP430F235编的AD转换程序,得到的转换结果很不稳定。希望各位大虾帮帮忙。
[复制链接]
程序如下,主要用来调试新焊的板子上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.这好像根本不对。补充下,模拟输入量是直接与单片机管脚相连的,中间无其他部分。
|