我用的是PIC33fjmc204的单片机。
下面是一个ADC的初始化程序,请问这样初始化后,用了那几路输入ANx?几个通道同时采样转换的结果在ADC1BUFx中按怎样的方式存的啊?里面的值是不是要及时取?
我刚学请解说?
void init_ad(void)
{
//////////1//////////
AD1PCFGL=0xFFFF;
AD1PCFGLbits.PCFG0 =0; //0采样引脚电压
AD1PCFGLbits.PCFG1 =0;
AD1PCFGLbits.PCFG2 =0;
AD1PCFGLbits.PCFG3 =0;
AD1PCFGLbits.PCFG4 =0;
AD1PCFGLbits.PCFG5 =0;
AD1PCFGLbits.PCFG6 =0;
AD1PCFGLbits.PCFG7 =0;
//////////2////////
_VCFG =0b000;
//////////3///////////////
AD1CON3bits.ADRC=0; //0 = 时钟由系统时钟产生
AD1CON3bits.SAMC=0b0010; //自动采样时间位:xx个tad
AD1CON3bits.ADCS=4; //ADC 转换时钟选择位:(xx+1)*tcy=tad
// AD1CON3bits.ADRC=0; //1 = ADC 内部RC时钟
////////4//////////////////////
AD1CON2bits.CHPS=0b11; //00:ch0 01:ch0,ch1 1x:ch0,ch1,ch2,必须AD12B=0才有效
AD1CON2bits.SMPI=0b0001; //0b1111:第十六次采样后产生中断
AD1CON2bits.CSCNA=0; //0:不扫描 1:扫描
/////////////5//////////////////
AD1CON1bits.SSRC=0b111;
///////////6///////
AD1CON1bits.AD12B=0;
AD1CON1bits.FORM=0b00;
//////////////7/////////
AD1CON1bits.ASAM=1;//采样结束后自动采样
AD1CON1bits.SAMP=0;//同时采样ch0,ch1,ch2,ch3
AD1CON1bits.SIMSAM=1; //0:顺序采样多通道 1:同时采样碰通道
AD1CON2bits.ALTS=1; //1 = 在第一次采样时使用采样多路开关A选择的输入通道,而在下一次采样时使用采样多路开关B选择的输入通道
AD1CSSL=0;
AD1CSSLbits.CSS1=1; //1:扫描 0:不扫描
//////////8//////
AD1CHS0bits.CH0NA=0; //ch0的反相输入为VREF-
AD1CHS0bits.CH0SA=6; //ch0同相输入AN6
AD1CHS0bits.CH0SB=7; //多路开关B ch0同相输入AN7
AD1CHS123bits.CH123SA=1; //多路开关A 1 = CH1 的同相输入为AN3, CH2 的同相输入为AN4, CH3 的同相输入为AN5
AD1CHS123bits.CH123SB=0; //多路开关B CH1 的同相输入为AN0, CH2 的同相输入为AN1, CH3 的同相输入为AN2
////////////9////////////////
IFS0bits.AD1IF=0;
_AD1IP=5;
IEC0bits.AD1IE=1;
中断里这样取值是什么意思?假设下面变量是定义了的。
void __attribute__((interrupt, auto_psv)) _ADC1Interrupt(void)
{
Vad[4]=(ADC1BUF2*3.3/1024.0); //ADC1BUFx是映射寄存器共16个
Vad[0]=(ADC1BUF5*3.3/1024.0);
IFS0bits.AD1IF=0;
}
求解释!谢谢!我刚学啊啊
} |