PIC单片机的浮点数及其与十进制数之间的相互转换

发布者:MysticEssence最新更新时间:2019-10-17 来源: 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机串行通信的软硬件实现

推荐阅读最新更新时间:2024-10-30 11:21

如何处理ARM体系下浮点数Middle-Endian问题
  随着嵌入式微处理器芯片性能的日益提高,嵌入式设备也得到了广泛的应用。随着应用的扩展,嵌入式软件开发也呈现出功能多样化、平台多样化、体系结构多样化的特点。   由于可移植性好,相当一部分嵌入式软件都是用C/C++语言开发的,而C/C++语言编写的程序中数据存储字节顺序是与编译平台所用的CPU相关的,所以嵌入式软件移植过程中,数据存储字节顺序是需要重点处理的地方。   在嵌入式GIS软件从x86体系结构下移植到ARM体系结构的过程中,遇到了浮点数据存储字节顺序的问题。该问题既不是Big-Endian,也不是Little-Endian,而是Middle-Endian字节顺序。本文先介绍该嵌入式GIS软件开发平台和运行平台,再
[单片机]
如何处理ARM体系下<font color='red'>浮点数</font>Middle-Endian问题
一种基于PIC单片机的便携式磁记忆检测仪
   引言   金属构件和零部件发生损坏的主要原因,是各种微观和宏观机械应力集中导致疲劳失效,其基本特征表现为材料在低于静强度极限的交变应力持续作用下,生成多种类型的微观内部缺陷,并逐渐演化为宏观裂纹,裂纹扩展最终导致结构破坏。因此,进行疲劳分析,有效评价应力变形状况,测定未来裂缝发展的位置、大小和方向,成为评价金属零部件与构件结构强度和可靠性的一个重要依据。为了及时准确的找出最大机械应力变形区域,20世纪90年代后期,以杜波夫为代表的俄罗斯学者率先提出一种崭新的诊断技术—金属磁记忆检测。本文采用PIC单片机,设计了高性价比的便携式磁记忆检测仪,具有低成本、低功耗和快速检测等特点,可以满足各种场合,特别是难以到达部位的应力集中区
[模拟电子]
PIC单片机对烧录器电路的控制设计
有人问:IC烧录能不能也作一个教学呢? 木村豆桃哉在想。..用LEAPER-48万用烧录器 1.把手往下扳 2.把IC放上去 3.关上把手 4.选择IC厂牌/编号 5.载入HEX档 6.按下烧录 7.等PASS出现就好了 为什么要教学呢??? 所以,应该是没有万用烧录器的话要怎麽办呢?所以木村豆桃哉决定要来试试看,那个烧录器的电路是真还是假。如果不能用的话,不是发佈了错误讯息害人了吗? 但是又想。..有万用烧录器可以用,为什麽要再做一个烧录器呢?超级矛盾~ 好奇嘛,做了一个试试看呗。.. 上网看了原版的线路图。..头都晕了 @_@ 原图烧12F629还要修改。.. 再找找其他简单一点的图吧 在网路上找到一个
[单片机]
<font color='red'>PIC单片机</font>对烧录器电路的控制设计
PIC单片机的查表程序设计
PIC的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据放入W返回到主程序。下面程序以F10放表头地址。 MOVLW  TABLE     ;表头地址→F10 MOVWF  10 ┋ MOVLW  1        ;1→W,准备取“1”的线段值 ADDWF  10,1      ;F10+W =“1”的数据地址 CALL  CONVERT MOVWF  6        ;线段值置到B口,点亮LED ┋ CONVERT MOVWF  2        ;W→PC TABLE RETLW  0
[单片机]
<font color='red'>PIC单片机</font>的查表程序设计
PIC单片机C语言延时程序和循环子程序
很多朋友说C中不能精确控制延时时间,不能象汇编那样直观。 其实不然,对延时函数深入了解一下就能设计出一个理想的框价出来。 一般的我们都用 for(x=100;--x;){;}此句等同与x=100;while(--x){;}; 或for(x=0;x 100;x++){;} 来写一个延时函数。 在这里要特别注意:X=100,并不表示只运行100个指令时间就跳出循环。 可以看看编译后的汇编: x=100;while(--x){;} 汇编后: movlw 100 bcf 3,5 bcf 3,6 movwf_delay l2 decfsz _delay goto l2 return 从代码可以看出总的
[单片机]
PIC单片机控制8位流水灯C语言程序
/***************************************************** *** 功能:8位流水灯 *** 实验内容:本实验是用二进制写的程序 *****************************************************/ #include pic.h //包含单片机内部资源预定义 __CONFIG(0xFF32); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 void delay(); //delay函数申明 /*******************************
[单片机]
PIC单片机的抗干扰能力强还是AVR单片机的强?
单片机的抗干扰性能历来为大家所重视,现在市面上的单片机就我所接触过的,就有十家左右了,韩国的三星和现代;日本的三菱,日立,东芝,富士通,NEC;台湾的EMC,松汉,麦肯特,合泰;美国的摩托罗拉,国半的cop8系列,microchip系列,TI的msp430系列,AVR系列,51系列,欧洲意法半导体的ST系列。。。。。。 这些单片机的抗干扰性能大多数鄙人亲自测试过,所用机器是上海三基出的两种高频脉冲干扰仪,一种是欧洲采用的标准,一种是日本采用的标准;日本的标准歉咂德龀辶⒊觯龀蹇矶却?0ns到250ns可调,欧洲采用的标准是脉冲间歇(间歇时间和发出时间可调)发出,脉宽也是从50ns到250ns可调;我们国家采用的是欧洲标准。
[单片机]
数控电位器与PIC单片机的接口技术
1x9268器件描述 1X9268是Xicor公司生产的,把2个E2POT数控电位器集成在单芯片的CMOS集成电路上的一种数控电位器。它包含两个电阻阵列,每个电阻阵列包含255个电阻单元,在每个单元之间和二个端点都有可以被滑动单元访问的抽头点。滑动单元在阵列中的位置,由用户通过二线串行总线接口控制。每个电阻阵列,与1个滑动端计数寄存器(WCR)和4个8位数据寄存器(R0~R3)联系在一起,这4个数据寄存器可以由用户直接写入或读出。滑动端计数寄存器的内容,控制滑动端在电阻阵列中的位置。 数据寄存器可以由用户读出和写入。数据寄存器的内容可以传输到滑动端计数寄存器,以设置滑动端的位置。当前滑动端的位置可以被传输到与它相联系的任一个
[应用]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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