ADC左对齐与右对齐的数据读取问题

2019-04-15 13:38发布

现在对AD进行一下总结,以下为本人在百度知道里关于avr片内AD转换结果读取的问题的总结:
//////////////////////////////////////////////////////////////////////////////////////////////////
在网上看到AVR单片机片内10ADC在设置时设置为右对齐,其转换结果可以
读取的语句为:
resualt=int(ADCH)*256+ADCL;
右对齐的时候,10ADC的结果表示方式为ADCH:ADCLADCH10bit结果的高2位,ADCL10bit结果的低8位,如果要将ADC的结果存储到一个int型的变量中,那就需要先将ADCH的结果左移8位,再和ADCL的相加,左移8位等价于乘以256. 也可以将ADC转化为以256为权的数值表示,即:
resualt=int(ADCH)*256^1+ADCL*256^0;
这样就可以清楚地理解这个数字的含义了。
而对于左对齐,是在保证8位的AD转化精度的时候采用的。根本不是一般左对齐是没有的,如果有那是很难让人理解的。。。。。,只有没有用到这个功能,而不是一般是没有的。
当结果为左对齐的时候,ADCH存储的是10bit结果的高8位,ADCL的最高两位存储的是10bit结果的最低两位,如果以上面的例子说,右对齐的数值是0×0347,变成左对齐的时候就是0xD1C0,这时ADCH=0xD1ADCL=0xC0
如果对转换结果的要求不高,只读取8位数据时,就是用左对齐方式读取ADCH的数值,因为0×0347÷4=0x00D1
要想把左对齐的结果转换为整形数,那只能这样应用了:
result=(int)ADCH<<2+ADCL>>6,或者:
result=(int)ADCH*4+ADCL/64
这样就可以用这个方法处理其他位数的AD转化结果了。当然如果工作进度紧张,最好优先使用右对齐的方式,这样采集的数字在二进制转化的过程中不会出错,不会影响工作进度。如果你是初学者还是认认真真地把这两种方法都考虑一下。