原创 51高精度除法程序

2010-5-8 08:49 2402 3 3 分类: MCU/ 嵌入式
        在开发51单片机应用系统过程中,往往遇到多字节除法及倒数问题。但目前一些资料中所介绍的有关程序,复杂且功能单一、精度低。本人在研制((GZ93多功能程控测试仪》过程中,自行设计的4字节除4字节程序具有功能多、精度高、简短、运行速度快等特点,可用于求4字节倒数,求商的整数(结果为4字节),求商的小数部分(结果为4字节),调用两次即可求8字节商。

  一、使用方法

  1.求商的整数

  (1)16进制被除数送51内部RAM中20(低位)至23(高位)单元,除数送50(低位)至53(高位)单元,扩充单元24至27清零。 ’

  (2)调子程序DIV。

  (3)20(低位)至23(商位)单元为所求商,24至27单元为余数。

  2.求八字节商

  (1)先求商的整数部分

  方法同上,然后将20至23单元的整数商送其它单元保存。

  (2)求商的小数部分

  20至23单元清零;其余单元内容不变;调DIV子程序;小数商在23至20单元中,小数点位于23单元

  前。

  3.求倒数

  (1)20至23单元及25至27单元清零,01H送24单元,除数送50(低位)至53(高位)单元。

  (2)调子程序DIV。

  (3)倒数在23至20单元,小数点位于23单元前。

  二、程序清单

  ORG 0500H

  DIV: CLR 7EH

  MOV R0,#50H

  MOV R7,#03H

  DV0: MOV A,@R0

  INC R0

  ORL A,@R0

  JNZ DV1

  DJNZ R7,DV0

  SETB 7EH

  SJMP DV8

  DV1: MOV R6,#20H

  CLRC

  DV2: MOV R0,#20H

  MOV R7,#08H

  DV3: MOV A,@R0

  RLC A

  MOV @R0,A

  INC R0

  DJNZ R7,DV3

  MOV 0F0H,C

  CLR C

  MOV R0,#24H

  MOV R1,#50H

  MOV R7,#04H

  DV4: MOV A,@R0

  SUB A,@R1

  MOV @R0,A

  INC R0

  INC Rl

  DJNZ R7,DV4

  JNB 0F0H,DV5

  CLR C

  SJMP DV6

  DV5: JNC DV6

  MOV A,24H

  ADD A,50H

  MOV 24H,A

  MOV A,25H

  ADDC A,51H

  MOV 25H,A

  MOV A,26H

  ADDC A,52H

  MOV 26H,A

  MOV A,27H

  ADDC A,53H

  MOV 27H,A

  DV6: CPL C

  DJNZ R6,DV2

  MOV R0,#20H

  MOV R7,#04H

  DV7: MOV A,@R0

  RLC A

  MOV @R0,A

  INC R0

  DJNZ R7,DV7

  DV8: RET

  END
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条