串口通信中的int float型数据的处理和发送
在做下位机通信时往往会用到串口,包括下位机将数据传输给上位机,或者是下位机与下位机之间进行数据传输,这时候就会遇到发送数据的问题,单片机通过串口发送数据时往往是一次一个字节(8位),如果传输char(8位)型数据则很好办,只需要直接发送就可以了,但是在发送int型数据和float型数据时就会稍微有些复杂。
下面就以常用的8位单片机89c51为例来进行说明。
当发送int型或long型数据时还比较简单,一个int型数据是16位,long是32位,把int型/long型数据变成2/4个char型数据发送出去就可以了,程序如下
void long_char(unsigned long l,unsigned char *s)
{
*s = l>>24;
*(s+1) = l>>16;
*(s+2) = l>>8;
*(s+3) = l;
}
在串口助手上就可以接收到相应的long型数据了。
当发送float型数据时稍微有些复杂。下面简单介绍下float型数据在内存中的存储方式(double类似,以下部分参考了别人的博客)。
float遵从的是IEEE R32.24 在存储中都分为三个部分:
1.符号位(Sign) : 0代表正,1代表为负
2.指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
3.尾数部分(Mantissa):尾数部分
float的存储方式如下图所示ÿ
赞 (0)