PIC Microcontoller Bit Math Method

Testing bits in W

Dmitry Kiryashov says:

You can't apply btfss/btfsc operations to [the W register]. You need to put W value to some temp location first and finally check temp with btfss/btfsc commands.

HINTS:

  1.  ANDLW   0x80 ; will test bit .7 in W, other bits are cleared ;-)
     ANDLW   0x40 ; test bit .6
    ;...
    

    result of operation in _Z flag (=0 means bit=1 otherwise bit=0 result to _Z=1)

    ANDLW is destructive command. You cannot restore W if you didn't save it before.

  2.  ADDLW   0x88 ; will test bits .7 and .3
    

    results of operation in _C and _DC flags. To restore initial W just ADDLW -0x88 ;-)

  3. You can also apply XORLW value command to check identity W to some value. It is useful command (sometimes) 'cause you can do comparison for alot of values and restore W after that to initial value.
    XORLW   A_CONST
    SKPNZ
    GOTO    A_CONST_MATCH
    
    XORLW   B_CONST^A_CONST ;compare with B_CONST
    SKPNZ
    GOTO    B_CONST_MATCH
    
    XORLW   C_CONST^B_CONST ;compare with C_CONST
    ;....
    
    XORLW   LAST_CONST ;last used const value -> restore initial W
    ;.....
    

David A Cary of Motorguide Pinpoint Says: " Hint #3 is explained in more detail (with macros that make it easier to write compact, correct code). "