;Division of 16bit by 8 bit with a result in Q16.16 form ; ; X_Int.X_Frac = X_Int / Y ; ; RAM - 6 bytes (1 temp): ; X_Int = X_IntH:X_IntL 16 bit input/ output integer part ; X_Frac = X_FracH:X_FracL 16 bit output fractional part ; Y divisor / temporary ; Counter counter ; ; Size = 39 instructions ; Execution time = 6+16*15-2+3+16*15-2+3+3(return) ; = 491 instruction cycles ; ; 8-July-2000 by Nikolai Golovchenko ; 16-February-2001 fixed, reduced execution time and temporaries Div16by8to16_16 clr X_FracL clr X_FracH mov W, #16 mov Counter, W mov W, Y ;keep Y value in accumulator clr Y ;and use Y register as temporary ;Find integer part Div16by8to16_16a rl X_IntL ;shift next msb into temporary rl X_IntH rl Y rl Counter ;carry has 9th bit of temporary ;copy carry to counter sub Y, W ;substract Y (in w) from temporary snc ;if no borrow, set Counter.0 setb Counter.0 sb Counter.0 ;if Counter.0 clear (borrow) restore temporary add Y, W clc ;restore counter rr Counter ;at this point carry is the next bit of result decsz Counter ;repeat 16 times to find integer part jmp Div16by8to16_16a ;shift last integer bit rl X_IntL rl X_IntH ;Find fractional part setb Counter.4 ;Counter = 16 Div16by8to16_16b ;Shift zero bit into temporary rl X_FracL rl X_FracH rl Y rl Counter ;carry has 9th bit of temporary ;copy carry to counter sub Y, W ;substract Y(in w) from temporary snc ;if no borrow, set Counter.0 setb Counter.0 sb Counter.0 ;if Counter.0 clear (borrow) restore temporary add Y, W clc ;restore counter rr Counter decsz Counter ;repeat 16 times jmp Div16by8to16_16b ;shift last fractional bit rl X_FracL rl X_FracH mov Y, W ;restore divisor retp
file: /Techref/scenix/lib/math/div16by8to16_16.htm, 2KB, , updated: 2001/4/16 21:59, local time: 2024/8/14 23:53,
owner: NG--944,
18.117.229.191:LOG IN
|
©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://massmind.org/techref/scenix/lib/math/div16by8to16_16.htm"> Division of 16 bit by 8 bit integers with result in fixed point format Q16.16</A> |
Did you find what you needed? |
Welcome to massmind.org! |
Ashley Roll has put together a really nice little unit here. Leave off the MAX232 and keep these handy for the few times you need true RS232! |
.