陈家乐 发表于 2024-10-29 14:29:22

对 ADC例程补充;如何读取左对齐的ADC结果?

基于 例程都是右对齐的格式,所以自己要写一个左对齐的ADC,读取16个通道的ADC值,所以就写了这么一个代码,串口1使用的是P36和P37

soma 发表于 2024-10-29 17:06:20

习惯右对齐,左对齐感觉怪怪的

晓飛飛 发表于 2024-10-29 17:09:15

ADC_Val=((u16)((ADC_RES>>4)<<8)+(ADC_RESL>>4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然选择了左对齐,何苦再右移4位,而且,这样处理数据是错误的
正确应该是
ADC_Val = (ADC_RES<<8) | ADC_RESL;   \\先得到完整的ADC值
ADC_Val >>= 4; \\再整体去处理数据得到右对齐的值


邮箱 发表于 2024-10-29 17:23:55

{:5_332:}

梁工 发表于 2024-10-29 17:47:09

晓飛飛 发表于 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 19:21:03

梁工 发表于 2024-10-29 17:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES

我只是照搬官方例程罢了,而且实测也没有问题。


陈家乐 发表于 2024-10-30 10:10:55

soma 发表于 2024-10-29 15:06
习惯右对齐,左对齐感觉怪怪的

是的,右对齐是直接计算出16位数据就行,左对齐是要再右移4位

陈家乐 发表于 2024-10-30 10:12:05

晓飛飛 发表于 2024-10-29 15:09
ADC_Val=((u16)((ADC_RES>>4)4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然 ...

你说我结果错,没有问题的,我跟STC例程里面的结果对过了的,没有错,只不过是我分别右移了4位吧,您这种写法比较规范,我应该学一下

陈家乐 发表于 2024-10-30 10:13:08

梁工 发表于 2024-10-29 15:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES

有没有可能,老梁,我用的是左对齐,而您这种是右对齐呢{:lol:}

陈家乐 发表于 2024-10-30 10:13:41

晓飛飛 发表于 2024-10-29 17:21
我只是照搬官方例程罢了,而且实测也没有问题。

{:victory:}有心了你们,靴靴你们
页: [1] 2 3
查看完整版本: 对 ADC例程补充;如何读取左对齐的ADC结果?