980578873 发表于 2023-6-13 15:52:00

ADC_RES左移8位后等于多少了

各位大佬,存储ADC高8位数据的寄存器ADC_RES左移8位后等于多少了?谢谢。

kksk 发表于 2023-6-13 16:06:10

左移8位,在数学上与乘以256相同



例如12位ADC的结果为0110 1111 0011(0x6F3,1779),则ADC_RES为0000 0110(0x06,6),ADC_RESL为1111 0011(0xF3,243)。ADC_RES左移8位后为0000 0110 0000 0000(0x600,1536),加上ADC_RESL后得到结果0000 0110 1111 0011。

980578873 发表于 2023-6-13 17:23:28

kksk 发表于 2023-6-13 16:06
左移8位,在数学上与乘以256相同




我没理解您的意思,ADC_RES不是8位的寄存器吗?你左移8位后怎么变成16位的数据寄存器了?

kksk 发表于 2023-6-13 18:12:20

980578873 发表于 2023-6-13 17:23
我没理解您的意思,ADC_RES不是8位的寄存器吗?你左移8位后怎么变成16位的数据寄存器了? ...

这里用的是<<而非<<=,左移后临时放在内存中备用,ADC_RES原始值不变。

980578873 发表于 2023-6-14 14:10:08

kksk 发表于 2023-6-13 18:12
这里用的是

我还是不明白,假如ADC_RES为0000 0110,ADC_RES<<8 后为:0000 0110 0000 0000,怎么变为16位数了?ADC_RES不是8位的寄存器吗?

WHX 发表于 2023-6-14 17:08:04

980578873 发表于 2023-6-14 14:10
我还是不明白,假如ADC_RES为0000 0110,ADC_RES

你的adc_val定义的是16位的哦,它是一个16位的临时缓存;ADC_RES确实是8位的,你把ADC_RES的值左移8位后是转存在adc_val里面了,那就是0000 0110 0000 0000了,但是原来的ADC_RES里面的数据还是原来的0000 0110。
页: [1]
查看完整版本: ADC_RES左移8位后等于多少了