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

现在对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转化结果了。当然如果工作进度紧张,最好优先使用右对齐的方式,这样采集的数字在二进制转化的过程中不会出错,不会影响工作进度。如果你是初学者还是认认真真地把这两种方法都考虑一下。


  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值