电脑(PC)通过串口向单片机发送浮点数(float、double)的方法 version1.0 maswellxiao 在实际应用中我们可能会遇到这样一个问题,PC机要向单片机发送一个浮点数,float类型、double类型也好。maswell我曾经做过AD转换并发送数据到MATLAB中做FFT、滤波器等数字信号处理。处理完毕以后maswell我遇到一个非常棘手的问题……MATLAB数据处理完毕以后得到的数据类型是小数类型,就算忽略后几位精度,最起码也是一个float数据类型的数,怎么把这个数发送到单片机呢? 经过几天的折腾。maswell我一不小心就实现PC通过串口向单片机发送浮点小数。下面把这种方法分享给大家。 首先我们需要一个预备知识。也就是float数据类型在单片机中的存储方式。 float数据类型总共占据32个位bit,其中第一个位为数据符号(Symbol,在下面简称为S)该位表示数据的正负性。接下来8个位是阶码(Expoent,下面简称为E),这8个位表示浮点数的小数点的位置。最后有23位的尾数(mantissa,M),这23个位表示数据。下面做个示意图 例如:十进制的数据N file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png 将之换成二进制表示 file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png 因此file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png 并由公式file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png得file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png 组合起来就是 S | | | | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png | file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png |
4bit一格隔开 因此十进制浮点小数N = 123.456在单片机里存储的数据为0x42F6E979
|