找回密码
 立即注册
查看: 888|回复: 28

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-29 14:29:22 | 显示全部楼层 |阅读模式
基于 例程都是右对齐的格式,所以自己要写一个左对齐的ADC,读取16个通道的ADC值,所以就写了这么一个代码,串口1使用的是P36和P37

普通ADC转换.zip

226.16 KB, 下载次数: 81

用尽STC单片机的资源是我的梦想
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-05-01 09:54:52
已绑定手机

19

主题

3190

回帖

4866

积分

论坛元老

积分
4866
发表于 2024-10-29 17:06:20 来自手机 | 显示全部楼层
习惯右对齐,左对齐感觉怪怪的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-29 17:09:15 | 显示全部楼层
ADC_Val=((u16)((ADC_RES>>4)<<8)+(ADC_RESL>>4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然选择了左对齐,何苦再右移4位,而且,这样处理数据是错误的
正确应该是
  1. ADC_Val = (ADC_RES<<8) | ADC_RESL;   \\先得到完整的ADC值
  2. ADC_Val >>= 4; \\再整体去处理数据得到右对齐的值
复制代码


点评

最好是这样: ADC_Val = ((unsigned int)ADC_RES  详情 回复 发表于 2024-10-29 17:47
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-10-29 17:23:55 来自手机 | 显示全部楼层
{:5_332:}
REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 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.

点评

我只是照搬官方例程罢了,而且实测也没有问题。 [attachimg]61835[/attachimg]  详情 回复 发表于 2024-10-29 19:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-10-29 19:21:03 | 显示全部楼层
梁*** 发表于 2024-10-29 17:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES

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

睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 10:10:55 | 显示全部楼层
so*** 发表于 2024-10-29 15:06
习惯右对齐,左对齐感觉怪怪的

是的,右对齐是直接计算出16位数据就行,左对齐是要再右移4位
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 10:12:05 | 显示全部楼层
晓*** 发表于 2024-10-29 15:09
ADC_Val=((u16)((ADC_RES>>4)4));//采用左对齐模式,读出ADC转换值
上面这句是你的代码,我不理解的是,既然 ...

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

点评

((ADC_RES>>4)  详情 回复 发表于 2024-10-30 10:25
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 10:13:08 | 显示全部楼层
梁*** 发表于 2024-10-29 15:47
最好是这样:
ADC_Val = ((unsigned int)ADC_RES

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

点评

跟adc对齐没关系,对一个8位的寄存器左移8位,有可能会全部移走了变成0,为了可靠,我会强转为无符号16位再左移。  详情 回复 发表于 2024-10-30 10:22
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:402
  • 最近打卡:2025-05-01 11:09:19
已绑定手机

51

主题

138

回帖

1494

积分

金牌会员

积分
1494
发表于 2024-10-30 10:13:41 | 显示全部楼层
晓*** 发表于 2024-10-29 17:21
我只是照搬官方例程罢了,而且实测也没有问题。

有心了你们,靴靴你们
用尽STC单片机的资源是我的梦想
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 00:15 , Processed in 0.134749 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表