unsigned int ad_cat(void)//电压采集函数 { unsigned int t1,t2; ADCSRA = 0X00;//disable ADC ADMUX=0x00;//ref 左对齐 ADC0 ACSR = 0x80;//使能ADC可用,不用修改 ADCSRA|=BIT(ADEN); //ADC使能 ADCSRA|=BIT(ADSC); //开始转换 while(!(ADCSRA&(BIT(ADIF))));//ADIF置一,adc转换结束时,跳出循环 ADCSRA&=~BIT(ADIF);//清零 t1 = (unsigned int)ADCL; t2 = (unsigned int)ADCH; t2 = (t2<<8)+t1;//高位左移8位加上低位 return t2; } 解释其意思
时间: 2024-03-07 16:53:38 浏览: 111
这是一个电压采集函数,返回值为unsigned int类型,表示采集到的模拟电压值。该函数的具体实现如下:
1. ADCSRA = 0X00; //disable ADC,先将ADC关闭,避免出现意外的转换;
2. ADMUX = 0x00; //ref 左对齐 ADC0,设置ADC参考电压源为AVCC,ADC0为输入通道;
3. ACSR = 0x80; //使能ADC可用,不用修改;
4. ADCSRA |= BIT(ADEN); //ADC使能,打开ADC;
5. ADCSRA |= BIT(ADSC); //开始转换,启动ADC转换;
6. while(!(ADCSRA&(BIT(ADIF)))); //等待转换完成,当ADIF为1时跳出循环;
7. ADCSRA &= ~BIT(ADIF); //清零ADIF,表示完成转换;
8. t1 = (unsigned int)ADCL; //将低8位的转换结果保存到t1中;
9. t2 = (unsigned int)ADCH; //将高8位的转换结果保存到t2中;
10. t2 = (t2<<8)+t1; //将高位左移8位,与低位相加,得到完整的10位ADC转换结果;
11. return t2; //返回采集到的电压值。
该函数主要是为了完成ADC的模拟电压采集,首先将ADC关闭,然后配置ADC参考电压、输入通道等参数,启动ADC转换,等待转换完成,最后组合高位和低位的转换结果,返回采集到的模拟电压值。
相关问题
uchar Alcohol[] = {"Alcohol: mg/L"};//lcd第一行要显示的数组 uchar Set[] = {"Set : mg/L"};//lcd第二行要显示的数组 uchar ten_1, ten_2, ten_3,ten_4;//个十百千位要显示的数字 uint adc_data, adc_l, adc_h; void get_AD(void)//ADC初始化 { ADMUX = 0x40;//ADC0, ADCSRA = 0x00;//关掉ADC ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADFR) | 0x07;//128分频,连续转换 s_ms(500);//延时 adc_l = ADCL; adc_h = ADCH; adc_data = adc_h << 8 | adc_l; adc_data = adc_data >> 1; adc_data -= 35; } unsigned int ad_cat(void)//电压采集函数 { unsigned int t1,t2; ADCSRA = 0X00;//disable ADC ADMUX=0x00;//ref 左对齐 ADC0 ACSR = 0x80;//使能ADC可用,不用修改 ADCSRA|=BIT(ADEN); //ADC使能 ADCSRA|=BIT(ADSC); //开始转换 while(!(ADCSRA&(BIT(ADIF))));//ADIF置一,adc转换结束时,跳出循环 ADCSRA&=~BIT(ADIF);//清零 t1 = (unsigned int)ADCL; t2 = (unsigned int)ADCH; t2 = (t2<<8)+t1;//高位左移8位加上低位 return t2; }解释代码并给出注释
```
uchar Alcohol[] = {"Alcohol: mg/L"}; //LCD第一行要显示的数组
uchar Set[] = {"Set : mg/L"}; //LCD第二行要显示的数组
uchar ten_1, ten_2, ten_3, ten_4; //个十百千位要显示的数字
uint adc_data, adc_l, adc_h; //ADC采集的数据
void get_AD(void) //ADC初始化函数
{
ADMUX = 0x40; //设置ADC通道为ADC0
ADCSRA = 0x00; //关闭ADC
ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADFR) | 0x07; //打开ADC,设置128分频,连续转换
s_ms(500); //延时,等待ADC稳定
adc_l = ADCL; //读取ADC低8位
adc_h = ADCH; //读取ADC高8位
adc_data = adc_h << 8 | adc_l; //将ADC高8位和低8位组合成16位数据
adc_data = adc_data >> 1; //右移1位,相当于除以2,得到真正的ADC采集值
adc_data -= 35; //将ADC采集值减去35,得到真实电压值
}
unsigned int ad_cat(void) //电压采集函数
{
unsigned int t1, t2;
ADCSRA = 0X00; //关闭ADC
ADMUX = 0x00; //设置ADC通道为ADC0,左对齐
ACSR = 0x80; //使能ADC可用,不用修改
ADCSRA |= BIT(ADEN); //使能ADC
ADCSRA |= BIT(ADSC); //开始转换
while(!(ADCSRA&(BIT(ADIF)))); //等待ADC转换完成,ADIF置1
ADCSRA &= ~BIT(ADIF); //清除ADIF标志位
t1 = (unsigned int)ADCL; //读取ADC低8位
t2 = (unsigned int)ADCH; //读取ADC高8位
t2 = (t2 << 8) + t1; //将ADC高8位和低8位组合成16位数据
return t2; //返回电压值
}
```
以上是代码的注释,主要是对变量和函数的作用进行了说明。这段代码主要是关于ADC的初始化和电压采集函数的实现。在初始化函数中,将ADC的通道、分频器、连续转换等参数进行设置,然后延时等待ADC稳定,读取ADC采集数据,计算得到真实的电压值。在电压采集函数中,通过设置ADC的通道和使能ADC,开始转换并等待转换结束,最终读取ADC数据并计算得到电压值。这段代码可能是用于检测酒精含量的电路中的一部分。
阅读全文