PIC Microcontoller Math Method

Divide 24 bits by the constant value 6

From: Hughe

Divide a 24 bit number by 6 and round up if the remainder is 3 or more - can be used for any 8 bit constant divisor with 2 values changed.

	CBLOCK
		iA:3
		iB
		iC
	ENDC

DivBySix24:
		movlw	.24		; loop for 24 shifts
		movwf	iC		; iC is loop counter

		clrf	iB		; clear remainder reg

		bcf	STATUS,C	; clear result bit
DivBySixLoop:
		rlf	iA+0		; roll result bit onto iA
		rlf	iA+1
		rlf	iA+2
		rlf	iB		; and top bit of iA onto iB

		movlw	D'6'		; check if remainder (iB) >= 6
		subwf	iB,w		; w = iB-6
		btfss	STATUS,C	; carry set if iB >= 6
		  goto	DivBySixNogo

		movwf	iB		; iB-6 (w) into iB
					; the carry gets rolled onto iA as a result
DivBySixNogo:
		decfsz	iC,f		; loop until all bits checked
		  goto	DivBySixLoop
		rlf	iA+0		; roll last result bit onto A
		rlf	iA+1
		rlf	iA+2

	; the folowing could be left off if no rounding is required

		movlw	D'3'		; if remainder is 3 or more round up
		subwf	iB,w		; w = iB-3
		btfss	STATUS,C	; carry set if iB >= 3
		  return
		incf	iA+0,f		; increment Result
		btfsc	STATUS,Z
		  incf	iA+1,f
		btfsc	STATUS,Z
		  incf	iA+2,f

		return