|
发表于 2010-1-28 17:30:45
|
显示全部楼层
8位和10位,CUP都给出了10位,你只用了8位,另两位在ADCL里,1楼的方法简单,好用,要不你也可以用一个int型变量
int adcbuf[10]
void AD_init(void)
{
ADMUX=0X60; //参考电压=AVCC 转换结果向左看齐,AD通道0
ADCSRA=0X85; //AD使能,转换时钟选择位=FOSC/32,单次转换
}
//---------------------------------------
//名称: AD转换函数
//-----------------------------------------
unsigned char adc_read(void)
{
unsigned char i;
unsigned int ret;
for(i=0;i<8;i++)
{
ADCSRA|=0X40; //启动转换
while(ADCSRA&0x40);
ret=ADCH;
ret<<=2;
ret+=(ADCL>>6);
adcbuf=ret;
}
ret=0;
for(i=0;i<8;i++)
{
ret+=adcbuf;
}
ret=ret/8;
return ret;
}
上面太笨了
//从AD口读入一个值
unsigned int GetADC(void)
{
unsigned int adc_value;
ADC = 0;
ADCSRA |= (1 << ADSC); //启动AD转换
del(10);
while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
//loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
ADCSRA |= (1 << ADIF); //写1清除标志位
adc_value = ADC; //读转换结果
return adc_value;
} |
|