PIC Microcontoller Bit Math Method

Converting a 3-bit number to a 8-bit mask

From: Mike Keitz. There is a trick method that works for 4 bits. It replaces a 2-bit number in a variable with a 4-bit mask:

        incf    BitP, W  ;W = 0001 0010 0011 0100 
        btfsc   BitP, 1  ;If 0 or 1, result is almost correct now. 
        iorwf   BitP, F  ;BitP = [0000] [0001] 0011 0111 
        incf    BitP, F  ;BitP = 0001 0010 0100 1000 

It could be the core of an 8-bit routine thus:

; Convert 3-bit number (0-7) in INDEX to a 8-bit mask (00000001 ... 
; 10000000) in BitP. 
        movfw   INDEX 
        andlw   b'00000011'     ;Start with half of the mask. 
        movwf   BitP 
        incf    BitP, W         ;The 4-bit converter 
        btfsc   BitP, 1 
        iorwf   BitP, F 
        incf    BitP, F 
        btfsc   INDEX, 2        ;Is it high 4 bits? 
        swapf   BitP, F 

Code: