PIC Microcontoller Math Method

Divide 8 bits in W by the constant value 3

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