|
我想问一下ATmega128 内部AD的用法,寄存器我都设置了,但是发现AD一直都在转换,得不到转换结束标志位,这是为什么呢?下面是我的AD初始化程序和获取函数:
void init_adc()
{
ADCSR=0x00; //设置ADC前,禁止ADC
ADCSR=BIT(ADEN)|BIT(ADPS1)|BIT(ADPS0)|BIT(ADPS2); //ADC使能,128分频
ADMUX=BIT(REFS1)|BIT(REFS0); //设置ADC内置参考电压为2.56V的片内基准电源
ADMUX|=BIT(ADLAR); //ADC转换结果左对齐,直接取ADCH的8位数据
// ADCSR=BIT(ADEN)|BIT(ADPS1)|BIT(ADPS0)|BIT(ADPS2); //ADC使能,128分频
}
unsigned char get_adcdata(void)
{
unsigned char volt;
// ADMUX=BIT(MUX0)|BIT(MUX1)|BIT(MUX2)|BIT(MUX3); //选择通道,电池电压通道
ADMUX|=0;
ADCSR|=BIT(ADSC); //启动单次ADC转换
while (!(ADCSR&BIT(ADIF))) //等待转换结束
{
PORTD &= ~BIT(0);
delay_ms(100);
PORTD |= BIT(0);
delay_ms(100);
}
ADCSR&=~(BIT(ADIF)); //清楚ADIF位
volt=ADCH;
return volt;
}
恳请各位大侠帮忙解决!我都纠结好一阵子了
|
|