AD采样电池电压(8V),电压经滤波电路和电阻分压(2.5V)接到AIN1输入,但对ADCR操作时出现怪现象:ADC_Sample()调用ADC_Selchan()和ADC_Enable(),外部电阻分压值不对,与电阻值不成比,而注释掉ADC_Selchan() 或 ADC_Enable(),则电压就对了。不知道是怎么回事?程序如下:
#define ADC_Enable( ) { ADCR |= (1<<24); } // 立即启动转换 #define ADC_IsFinished( ) { while( (ADDR&0x80000000) == 0 ); } // 等待 void ADC_Selchan( UINT8 channum ) { ADCR = (ADCR&(~0xFF))|(channum); } // 选择通道
void ADC_Init( void ) { ADCR = 0 // SEL = 0 ,选择通道0 | ((Fpclk / 1000000 - 1) << 8) // 时钟为1MHz | (0 << 16) // BURST = 0 ,软件控制转换操作 | (0 << 17) // CLKS = 0 ,使用11clock转换 | (1 << 21) // PDN = 1 , 正常工作模式 | (0 << 22) // TEST1:0 = 00 ,正常工作模式 | (0 << 24) // START = 1 ,直接启动ADC转换 | (0 << 27); // EDGE = 0 }
UINT32 ADC_Sample( UINT8 num ) { UINT32 dat=0; ADC_Selchan( num ); * ADC_Enable( ); * ADC_IsFinished( ); dat = ADDR;
return ((dat>>6)&0x3ff); }
int main (void) { UINT32 dat=0; char str[20]; LCD_Init( ); LCD_Cls( ); ADC_Init( ); while(1) { dat = ADC_Sample( AIN1_SEL ); sprintf( str, "%4d", dat ); LCD_DispStr( 8, 2, str, NORMAL_VIEW );
Delay(15); } return 0; }
|