;--------------------------------------------------------------------+ ; Function: Math : Multiply 16bits by 8bits | ;--------------------------------------------------------------------| ; Filename: M_MUL16x8.inc | Environment : MPLAB | ; Version : 1 | Microcontroller: PIC16F8x* | ; Date : 21/07/2003 | OSC MHz/MIPS : xx / xxx | ;--------------------------------------------------------------------| ; Author : Dingbat | ; Company : - | ; Files required : none | ;--------------------------------------------------------------------| ; Unsigned 16*8 bit Multiply AA(16) * BB(8), Result (CC) is 24bit ; adapted from code found on www.piclist.com ; ; params ; AA 0:1 (MSB:LSB) = number to multiply (16bit) ; BB = multiplier (8bit) ; CC 0:3 (MSB:LSB) = Product (24bit) ; ; Taking out the loops and inlining the code would save about ; another 20-30 instructions MUL16x8 clrf CC+0 ;clear result clrf CC+1 ; clrf CC+2 ; movlw .8 movwf bitCount ;bit counter set @ number of bits in multiplier mul_L1 ;main loop here rlf CC+2,f ;rotate result left (*2) rlf CC+1,f ; rlf CC+0,f ; bcf CC+2,0 ;clear LSB of result after rotation btfss BB,7 ;test msb of multipier goto dontAdd ;if bit is clear then dont add movfw AA+1 ;Add the 16 bits of AA to product addwf CC+2,f ; skpnc ; incf CC+1,f ; movfw AA ; addwf CC+1,f ; skpnc ; incf CC+0,f ; dontAdd rlf BB,f ;rotate multiplier left decfsz bitCount,f ;chk if finished all bits in multiplier goto mul_L1 return+
Comments:
I think it must be
skpnz
incf CC+0,f
after the
skpnc
incf CC+1,f
because the instruction incf does not affect the C flag (only the Z flag), so when you make the incf CC+1,f the carry flag doesn't become 0 when CC+1 isn't 00000000. But un CC+1 become 00000000 then the Z flag will become 1 so now I can detect the carry from CC+1 and increment CC+0.
file: /Techref/microchip/math/mul/16x8-d.htm, 3KB, , updated: 2013/4/9 07:39, local time: 2024/12/21 06:53,
3.145.32.95: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://techref.massmind.org/Techref/microchip/math/mul/16x8-d.htm"> PIC Microcontoller Math Method </A> |
Did you find what you needed? |
Welcome to massmind.org! |
Welcome to techref.massmind.org! |
.