PIC Microcontoller Math Method

Multiply 16x8 bit from Dingbat

;--------------------------------------------------------------------+
;   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: