历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | PIC单片机的浮点数及其与十进制数之间的相互转换

发布者:MysticEssence 来源: eefocus关键字:PIC单片机  浮点数  十进制数  相互转换 手机看文章 扫描二维码
随时随地手机看文章

在我们设计的仪表中采用PIC系列单片机,碰到了浮点数的运算问题,查阅其有关资料发现,其浮点数的格式及其与十进制数之间的转换,与我们常用的MCS-51单片机所提供的三字节、四字节浮点数完全不同,本文将说明其浮点数的格式及其与十进制数之间的转换和程序设计步骤。


1 浮点数的格式


Microchip公司单片机所采用的浮点数格式是IEEE-754标准的变异型。32位浮点数格式为:


其中:×表示一位二进制数0或1;eb 为指数的偏差;S为浮点数的符号位,S=0为正数,S=1为负数;小数点“·”在符号位S的右边;BY0 BY1 BY2为尾数的小数部分。


应特别注意:


⑴ 浮点数隐含其整数部分为1。

⑵ 十进制数0 的浮点数表示为00H,00H, 00H, 00H。


2 浮点数与十进制数之间的相互转换


2.1 十进制数转换成浮点数


设:十进数为A,则2Z=A,Z= lnA/ln2,指数P=int(z);尾数部分X: X=A/2P, 其整数部分隐含为1(零除外),将其小数部分按原码格式化为二进制数,即为尾数的小数部分BY0 BY1 BY2。而指数偏差eb=P+7FH(其中的7FH 为指数的偏移量)。符号位S,视十进制数的正负而确定。


例如十进制数50.265化为32位规格化浮点数:A=50.265,则Z=ln50.265/ln2,P=int(Z),故P=5; X=A/2P=50.265/25=1.57078125,将0.57078125化为23位二进制小数,即是BY0 BY1 BY2,在最高位添上十进制数的符号位S(因十进制数为正数,故S=0);而eb=P+7FH,所以,十进制数50.265的32位规格化浮点数即为84H,49H,0FH,5CH。


2.2 浮点数转换为十进制数


设浮点数为 eb S.BY0 BY1 BY2。由于浮点数隐含尾数的整数为1,故尾数X的实际值为:


BY0 BY1 BY2;指数P=eb-7FH;故:十进制数


A=(-1)S×2P×X


例:32位规格化浮点数84H,49H,0FH,5CH转换为十进制数。


符号位S=0;指数P=84H-7FH,故P=5; 尾数的小数部分为49H,0FH,5CH左移一位,而尾数的整数部分隐含为1,故尾数X的实际值为:1.57078123;十进制数A=(-1)0×25×1.57078123,即A=50.265。


3 浮点数与十进制数相互转换的程序设计


3.1 浮点数转换为十进制数的程序设计


(1)检测浮点数是否为零;若为零,则十进制数整数部分和小数部分均为零。


(2)保存浮点数的符号位,将浮点数隐含的1置于浮点数的符号位,指数偏差eb加1,小数点移到原浮点数的符号位之前。


(3)判断指数偏差大于7FH否?若小于等于7FH,则该进制数整数部分为零,浮点数尾数部分右移n次(注:n=7FH-指数偏差eb), 即求得二进制小数部分。若大于7FH,则将小数点右移n’次(注:n’=指数偏差eb-7FH),即求得二进制整数部分和小数部分。


(4)将二进制整数部分转换为十进制整数 ;将二进制小数部分转换为十进制小数。至此,完成了浮点数到十进制数的转换。


3.2 十进制数转换为浮点数的程序设计


(1)检测十进制数是否为零,若为零,则浮点数置成00H,00H,00H,00H。


(2)保存十进制数的符号位,将十进制数的整数部分转换为二进制整数,将十进制数的小数部分转换为二进制小数(设二进制整数为三个字节,二进制小数为两个字节)。


(3)将浮点数的指数偏差eb置为7FH+23,检测二进制整数的最高位是否为1,不是,则将二进制整数和二进制小数联合左移,左移一次,指数偏差减1,直至二进制整数的最高位为1;隐含尾数整数的1,将二进制整数的最高位改为数的符号位。至此,指数偏差eb单元及原二进制整数的三个单元中的内容,即构成四字节浮点数。


最后应该指出,本文所述32位浮点数,精度相当于7位十进制数;32位浮点数运算程序在Microchip 公司提供的有关资料中均有,但是,在调试其浮点子程序时,发现0减0的结果为00H,80H, 00H,00H,而不是00H,00H,00H,00H,编程时应注意。


4 结语


本文中的十进制数与浮点数之间相互转换的程序设计,在智能化仪表的键盘置数及数据显示中,具有实用价值。这里提出了一种设计思路,没有复杂的算法,程序设计亦较简单,工作量较少,可利用Microchip公司提供的现成子程序实现十进制整数与二进制整数的相互转换,十进制小数与二进制小数的相互转换。


参考文献


1 Microchip公司CD-ROM盘中的应用笔记,1997(2)

2 单片机软件设计技术. 科学技术文献出社,1988.7 


关键字:PIC单片机  浮点数  十进制数  相互转换 引用地址:PIC单片机的浮点数及其与十进制数之间的相互转换

