单片机与传感器通信,标准的MODBUS RTU协议。
到了数据解析部分,如何把4个字节的数据读出来,显示到屏幕呢?
单片机收到一帧数据,放入数组中,进行数据的拼凑,4个字节拼凑成一个32位的int型数据。然后再进行解析。
//浮点型数在计算机中的存储方式:浮点型数在计算机中的存储)
/*部分函数实现*/
//假如下边数组中收到的是传感器随机返回的一帧数据
//协议解释:第一个字为地址 第二个字节为功能码 第三个字节为连续几个字节的数据
//后边紧跟的是第三个字节长度的数据,最后两位位CRC校验
unsigned char uartRx_Buf[] = {0x01, 0x04 ,0x04 ,0x42 ,0x98 ,0x79, 0xC4, 0x4C, 0x10};
void Data_Toge(void)
{
signed short temp1,temp2;
signed int value;
temp1 = ((uartRx_Buf[3]<<8 ) | (uartRx_Buf[4]<<0));
temp2 = ((uartRx_Buf[5]<<8 ) | (uartRx_Buf[6]<<0));
value = ((temp1 <<16) | ( temp2<<0));
}
//16进制数转换成Float型数据,正负都
float HexToFloat(unsigned int number)
{
//第一步:取出符号位没有问题
signed sign = ((number & 0x80000000)? -1 : 1); //符号位
//第二步:计算指数
signed int exponent = ((number >> 23) & 0xff) - 127; //指数
//第三步:计算尾数
float mantissa = 1 + ((float)(number & 0x7fffff) / 0x7fffff); //尾数
return sign * mantissa *( pow(2, exponent));
}
更多推荐
16进制数转换成Float型数
发布评论