本人第一次用AVR,有一个问题请教大虾们,如下程序:
AD采样程序
uint8 Adc_Get8(uint8 ch){
uint8 adc_temp;
ADMUX|=ch; /* start*/
_delay_us(5);
BitSet(ADCSRA,BIT6); //启动AD
_delay_us(5);
//while(BitTst(ADCSRA,BIT6));
loop_until_bit_is_set(ADCSRA,ADIF); //方法1 等待AD转换结束
ADCSRA|=(1<<ADIF); //写1清除标志位
adc_temp=ADCH;
return adc_temp;
}
初始化程序:
void SYS_INIT(void){
PORTE=0x0;
DDRE=0x02;
PORTF=0x0;
DDRF=0x0;//0xe0;
TIMSK=(1 << TOIE0); //定时器设置125us
TIFR=(1 << TOV0);
TCNT0=6;
TCCR0=0x02;
ADMUX=0x21;//0x20;//参考电压VREF,左对齐
ADCSRA=0x87;//此寄存器使能AD,并设定AD时钟
}
在主程序隔4MS调用一次AD采样,为什么总是与实测结果偏差5-8个ad值左右叫呢,搞了好几天了,用其它单片机都不会,AVR更应该不会才对的 |