/*******************************************************************
测试程序:测试PIC24F16KA301 AD转换
时 钟:内部时钟
作者:张蓬勃
********************************************************************/
#include <p24F32KA302.h>
void Init_Adc(void)
{
//AD1CON1 Register
AD1CON1=0;
AD1CON1bits.FORM = 0; // 无符号绝对十进制小数结果,右对齐
AD1CON1bits.SSRC = 7; // 自动启动AD转换,采样时间由SAMC位定义
AD1CON1bits.ASAM = 1; // 采样在上次转换完成后立即开始;SAMP 位自动置1
/// AD1CON1=0X00E4;
//AD1CON2 Register
AD1CON2=0;
AD1CON2bits.PVFCG=1; //转换器正参考电压:外部Vref
AD1CON2bits.NVCFG=1; //转换器负参考电压:外部Vref
AD1CON2bits.SMPI=7; //0 // 每完成八次采样/ 转换产生一次中断
AD1CON2bits.BUFM=0; //0 //缓冲区配置两个8字缓冲区从地址ADCBUF0 开始填充缓冲区,且在产生连续中断时按顺序填充每个地址(FIFO模式)
AD1CON2bits.ALTS=1; //0 //第一次采样A选择的通道,第二次采样B选择的通道
//AD1CON3 Register
AD1CON3=0;
AD1CON3bits.ADRC = 0; // 时钟由系统时钟产生
AD1CON3bits.ADCS = 7; //0 // A/D 转换时钟 Tad=8Tcy= (1/8M)*8 = 1us,转换时间为12Tad
AD1CON3bits.SAMC = 5; //自动采样时间设置位5Tad
//AD1CHS0: A/D Input Select Register
AD1CHS=0;
AD1CHSbits.CH0SA=9; // MUX_A多路开关设置的采样/保持放大器正输入选择位:AN5
AD1CHSbits.CH0NA=0; // 采样A通道0负输入选择位:AVss
AD1CHSbits.CH0SB=5; // MUX_A多路开关设置的采样/保持放大器正输入选择位:AN5
AD1CHSbits.CH0NB=0; // 采样A通道0负输入选择位:AVss
//AD1PCFGH/AD1PCFGL: Port Configuration Register
ANSELBbits.ANSB3=1; //设置RB3(AN5)位模拟输入
TRISBbits.TRISB3=1;
ANSELBbits.ANSB15=1; //设置RB15(AN9)位模拟输入
TRISBbits.TRISB15=1;
//AD1CSSH/AD1CSSL: A/D Input Scan Selection Register
AD1CSSH = 0x0000;
AD1CSSL = 0x0000; // Channel Scan is disabled, default state
IFS0bits.AD1IF = 0; // Clear the A/D interrupt flag bit
IEC0bits.AD1IE = 1; // Enable A/D interrupt
// IPC3bits.AD1IP=4; //置AD优先级为5
AD1CON1bits.ADON = 1; // Turn on the A/D converter
}