首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MCS-51浮点运算子程序及其使用说明(8)

MCS-51浮点运算子程序及其使用说明(8)

(29) 标号: FSIN 功能:浮点正弦函数



入口条件:操作数在[R0]中。

出口信息:结果仍在[R0]中。

影响资源:DPTR、PSW、A、B、R2~R7、位1DH~1FH 堆栈需求: 6字节

FSIN: MOV A,@R0

MOV C,ACC.7

MOV 1DH,C ;保存自变量的符号

CLR ACC.7 ;统一按正数计算

MOV @R0,A

LCALL MVR0 ;将[R0]传送到第一工作区

MOV R5,#0 ;系数0.636627(2/Π)

MOV R6,#0A2H

MOV R7,#0FAH

CLR 1EH

LCALL MUL1 ;相乘,自变量按(Π/2)规一化

MOV A,R2 ;将结果复制到第二区

MOV R5,A

MOV A,R3

MOV R6,A

MOV A,R4

MOV R7,A

LCALL INT ;第一区取整,获得象限信息

MOV A,R2

JZ SIN2

SIN1: CLR C ;将浮点象限数转换成定点象限数

LCALL RR1

CJNE R2,#10H,SIN1

MOV A,R4

JNB ACC.1,SIN2

CPL 1DH ;对于第三、四象限,结果取反

SIN2: JB ACC.0,SIN3

CPL 1FH ;对于第一、三象限,直接求规一化的小数

SJMP SIN4

SIN3: MOV A,R4 ;对于第二、四象限,准备求其补数

INC A

MOV R4,A

JNZ SIN4

INC R3

SIN4: LCALL RLN ;规格化

SETB F0

LCALL AS1 ;求自变量归一化等效值

LCALL MOV0 ;回传

LCALL FPLN ;用多项式计算正弦值

DB 7DH,93H,28H;0.07185

DB 41H,0,0 ;0

DB 80H,0A4H,64H;-0.64215

DB 41H,0,0 ;0

DB 1,0C9H,2;1.5704

DB 41H,0,0 ;0

DB 40H ;结束

MOV A,@R0 ;结果的绝对值超过1.00吗?

JZ SIN5

JB ACC.6,SIN5

INC R0 ;绝对值按1.00封顶

MOV @R0,#80H

INC R0

MOV @R0,#0

DEC R0

DEC R0

MOV A,#1

SIN5: MOV C,1DH ;将数符拼入结果中

MOV ACC.7,C

MOV @R0,A

RET




(30) 标号: FATN 功能:浮点反正切函数



入口条件:操作数在[R0]中。

出口信息:结果仍在[R0]中。

影响资源:DPTR、PSW、A、B、R2~R7、位1CH~1FH 堆栈需求:7字节

FATN: MOV A,@R0

MOV C,ACC.7

MOV 1DH,C ;保存自变量数符

CLR ACC.7 ;自变量取绝对值

MOV @R0,A

CLR 1CH ;清求余运算标志

JB ACC.6,ATN1;自变量为纯小数否?

JZ ATN1

SETB 1CH ;置位求余运算标志

LCALL FRCP ;通过倒数运算,转换成纯小数

ATN1: LCALL FPLN ;通过多项式运算,计算反正切函数值

DB 0FCH,0E4H,91H;-0.055802

DB 7FH,8FH,37H;0.27922

DB 0FFH,0EDH,0E0H;-0.46460

DB 7BH,0E8H,77H;0.028377

DB 0,0FFH,68H;0.9977

DB 72H,85H,0ECH;3.1930×10-5

DB 40H ;结束

JNB 1CH,ATN2;需要求余运算否?

CPL 1FH ;准备运算标志

MOV C,1FH

MOV F0,C ;常数1.5708(Π/2)

MOV R5,#1

MOV R6,#0C9H

MOV R7,#10H

LCALL AS1 ;求余运算

LCALL MOV0 ;回传

ATN2: MOV A,@R0 ;拼入结果的数符

MOV C,1DH

MOV ACC.7,C

MOV @R0,A

RET

 

(31) 标号: RTOD 功能:浮点弧度数转换成浮点度数




入口条件:浮点弧度数在[R0]中。

出口信息:转换成的浮点度数仍在[R0]中。

影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节

RTOD: MOV R5,#6 ;系数(180/Π)传送到第二工作区

MOV R6,#0E5H

MOV R7,#2FH

SJMP DR ;通过乘法进行转换



(32) 标号: DTOR 功能:浮点度数转换成浮点弧度数



入口条件:浮点度数在[R0]中。

出口信息:转换成的浮点弧度数仍在[R0]中。

影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求:6字节

DTOR: MOV R5,#0FBH;系数(Π/180)传送到第二工作区

MOV R6,#8EH

MOV R7,#0FAH

DR: LCALL MVR0 ;将[R0]传送到第一工作区

CLR 1EH ;系数为正

LCALL MUL1 ;通过乘法进行转换

LJMP MOV0 ;结果传送到[R0]中

END
返回列表