1. 问题的提出
笔者在系统开发中采用RS485实现单片机与外围设备的通信,通信采用通用串行接口协议(USS),按照串行总线的主从通讯原理来确定访问的方法。USS规定了一套严格的通信规则,关于浮点数参数值,USS规定采用IEEE-754格式进行传送。例如,浮点数50.0,在通信中传送的是它的IEEE-754格式,即4字节的十六进制424800H.因此,单片机的C程序,在发送或接收外围设各的参数值时,需要解决如何实现浮点数与IEEE格式转换的问题。
2.IEEE浮点数的格式
在计算机中,浮点数的存储均采用4字节的IEEE-754格式。例如,浮点数50.0的IEEE表示形式如下:二进制:
其中,最高位表示符号,"1"表示负,"0"表示正;第23~30位表示阶码。注意:阶码是以2为底的指数再加上偏移量127.第0~22位是尾数部分。尾数的整数部分永远为1,因此不予保存,但它是隐含存在的。一个浮点数计算式为:
例如,前面绘出的浮点数的表示形式中,s=0,n=132,m=(1/2+0/4+0/8+1/16+0/32+……),则计算结果为50.0.
3.浮点数与IEEE格式转换