stm8单片机中AD转换读取数据时这个语句怎么解释 bws_dat = ((ADC_DRH<<2) + ADC_DRL ); 得到十位的数据

ADC_CR1|=0x01;//启动AD转换while(!(ADC_CSR&0x80));//等待AD转换完成bws_dat=((ADC_DRH<<2)+ADC_DRL)... ADC_CR1 |= 0x01; // 启动AD转换
while(!(ADC_CSR & 0x80)); // 等待AD转换完成
bws_dat = ((ADC_DRH<<2) + ADC_DRL ); //得到十位精度的数据
ADC_CSR=0x00;
return bws_dat;
展开
 我来答
一剑出血
高粉答主

2016-07-13 · 醉心答题,欢迎关注
知道大有可为答主
回答量:5.7万
采纳率:78%
帮助的人:1.8亿
展开全部
bws_dat = ((ADC_DRH<<2) + ADC_DRL ); //得到十位精度的数据

就是将ADC_DRH这个寄存器的内容左移两位(至于为什么只移两位,可以找相应的datasheet看一下。或许bit8和bit9在这个寄存器的最高二位),然后与ADC_DRL这个寄存器相加,总共得到10位数据。bws_dat应该是一个短整型或整型。
更多追问追答
追问
它的AD是10位的,读取数据时设置成左对齐,上面的语句忘了写强制转换成unsigned int型了, bws_dat=((unsigned int)ADC_DRH)<<2)+ADC_DRL;,但是左移两位还是不太理解
追答
“读取数据时设置成左对齐”
所以最高两位在ADC_DRH的高2位,所以只需要左移2位就会移到16位变量的bit[9:8]了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式