在我们设计的仪表中采用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单片机在ICD做lcd显示时钟演示程序
下一篇:PIC16系列单片机与PC机串行通信的软硬件实现
推荐阅读
史海拾趣
面对激烈的市场竞争和不断变化的市场需求,Gems Sensors & Controls公司始终保持着敏锐的洞察力和灵活的应变能力。公司不断调整和优化产品结构,提升产品质量和服务水平,以更好地满足客户的需求。同时,Gems还积极开拓新的市场领域和应用场景,不断拓展自身的业务范围和市场份额。这些努力使得Gems在电子行业中持续保持领先地位,并实现了持续稳定的增长。
为了进一步扩大市场份额和品牌影响力,DURACELL公司积极寻求品牌授权合作。通过在全球范围内与相关企业进行合作开发,DURACELL公司成功将品牌延伸到更多领域和地区。这种合作模式不仅为DURACELL公司带来了更多的市场机会,也推动了整个电池行业的发展。
在发展过程中,格瑞宝始终秉持开放合作的理念,积极寻求与行业内外的合作伙伴建立长期稳定的合作关系。例如,公司与唯样商城等元器件线上平台达成战略合作,成为其代理商之一。这一合作不仅进一步扩充了格瑞宝的产品线,也为广大客户提供了更多的产品选择和服务支持。通过合作与共赢的模式,格瑞宝不断拓宽业务边界,提升市场竞争力,实现了更快速的发展。
CINCH公司深知人才是企业发展的核心竞争力。因此,公司高度重视人才培养和团队建设。公司设立了完善的培训体系,为员工提供了广阔的晋升空间和发展机会。同时,公司还积极引进优秀人才,打造了一支高素质、专业化的团队。这支团队在公司的各项业务发展中发挥了重要作用,为公司的长远发展奠定了坚实基础。
Davies Molding公司在发展过程中,始终注重市场布局与拓展。公司不仅在美国中西部建立了稳固的市场地位,还积极开拓国际市场,将产品出口到全球多个国家和地区。通过与全球客户的合作,Davies Molding公司不仅提升了品牌影响力,还获得了更多的发展机遇。
在品质和品牌建设的基础上,德尔创开始积极拓展市场。公司首先在国内市场进行了深入布局,通过优化销售网络和提供优质的售后服务,逐渐赢得了客户的信任和支持。同时,德尔创也积极寻求国际合作机会,与多家国际知名企业建立了长期稳定的合作关系。这些合作不仅为公司带来了更多的订单和市场份额,还促进了德尔创在技术和管理方面的进一步提升。
请高人指点一下为何316驱动(IGBT)信号被保护,无法输出? 请高人指点一下为何316驱动(IGBT)信号被保护,无法输出?我用了316来作IGBT的驱动,按照电路插完件,可是就是输出端不随输入端变化,总是-5V电压,测量FAULT电压为0,说明电路认为集电极过流而进行了保护,可是我已经把集电极和发射极短路了。为 ...… 查看全部问答∨ |
本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 是串行]数字接口,被用来传送无压缩的数字视频信号。在上世纪80年代,SDI得到了快速发展并对其标准作出了定义。3G-SDI中的3G是指SDI信号的数据传输率为3Gbit每秒。由于HDTV可以支持每秒30帧的 ...… 查看全部问答∨ |
各位高人: 问一下:有两个单片机通讯,A、B单片机,51系列,B单片机还要和pc机通讯,所以B单片机的RXD/TXD口线不能用来和A单片机通讯了,怎么办?A/B单片机用同一个电源和地 谢谢各位大哥帮忙… 查看全部问答∨ |
|
Xilinx(赛灵思)于2010年10月27日在发表最新28nm FPGA技术。新技术采用堆栈硅晶互连,在一个芯片里封装了4个FPGA芯片,分别是逻辑、存储器、串行收发器以及处理组件,可以提供更多客户所需的 FPGA 资源,同时又能提供突破性的容量和带宽性能。该技 ...… 查看全部问答∨ |
|
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 ...… 查看全部问答∨ |
我用两块MSP430F168做全双工异步通信 用ACLK波特率设置成了19200还是非常慢,这边发了过了十几秒那边才显示, 用8M的TX2,波特率设置成115200,传的是很快,目测同步但数据都是错的,,用示波器看了TX2发现时钟不稳定, 按说19200的波特率已经非 ...… 查看全部问答∨ |
Dead-Band Operating Modes中Active High Complementary,Active Low Complementary,Active High (AH),Active Low (AL)是什么意思,不大理解啊。。。 求高手指点!… 查看全部问答∨ |