James Ashley Hillman of Industrial Interface Research Ltd shares this code:
The archive on this page links to 2 divide 24 by 8 routines. PICList post "24bit by 16bit Division" (actually 24 / 8) PICList post "Divide 24/8 routine" ASM embedded in C During testing I discovered that high numbers cause the wrong answers to be calculated (eg 0xF00000 / 0xFD = wrong answer) I wrote my own routine which is Nikolai's 24 bits by 16, modified to divide by 8 bits, remainder is also 8 bits: ;*********************************************************** ;Unsigned 24 bit by 8 bit divide routine ; ; Inputs: ; Dividend  x,x+1,x+2 (x+2  most significant!) ; Divisor  y ; Temporary: ; Counter  counter ; Output: ; Quotient  x,x+1,x+2 (x+2  most significant!) ; Remainder  x+3 ; ; Size: 17 ; Timing: 342 cycles (including call and return) ; ; This is basically Nikolai Golovchenko's 24 by 16 bit ; divide routine, with some instructions removed to ; optimise it for an 8 bit divide. ; Thanks to Nikolai for the original post. ; ; James Hillman, 2 December 2005 ;*********************************************************** FXD248U: CLRF x+3 ;remainder MOVLW d'24' MOVWF counter LOOPU248 RLF x,W ;shift dividend left to move next bit to remainder RLF x+1,F ; RLF x+2,F ; RLF x+3,F ;shift carry (next dividend bit) into remainder RLF x,F ;finish shifting the dividend and save carry in x.0, ;since remainder can be 9 bit long in some cases ;This bit will also serve as the next result bit. MOVF y,W ;substract divisor from 8bit remainder SUBWF x+3,F ;here we also need to take into account the 9th bit of remainder, which ;is in x.0. If we don't have a borrow after subtracting from ;8 bits of remainder, then there is no borrow regardless of 9th bit ;value. But, if we have the borrow, then that will depend on 9th bit ;value. If it is 1, then no final borrow will occur. If it is 0, borrow ;will occur. These values match the borrow flag polarity. BTFSC STATUS,0 ;if no borrow after 8 bit subtraction BSF x,0 ;then there is no borrow in result. Overwrite ;x.0 with 1 to indicate no borrow. ;if borrow did occur, x.0 already ;holds the final borrow value (0borrow, ;1no borrow) BTFSS x,0 ;if no borrow after 9bit subtraction ADDWF x+3,F ;restore remainder. (w contains the value ;subtracted from it previously) DECFSZ counter,F GOTO LOOPU248 RETURN
Comments:
file: /Techref/microchip/math/div/24by8jah.htm, 3KB, , updated: 2018/3/7 09:17, local time: 2024/11/5 17:10,
©2024 PLEASE DON'T RIP! THIS SITE CLOSES OCT 28, 2024 SO LONG AND THANKS FOR ALL THE FISH!

©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://www.piclist.com/techref/microchip/math/div/24by8jah.htm"> PIC Microcontoller Math Method Divide 24 bit int by 8 bit int to 24 bit int and remainder</A> 
Did you find what you needed? 
PICList 2024 contributors:
o List host: MIT, Site host massmind.org, Top posters @none found  Page Editors: James Newton, David Cary, and YOU! * Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL1 RS232 to TTL converters. * Monthly Subscribers: Gregg Rew. ongoing support is MOST appreciated! * Contributors: Richard Seriani, Sr. 
Welcome to www.piclist.com! 
.