[求助] atmega128内部AD问题

haihao5722   2011-8-18 10:18 楼主
我想问一下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;
}

恳请各位大侠帮忙解决!我都纠结好一阵子了

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复