PIC Microcontroller Math Method

Scale 8 bits to a percent

Dmitry Kiryashov says: Possible realization of 1 + 1/256 + ... correction.

;1/256 * (1 + 1/256) =~ 0.999985 / 255 ;

scale255to100:                  ;25 = 16+8+1
        clrf    temp            ;int
        clrf    temp1           ;frac

        addwf   temp,F          ;1
        rrf     temp,F          ;/2
        rrf     temp1,F

        rrf     temp,F          ;/4
        rrf     temp1,F
        rrf     temp,F          ;/8
        rrf     temp1,F

        addwf   temp,F          ;8
        rrf     temp,F          ;/16
        rrf     temp1,F

        addwf   temp,F          ;16
        rrf     temp,F          ;/32
        rrf     temp1,F

        rrf     temp,W          ;/64
        rrf     temp1,F
;
;       movwf   temp2           ;1/256/256     if longer tail
;       movwf   temp3           ;1/256/256/256 is required
;       etc...
;
        addwf   temp1,F         ;1 + 1/256 correction
        btfss   temp1,7         ;either round if >= 0.5
        skpnc                   ;or take carry
        addlw   1               ;temp1 holds frac part
;
;       movwf   temp            ;answer is either W or temp
        return

If >=0.5 correction isn't required <btfss temp1,7> line
should be commented.