pic24hj64gp506 ADC 采样值数据不对?求高手解救.....
时间:10-02
整理:3721RD
点击:

使用的是30针脚(AN15/OCFB/CN12/RB15)
代码如下:
#define uchar unsigned char
#define uint unsigned int
uint adcValue;
void InitADC(void)
{
TRISB=0XFFFF; // PORTB INPUT
AD1PCFGL=0x0000; // Analog Input
AD1CON1bits.ADSIDL= 0; //AD模块一直工作,即使在空闲模式
AD1CON1bits.AD12B = 0; //ADC工作在10BIT模式
AD1CON1bits.ASAM = 0; //选择了手动采样模式,当SAMP位置1后才开始采样
AD1CON2bits.VCFG = 0; //参考电压选择,bit15:13,000选择电源参考,001表示Vref+
AD1CON3bits.ADRC = 1; //1表示使用内部RC时钟,0表示使用系统FOSC时钟
AD1CON3bits.ADCS = 31; //调节Tcy与Tad的关系,范围0~63,63是最慢的
AD1CON2bits.CSCNA = 0; //不自动扫描输入
AD1CON2bits.CHPS = 0; //同时扫描的通道数,现在只选择了一个CH0
AD1CON1bits.SSRC = 7; //转换触发源选择位,111表示采样结束自动转换
AD1CON3bits.SAMC = 0; //自动采样时间为31个Tad,范围0~31
AD1CON1bits.FORM = 0; //数据格式,整数格式,右对齐
AD1CON2bits.ALTS = 0; //总是使用多路开关A来作为通道选择位
AD1CHS0bits.CH0NA = 0; //通道0的反向输入端为-Vref,这里为地。
AD1CON1bits.ADON = 1; //打开ADC模块
}
//=========================读取一个通道的值==============================
uint ReadADC(uchar ch)
{
AD1CHS0bits.CH0SA = ch; //0~15分别表示选中16个通道之一
AD1CON1bits.SAMP = 1; //开始采样,采样结束后自动开始转换
while(!AD1CON1bits.DONE); //此位为0表示正在采样中
AD1CON1bits.DONE = 0; //也可以不清零,在新的转换开始时,硬件自动清零
adcValue=ADC1BUF0&0x03ff;
return adcValue;
}
这个针脚是不是还有其它什么地方需要配置的呢?请高手指点!
