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