By: Andy Warren From: http://www.myke.com/basic.htm
an algorithm from Andy Warren for dividing a positive value by three, by knowing that divide by three can be represented by the series:
x/3 = x/2 - x/4 + x/8 - x/16 + x/32 - x/64...
The code to implement this is:
Div3: ; Divide Contents of "w" by 3 movwf Dividend clrf Quotient Div3_Loop ; Loop Until the Dividend == 0 bcf STATUS, C rrf Dividend, f ; Dividend /2 (ie "x/2" in Series) movf Dividend, w ; Is it Equal to Zero? btfsc STATUS, Z goto Div3_Done ; If it is, then Stop addwf Quotient ; Add the Value to the Quotient rrf Dividend, f ; Dividend /2 (ie "x/4" in Series) movf Dividend, w btfsc STATUS, Z goto Div3_Done subwf Quotient, f ; Quotient = Quotient-(Dividend / 4) goto Div3_Loop Div3_Done movf Quotient, w ; Return the Quotient return