void adc_init(void) { ADCSRA = 0x00; //禁用ADC ADMUX = 0x03; ACSR = 0x80; //禁用模拟比较器 ADCSRB = 0x00; ADCSRA = 0x83; } uint read_adc(void) { uint temp = 0; ADCSRA |= (1 << ADSC); //使能AD转换,第一次转换,结果丢弃 while((ADCSRA & (1 << ADIF)) == 0); //等待AD转换结束 ADCSRA |= (1 << ADIF); //ADIF写1用来清除ADIF,规格书上要求的 ADCSRA |= (1 << ADSC); //使能AD转换,第二次转换,结果保留 while((ADCSRA & (1 << ADIF)) == 0); //等待AD转换结束 ADCSRA |= (1 << ADIF); temp = ADCL; temp |= (int)(ADCH << 8); return temp; }
|