原来用汇编编的,直接调用子程序,对子程序没有仔细分析过。现在公司要求改用C语言。网上都是汇编的,C要付款。如有请发邮箱:[email protected]。
我需要把测量的电压、电流AD值转换为4字节浮点数(IEEE75格式)再进行加减乘除等运算。最好有16进制转浮点数(IEEE75)和浮点数(IEEE75)转16进制。
即把IEEE754格式的数值进行四则运算C51程序。
以前学的是汇编,对C 不是很熟悉。求各位帮帮忙!
我们的精度较高,AD24位。原来用汇编先把数据转换为IEEE754再进行计算。这个设备原来被人开发的。现在要添加功能。公司要求用C编程。方便以后移植。
另外能不能把Q格式的运算子程序、16进制与Q格式相互转换的程序发一份给我参考。谢谢。
如有请发邮箱:[email protected]。
或许我孤陋寡闻,但据我所知AD转换精度有8位、10位、12位的都很常见,16位的就罕见了。似乎没有听说过24位的?
子程序直接用C语言编不见得就能“便于移植”,用汇编语言编写也不见得就不“便于移植”。须知现在流行的C语言所带的标准子程序库,开发时大都是用汇编语言的,编译好后只把目标码封装到库中提供给你用(汇编清单并不给你),同时把各个子程序的“原型”写成一个“头文件”给你,使你可以用C语言调用它,就可以了。
所谓Q格式,并非一种什么特殊的格式,通常也没有什么专门的“转换程序”。所谓Q格式,不过就是用整数形式(如long型、int型、unsigned long型、unsigned int型)直接处理,只不过是把它看成“定点小数”,由程序员自己在上下文中掌握小数点位置。
例如一个int型的变量,如果我们把它看做有15位小数的量(我们称作Q15格式)他就可以代表从-1到略小于+1范围的小数,精度可以达到2的15次方分之一。
下面这个链接中,我的回答里,对Q格式做了略细的说明。限于篇幅这里不重复了。
http://zhidao.baidu.com/question/351938353.html?oldq=1
谢谢haolizhong4924 ,我们的AD转换是用分立元件构成的,转换精度相当于24位。现在的LCR测量仪在测量时大都采用这种方法。主要是便宜。
追答标准C和目前大多数的基于单片机的C语言都是有浮点库的。我对基于51单片机的C语言没用过,不熟悉,但我刚刚翻了一些介绍资料,似乎很多都是具有浮点功能的。
所以,我看最简单的方式还是了解一下你所用的C编译程序有没有带浮点库。如果没有的话,换一个具有浮点的C版本,不就行了吗?
唯一的问题是:一般的资料对于该版本浮点的内部格式不一定公开。所以不知道是否符合您所说的IEEE75格式标准。
但是我想,这对于一般的应用,应该没有妨碍。因为这个格式标准仅仅在内部使用。
对于C语言的程序员,只有以下两种情况,才需要了解浮点的具体内部格式:
(1)需要自己编写与此语言链接的汇编语言程序段时;
(2)某些外部设备要求按照浮点二进制代码来和你的系统交换信息时。
除了这两种情况以外,对于C语言编写的程序中,则完全不必考虑浮点格式是什么。例如输入的如果是定点数据,要转换为浮点,只要给一个浮点类型的变量赋值,编译程序就会自动实行强制类型转换。这些强制类型转换,其实就是在调用内部的“定点——浮点转换子程序”。但这个调用过程,在高级语言的程序中是看不见的。
我自己用C编了这部分程序,感觉不是很好,想借鉴已使用这类的程序优化一下。不过人感谢你的回答。积分送给你。