上一篇:PIC单片机在ICD做lcd显示时钟演示程序
下一篇:PIC16系列单片机与PC机串行通信的软硬件实现

推荐阅读

在编制程序是,遇到这么一个问题:这一段程序的输出,应该是 57H 53H 07H D0H但是,实际调试中输出的是53H 07H D0H,第一个字节57H丢失了。其实在此之前,我调试甲醛传感器的时候就发现,第一次发送命令无法对甲醛传感器失效,我天真的以为是传感器的问题,没有对我发的命令产生有效响应。但是,今天的现象表明,是单片机的串口没能将第一个字节发送...
台湾新竹-2019年10月17日-全球精品IP开发商円星科技(M31 Technology, 6643-TW)今天宣布,继高速接口IP MIPI M-PHY后,其所开发的Memory Compiler 与GPIO IP 也获德国认证机构SGS-TÜV颁发「ISO 26262车用安全最高等级ASIL-D Ready」认证,提供安全可靠的车用电子设计解决方案。ISO 26262被国际车界誉为当今「最先进的汽车安全标准」,并且成为全...
根据集邦咨询(TrendForce)显示器研究处初步统计2021年面板厂出货数量,中国大陆面板厂在显示器面板(Monitor)的市占率,将自今年的39%提升至52%;笔电面板市占率则由36%上升至39%。由此可知,即使2020下半年受三星显示(SDC)退出、宅经济兴起与政策性补助消费等因素交互影响,导致电视面板市场供不应求,仍无法改变大陆面板厂将产能由电视转进IT面板的计划...
在iPhone 13发布前,有说法是苹果考虑采用iPhone 12s的命名方式,一是数字“13”在西方国家不吉利,二是iPhone 13的升级幅度有限,12S更贴切。但最终证明部分人猜错了,实际上,有最新报道称,苹果已经彻底砍掉了“S”命名方式,未来都不会出现了。换言之,明年也不会有iPhone 13S,不出意外的话就是iPhone 14了。最核心的原因在于,带“S”并不利于营...

史海拾趣

问答坊 | AI 解惑

请高人指点一下为何316驱动(IGBT)信号被保护,无法输出?

请高人指点一下为何316驱动(IGBT)信号被保护,无法输出?我用了316来作IGBT的驱动,按照电路插完件,可是就是输出端不随输入端变化,总是-5V电压,测量FAULT电压为0,说明电路认为集电极过流而进行了保护,可是我已经把集电极和发射极短路了。为 ...…

查看全部问答∨

节能、高性能的3G-SDI解决方案

本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 是串行]数字接口,被用来传送无压缩的数字视频信号。在上世纪80年代,SDI得到了快速发展并对其标准作出了定义。3G-SDI中的3G是指SDI信号的数据传输率为3Gbit每秒。由于HDTV可以支持每秒30帧的 ...…

查看全部问答∨

各位高手,单片机和单片机通讯,不用RX tx 口线

各位高人:     问一下:有两个单片机通讯,A、B单片机,51系列,B单片机还要和pc机通讯,所以B单片机的RXD/TXD口线不能用来和A单片机通讯了,怎么办?A/B单片机用同一个电源和地 谢谢各位大哥帮忙…

查看全部问答∨

TI的8962开发板能移植Linux嘛?

开发板只有内部flash,够不够移植一个嵌入式Linux系统上去?…

查看全部问答∨

赛灵思:有台积电真好

Xilinx(赛灵思)于2010年10月27日在发表最新28nm FPGA技术。新技术采用堆栈硅晶互连,在一个芯片里封装了4个FPGA芯片,分别是逻辑、存储器、串行收发器以及处理组件,可以提供更多客户所需的 FPGA 资源,同时又能提供突破性的容量和带宽性能。该技 ...…

查看全部问答∨

温度传感器保护套管选材型号的说明

这是一些内容的说明,以图片方式下载便知道了…

查看全部问答∨

关于LM3S开发板的时钟分频问题

SysCtlClockSet(SYSCTL_SYSDIV_32 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ); 这个函数里时钟频率的选择,可以随便写的吗,还是板子上带的晶振是多少兆就得写多少兆 经过这样分频之后,是不是每50000个系统时钟节拍是1s? SysCtl ...…

查看全部问答∨

TI 新板子!!C2000系列的launchpad!超低价 附产品说明书,原理图,pcb图

dsp系列的launchpad!!! 才17美元!! 太强悍了。。。。。 购板子的最新进展请移步这里~~https://bbs.eeworld.com.cn/thread-342668-1-1.html 官方介绍 The C2000 Piccolo LaunchPad is an inexpensive evaluation platform designed to help ...…

查看全部问答∨

用MSP430的串口发数据好慢是怎么回事

我用两块MSP430F168做全双工异步通信 用ACLK波特率设置成了19200还是非常慢,这边发了过了十几秒那边才显示, 用8M的TX2,波特率设置成115200,传的是很快,目测同步但数据都是错的,,用示波器看了TX2发现时钟不稳定, 按说19200的波特率已经非 ...…

查看全部问答∨

C2000 ePWM模块中死区模式问题

Dead-Band Operating Modes中Active High Complementary,Active Low Complementary,Active High (AH),Active Low (AL)是什么意思,不大理解啊。。。 求高手指点!…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved