对 ADC例程补充;如何读取左对齐的ADC结果?
基于 例程都是右对齐的格式,所以自己要写一个左对齐的ADC,读取16个通道的ADC值,所以就写了这么一个代码,串口1使用的是P36和P37习惯右对齐,左对齐感觉怪怪的 ADC_Val=((u16)((ADC_RES>>4)<<8)+(ADC_RESL>>4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然选择了左对齐,何苦再右移4位,而且,这样处理数据是错误的
正确应该是
ADC_Val = (ADC_RES<<8) | ADC_RESL; \\先得到完整的ADC值
ADC_Val >>= 4; \\再整体去处理数据得到右对齐的值
{:5_332:} 晓飛飛 发表于 2024-10-29 17:09
ADC_Val=((u16)((ADC_RES>>4)4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然 ...
最好是这样:
ADC_Val = ((unsigned int)ADC_RES<<8) | ADC_RESL; \\先得到完整的ADC值
不转成16位,ADC_RES<<8之后有可能变成0. 梁工 发表于 2024-10-29 17:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES
我只是照搬官方例程罢了,而且实测也没有问题。
soma 发表于 2024-10-29 15:06
习惯右对齐,左对齐感觉怪怪的
是的,右对齐是直接计算出16位数据就行,左对齐是要再右移4位
晓飛飛 发表于 2024-10-29 15:09
ADC_Val=((u16)((ADC_RES>>4)4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然 ...
你说我结果错,没有问题的,我跟STC例程里面的结果对过了的,没有错,只不过是我分别右移了4位吧,您这种写法比较规范,我应该学一下 梁工 发表于 2024-10-29 15:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES
有没有可能,老梁,我用的是左对齐,而您这种是右对齐呢{:lol:} 晓飛飛 发表于 2024-10-29 17:21
我只是照搬官方例程罢了,而且实测也没有问题。
{:victory:}有心了你们,靴靴你们