AVR单片机 ADC左对齐与右对齐的数据读取问题

现在对AD进行一下总结,以下为本人在百度知道里关于avr片内AD转换结果读取的问题的总结:
//////////////////////////////////////////////////////////////////////////////////////////////////
在网上看到AVR单片机片内10位ADC在设置时设置为右对齐,其转换结果可以
读取的语句为:
resualt=int(ADCH)*256+ADCL;
右对齐的时候,10位ADC的结果表示方式为ADCH:ADCL,ADCH是10bit结果的高2位,ADCL是10bit结果的低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结果的最低两位,如果以上面的例子说,右对齐的数值是0x0347,变成左对齐的时候就是0xD1C0,这时ADCH=0xD1,ADCL=0xC0。
如果对转换结果的要求不高,只读取8位数据时,就是用左对齐方式读取ADCH的数值,因为0x0347÷4=0x00D1。
要想把左对齐的结果转换为整形数,那只能这样应用了:
result=(int)ADCH<<2+ADCL>>6,或者:
result=(int)ADCH*4+ADCL/64
这样就可以用这个方法处理其他位数的AD转化结果了。当然如果工作进度紧张,最好优先使用右对齐的方式,这样采集的数字在二进制转化的过程中不会出错,不会影响工作进度。如果你是初学者还是认认真真地把这两种方法都考虑一下。

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/252/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名