串口通信中的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的存储方式如下图所示:

串口通信中的int float型数据的处理和发送_第1张图片

    R32.24和R64.53的存储方式都是用科学计数法来存储数据的

你可能感兴趣的:(c语言点滴)