=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 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 > ------------------------------------------------------------------