11问答网
所有问题
我使用的单片机AD采集的数据储存到寄存器中的是u16(无符号16位),但是在运算中是float,怎么解决类型转换
我使用的单片机AD采集的数据储存到寄存器中的是u16(无符号16位),但是在运算中是float的怎么解决类型转换以及存储问题
举报该问题
推荐答案 2018-03-08
“单片机AD采集的数据储存到寄存器中的是u16(无符号16位)”
这个是指采样得到的数字量读数,要换算后才能得到实际的模拟值。例如16位ADC的采样范围是0~3.3V,那么每个bit对应于50μV。当读数为0x0123、即十进制的291时,代表此时采样电压为14.55mV左右。
“在运算中是float的”
这要看你运算中取用数据的要求。假如你运算时直接要以mV或μV为单位进行运算,例如上面的例子,你就需要将采集的u16值0x0123转换为float型代表的14.55。这个转换过程就需要你编写函数进行转换,而不是直接强转的。
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://11.wendadaohang.com/zd/F4vqS7S727M777vSPv7.html
其他回答
第1个回答 推荐于2018-03-10
直接存u16型原始数据即可,显示时再换算
如AD是16位,基准电压是2.5伏,所测数字量是val,则计算结果是:
V=2.5*val/65536
无需类型转换,直接将V定义成float型即可
当然你可以将val强制转换成float型
V=2.5*(float)val/65536
本回答被网友采纳
第2个回答 2018-03-07
如果运算对象有float类型,U16会自动转换的,不用处理
追答
这是C语言的运算规则,你回头看看教材就会想起来的
第3个回答 2018-03-07
直接定义一个float的变量赋值就行了
第4个回答 2018-03-10
使用强制类型转化,如:
int a = 3490593;
float b = (float)a;
1
2
下一页
相似回答
单片机中
u8类型
u16
类型是如何区别
答:
u8是unsigned char,
u16
是unsigned short。u8,u16是C语言数据类型,分别代表8位,
16位
一个字节是8位,所以u8是1个字节,u16是2个字节。例如:void TIM3_Int_Init(
u16
arr,u16 psc){ //do something...}
大家正在搜
51单片机的通用寄存器
单片机寄存器的理解
51单片机常用寄存器
单片机的寄存器
单片机工作寄存器详解
单片机pcon寄存器
51单片机寄存器说明
51单片机特殊寄存器
51单片机psw寄存器
相关问题
ad转换后数据存到哪个寄存器中
为什么我将ADC数据寄存器赋值给变量没用
单片机两个AD共用一个寄存器怎么设置
ATNEGA16单片机的AD转化怎么操作,都是操作那几个寄存...
51单片机AD读取外界数据,存储在单片机那里
89s51单片机中,唯一一个用户可使用的16位寄存器是什么
在51单片机的特殊功能寄存器中,哪几个是16位的,它们有什么...
用单片机ad采样后存在寄存器中的值是个二进制的,怎么将它转换...