本帖最后由 sunnyjaky1 于 2012-9-3 14:49 编辑
void ADC_Init(void)
{
unsigned long int i;
//set adc idle mode
ADC0MD = 0x80;
//unipolar mode & pga = 1
ADC0CN = 0x00;
//internal vref+
ADC0CF = 0x00;
// CLK pre-devided
ADC0CLK = ((unsigned long int)C8051_SYSCLK / 2457600) & 0xff - 1;
ADC0DECL = ((unsigned long int)C8051_SYSCLK / (ADC0CLK+1)/100/128) & 0xff - 1;
ADC0DECH = 0;
//dac offset
ADC0DAC = 0x00;
//in buffer control
ADC0BUF = 0x00;
//adc offset
ADC0COL = 0;
ADC0COH = 0;
ADC0COM = 0;
//adc gain
ADC0CGH = 0x80;
ADC0CGM = 0;
ADC0CGL = 0;
i = 2000;
while(i--);
ADC0STA = 0;
//adc multiplexer
//+:adcin1 -:agnd
ADC0MUX = 0x18;
ADC0MD |= 0x81; // 完全内部校准
while (!ADC0STA_bit.AD0CALC); // 等待转换完成
ADC0MD = 0x80;
}
其中C8051_SYSCLK :12MHZ
运行到最后一句的时候从仿真器看
ADC0CGH 0XFF ADC0CGM 0XFF ADC0CGL 0XFF
ADC0COL 0X50 ADC0COL 0XCD ADC0C0L 0X76
其中ADC0CO每次也不一样。
ADC0STA : 0X3A
所有通道转换后也全为FF FF FF
如果校正前adc0cg改为00 00 00,
所有通道转换后不论实际情况也全为00 00 00
看了网上的一些例程,但是都是一样的问题。请各位朋友给看看问题出在哪里。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>