=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Date: Sat, 08 Apr 2000 10:44:00
From: Nikolai Golovchenko <golovchenko-at-mail.ru>
To: pic microcontroller discussion list <PICLIST-at-MITVMA.MIT.EDU>
Subject: Re: Help:Floating point number division of 2 bytes
--------------------------------------------------------------------------------
Hi Ismael,
I haven't yet had a chance to take a look at PIC17C756, but this
routine should work (PIC17 compatible with PIC16?). May be someone
willing to optimize? :)
;***********************************************
;Floating point division of two unsigned integer
;8 bit variables
;
;Input: AARGB0 - dividend (nominator)
; BARGB0 - divisor (denominator)
;Output:
; AEXP, AARGB0, AARGB1 - quotient
; (MICROCHIP format - AN575)
; w = 0 on success
; w = 1 error: divide by zero
;Temporaries:
; BARGB1
;
;RAM - 5 bytes
;ROM - 41 words
;Speed - 7 + 4 + 8 * 9 + 4 + 14 * 23 + 4 = 413 instruction
; cycles worst case (including call and return)
;***********************************************
fdiv24_8_8
movfw BARGB0
skpnz
retlw 1 ;divide by zero
clrf AEXP
movfw AARGB0
skpnz
retlw 0 ;zero result
;loop to use all 8 bits of dividend (integer 8 by 8 divide)
movwf AARGB1
clrf BARGB1
movlw 0x08
movwf AARGB0 ;aargb0 is used as loop counter
fdiv24_8_8b
rlf AARGB1, f
rlf BARGB1, f
movfw BARGB0
subwf BARGB1, w
skpnc
movwf BARGB1
decfsz AARGB0, f
goto fdiv24_8_8b
rlf AARGB1, f ;aargb1 is the integer quotient so far
;loop to fill all the bits of 16bit mantissa
clrf AARGB0
movlw 0x8E
movwf AEXP
clrc
fdiv24_8_8c
rlf BARGB1, f
movfw BARGB0
skpc ;check carry (9th bit)
goto fdiv24_8_8d
subwf BARGB1, f
setc
goto fdiv24_8_8e
fdiv24_8_8d
subwf BARGB1, w
skpnc
movwf BARGB1
fdiv24_8_8e
rlf AARGB1, f
rlf AARGB0, f
decf AEXP, f
btfss AARGB0, 7
goto fdiv24_8_8c
bcf AARGB0, 7 ;replace explicit msb with sign
retlw 0
;***********************************************
Nikolai
http://techref.massmind.org/member/NG--944
On Friday, April 07, 2000 Ismael M. Khangane wrote:
> Hi picer's
> I will appreciate if some one have a floating point division routine for
> PIC17C756.
> --
> ------------------------------------------------------------------
> Ismael M. Khangane, Specialist in Robotics. Automatic Control & Systems
> ( Bsc in Eng.)
> Instituto de Automatica Industrial IAI-CSIC
> Madrid, Spain.
> Tel: (34) 91 871 1900
> Fax: (34) 91 871 7050
> E-mail: imkesp-at-excite.com ; ismaelm-at-iai.csic.es
> ------------------------------------------------------------------