51单片机浮点运算子程序库

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

●KeilC

●Linux

●uCOS

●VxWorks

您的位置:电子开发网>嵌入式系统>

51单片机浮点运算子程序库

时间:2007-11-14 来源: 作者: 点击:2399 字体大小:【大中小】

1: FSDT 功能:浮点数格式化

2: FADD 功能:浮点数加法

3: FSUB 功能:浮点数减法

4: FMUL 功能:浮点数乘法

5: FDIV 功能:浮点数除法

6: FCLR 功能:浮点数清零

7: FZER 功能:浮点数判零

8: FMOV 功能:浮点数传送

9: FPUS 功能:浮点数压栈

10: FPOP 功能:浮点数出栈

11: FCMP 功能:浮点数代数值比较不影响待比较操作数12: FABS 功能:浮点绝对值函数

13: FSGN 功能:浮点符号函数

14: FINT 功能:浮点取整函数

15: FRCP 功能:浮点倒数函数

16: FSQU 功能:浮点数平方

17: FSQR 功能:浮点数开平方快速逼近算法

18: FPLN 功能:浮点数多项式计算

19: FLOG 功能:以10为底的浮点对数函数

20: FLN 功能:以e为底的浮点对数函数

21: FE10 功能:以10为底的浮点指数函数

22: FEXP 功能:以e为底的浮点指数函数

23: FE2 功能:以2为底的浮点指数函数

24: DTOF 功能:双字节十六进制定点数转换成格式化浮点数

25: FTOD 功能:格式化浮点数转换成双字节定点数

26: BTOF 功能:浮点BCD码转换成格式化浮点数

27: FTOB 功能:格式化浮点数转换成浮点BCD码

28: FCOS 功能:浮点余弦函数

29: FSIN 功能:浮点正弦函数

30: FATN 功能:浮点反正切函数

31: RTOD 功能:浮点弧度数转换成浮点度数

32: DTOR 功能:浮点度数转换成浮点弧度数

为便于读者使用本程序库,先将有关约定说明如下:

1.双字节定点操作数:用[R0]或[R1]来表示存放在由R0或R1指示的连续单元中的数据,地址小的单元存放高字节•如果[R0]=1234H,若(R0)=30H,则(30H)=12H,(31H)=34H•

2.二进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为阶码(补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节纯小数(原码)来表示•当尾数的最高位为1时,便称为规格化浮点数,简称操作数•在程序说明中,也用[R0]或[R1]来表示R0或R1指示的浮点操作数,例如:当[R0]=-6.000时,则二进制浮点数表示为

83C000H•若(R0)=30H,则(30H)=83H,(31H)=0C0H,(32H)=00H•

3.十进制浮点操作数:用三个字节表示,第一个字节的最高位为数符,其余七位为阶码(二进制补码形式),第二字节为尾数的高字节,第三字节为尾数的低字节,尾数用双字节BCD码纯小数(原码)来表示•当十进制数的绝对值大于1时,阶码就等于整数部分的位数,如 876.5 的阶码是03H,-876.5 的阶码是 83H;当十进制数的绝对值小于1时,阶码就等于 80H 减去小数点后面零的个数,例如 0.00382 的阶码是 7EH,-0.00382的阶码是 0FEH•在程序说明中,用[R0]或[R1]来表示R0或R1指示的十进制浮点操作数•例如有一个十进制浮点操作数存放在30H•31H•32H中,数值是 -0.07315,即-0.7315乘以10的-1次方,则(30H)=0FFH,31H=73H,(32H)

=15H•若用[R0]来指向它,则应使(R0)=30H•

4.运算精度:单次定点运算精度为结果最低位的当量值;单次二进制浮点算术运算的精度优于十万分之三;单次二进制浮点超越函数运算的精度优于万分之一;BCD码浮点数本身的精度比较低(万分之一到千分之一),不宜作为运算的操作数,仅用于输入或输出时的数制转换•不管那种数据格式,随着连续运算的次数增加,精度都会下降•

5.工作区:数据工作区固定在A•B•R2~R7,数符或标志工作区固定在PSW和23H单元(位

1CH~1FH)•在浮点系统中,R2•R3•R4和位1FH为第一工作区,R5•R6•R7和位1EH为第二工作区•用户只要不在工作区中存放无关的或非消耗性的信息,程序就具有较好的透明性•

6.子程序调用范例:由于本程序库特别注意了各子程序接口的相容性,很容易采用积木方式(或流水线方式)完成一个公式的计算•以浮点运算为例:

计算 y = Ln √ | Sin (ab/c+d) |

已知:a=-123.4;b=0.7577;c=56.34;d=1.276; 它们分别存放在30H•33H•36H•39H开始的连续三个单元中•用BCD码浮点数表示时,分别为a=831234H;b=007577H;c=025634H;

d=011276H•

求解过程:通过调用BTOF子程序,将各变量转换成二进制浮点操作数,再进行各

种运算,最后调用FTOB子程序,还原成十进制形式,供输出使用•程序如下:

TEST: MOV R0,#39H ;指向BCD码浮点操作数d

LCALL BTOF ;将其转换成二进制浮点操作数

MOV R0,#36H ;指向BCD码浮点操作数c

LCALL BTOF ;将其转换成二进制浮点操作数

MOV R0,#33H ;指向BCD码浮点操作数b

LCALL BTOF ;将其转换成二进制浮点操作数

MOV R0,#30H ;指向BCD码浮点操作数a

相关文档
最新文档