ADC的精度是不用设置的。ADC的转换结果在ATmega16中都是10位,不管怎么设置。只是当我们需要8位精度时,读取高8位即可,低2位忽略。当需要10位精度时,全部10位都读取。在说明前,先定义一些变量unsigned int ADC_result;unsigned int ADC_temp;对于左对齐8位精度:这种情况只需要读取ADCH( ADC_result = ADCH),ADCL可以不读。10位精度:这种情况比较复杂ADC_result = ADCL; //一定要先读取低字节ADC_temp = ADCH; //再读取高字节ADC_result |= (ADC_temp<<8);ADC_result = (ADC_result>>6) & 0x03FF; //10位精度的结果右对齐8位精度:ADC_temp = ADCL;ADC_temp |= (ADCH<<8);ADC_result = (ADC_temp>>2) & 0x00FF; //将低2位移出10位精度:ADC_temp = ADCL;ADC_temp |= (ADCH<<8);ADC_result = ADC_temp;