打印
[技术问答]

n76e003关于ADC的10位和12位的问题

[复制链接]
1265|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
N76E003的分辨率是12位,
value= (ADCRH<<4) + ADCRL;//得到ADC转换值
ADCRH是高8位,这个例文件向左移4位+ADCRL的低4位,这个是8位分辨率还是10位,如果要使用12位是不是,直接ADCRH+ADCRL就可以。

使用特权

评论回复
沙发
zhuotuzi| | 2020-3-15 16:07 | 只看该作者
感觉不科学啊。我看看手册。

使用特权

评论回复
板凳
zhuotuzi| | 2020-3-15 16:10 | 只看该作者

使用特权

评论回复
地板
zhuotuzi| | 2020-3-15 16:11 | 只看该作者
ADCRH是8位的,如果左移4位,高4位不会溢出吗?我觉得会,我觉得应该先定义一个16BIT的数据,比如val=ADCRH;
val<<=4;
val=val|ADCRL;

使用特权

评论回复
5
zhuotuzi| | 2020-3-15 16:15 | 只看该作者
不知道我理解的,楼主认同不。
或者加个强制转换符号。。。
value= (ADCRH<<4) + ADCRL;
不过如果value是16位的int类型,而后面的因为是读寄存器来的,所以我猜可能默认会是作为16BIT的int类型处理。

使用特权

评论回复
6
xixi2017| | 2020-3-15 16:19 | 只看该作者
没有定义的变量,而是直接从寄存器读的,以被赋值类型作为自己类型,所以默认这里编译器设定为16BIT数据,

使用特权

评论回复
7
xixi2017| | 2020-3-15 16:20 | 只看该作者
所以这么做应该是可以的,如果为了看起来更明白,可以按照上面回复的方法,分步实施,就OK了。

使用特权

评论回复
8
天灵灵地灵灵| | 2020-3-15 18:17 | 只看该作者
值得思考。

使用特权

评论回复
9
blust5| | 2020-3-15 19:13 | 只看该作者
高八位放H,低四位放L,然后高八位左移4位再加上低四位,没问题。
不过有个坛友说的溢出问题,需要验证下会不会发生。

使用特权

评论回复
10
yunxiang521|  楼主 | 2020-3-15 19:19 | 只看该作者
官方文件里说是高8位+低4位=12位的分辨率,如果是左移4位,高+低是8位的分辨率还是10位的分辨率呢,左移溢出应该会吧。

使用特权

评论回复
11
734774645| | 2020-3-15 19:27 | 只看该作者
yunxiang521 发表于 2020-3-15 19:19
官方文件里说是高8位+低4位=12位的分辨率,如果是左移4位,高+低是8位的分辨率还是10位的分辨率呢,左移溢 ...

应该不会溢出。如果怕溢出,可以分步执行。
高8位左移后,腾出来低4位给低位寄存器的值。这样就组合成了12BIT。

使用特权

评论回复
12
wahahaheihei| | 2020-3-15 21:24 | 只看该作者
分步执行是最好的方法

使用特权

评论回复
13
wahahaheihei| | 2020-3-15 21:24 | 只看该作者
避免理解上的歧义。

使用特权

评论回复
14
jasontu| | 2020-3-16 09:16 | 只看该作者
value是16 bit的变数

使用特权

评论回复
15
hjl2832| | 2020-3-17 12:42 | 只看该作者
    变量不管怎么说都是16位的没变,变的只是H和L由8位合并成一个16位的数,平时像STM32 等,我们选H左移8位后与L进行或操作转换成一个16位的数。它的描述里,只不过是将H左移4位,这时,H里8位数据的低4位覆盖L寄存器里8位数据的高4位,组合出来是12位的有效数,因计算机只有8位、16位、32位数的格式,所以12位数实际占用的空间还是16位的。
    不存在溢出说法。只不过是一个数据类型的计算,将2个8位数合并转换成一个16位的数。

使用特权

评论回复
16
hjl2832| | 2020-3-17 12:46 | 只看该作者
如果像STM32等其它单片机,数据对齐可选左对齐或右对齐,这时,左对齐模式,高8位是有效数,低8位的低4位是无效数,刚好与76E003中的表示相反,所以为了得到真实的12位有效数,必须高8位左移4位的方式与低8位组合,以高8位的低4位替换低8位的高4位,得到一个真实的12位数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

100

帖子

0

粉丝