陈家乐 发表于 2024-10-30 10:14:21

邮箱 发表于 2024-10-29 15:23


靴靴!!!!{:lol:}

梁工 发表于 2024-10-30 10:22:18

陈家乐 发表于 2024-10-30 10:13
有没有可能,老梁,我用的是左对齐,而您这种是右对齐呢

跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位再左移。

晓飛飛 发表于 2024-10-30 10:25:30

陈家乐 发表于 2024-10-30 10:12
你说我结果错,没有问题的,我跟STC例程里面的结果对过了的,没有错,只不过是我分别右移了4位吧,您这种写法 ...

((ADC_RES>>4)<<8)
这个语句先右移再左移理论上会让4位数据变为0,如果先左移8再右移4,那还能说得过去,既然结果是对的,那肯定是我有考虑不周的地方,我有时间了单独验证一下。

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

梁工 发表于 2024-10-30 08:22
跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位 ...

{:lol:}我才反应过来,受教了

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

晓飛飛 发表于 2024-10-30 08:25
((ADC_RES>>4)

其实为了数据的安全性,处理的保守一点还是挺好的,避免重蹈覆辙之前的错误

阿白凌坤 发表于 2024-11-9 09:03:24

为什么我用左对齐:ADC_Val = ((ADC_RES<<8)|ADC_RESL)>>4 (单片机型号STC8G1K08)出来的数据不对
接收←ADC_Result: 3296
                  电压转换结果:15.032V
右对齐数据就正常。

阿白凌坤 发表于 2024-11-9 09:04:30

右对齐结果正常:
接收←ADC_Result: 879
                  电压转换结果:4.009V

阿白凌坤 发表于 2024-11-9 09:50:31

已经找出问题所在了 ADC 转换数据分 10位 ADC 跟 12位 ADC   :10位 ADC 应该是 左对齐:ADC_Val = ((unsigend int)(ADC_RES << 8) | ADC_RESL)>> 6这样的结果就是 2 的 10 次方 1024
                                                                                             12位 ADC 应该是 左对齐:ADC_Val = ((unsigned int)(ADC_RES<< 8) | ADC_RESL) >> 4这样的结果就是 2 的 12 次方 4096
所以如果是 10 位 ADC 就是整体右移 6 位,本人新手如果分析不对还请各位师傅指正。

陈家乐 发表于 2024-11-9 10:19:59

阿白凌坤 发表于 2024-11-9 07:50
已经找出问题所在了 ADC 转换数据分 10位 ADC 跟 12位 ADC   :10位 ADC 应该是 左对齐:ADC_Val = ((unsig ...

你这个多少位精度的ADC和这个什么方式的对齐是没关系的,这个是分开讨论的

陈家乐 发表于 2024-11-9 10:20:46

阿白凌坤 发表于 2024-11-9 07:04
右对齐结果正常:
接收←ADC_Result: 879
                  电压转换结果:4.009V ...

其实就是啥呢,把十二位的还是十位的ADC转换值读出来并显示在串口中,这样子就行了
页: 1 [2] 3
查看完整版本: 对 ADC例程补充;如何读取左对齐的ADC结果?