;
; sequence relay outputs through the following values after
; a switch press
;
; 00000000 relays off
; 00000001 relay 1 on (GP0)
; 00000010 relay 2 on (GP1)
; 00000100 relay 3 on (GP2)
;
LOOP btfss SWITCH,0 ; switch operated? |B0
goto LOOP ; no, branch, else |B0
bcf SWITCH,0 ; clear switch latch bit |B0
clrc ; clear Carry |B0
movf OUTPUT,W ; relays off (00000000)? |B0
skpnz ; no, skip, else |B0
setc ; set Carry |B0
rlf OUTPUT,W ; rotate left |B0
andlw b'00000111' ; 000, 001, 010, or 100 |B0
movwf OUTPUT ; update relay output variable |B0
movf GPIO,W ; get GPIO port data |B0
andlw b'11111000' ; mask off relay output bits |B0
iorwf OUTPUT,W ; pick up new relay output bits |B0
movwf GPIO ; update relay outputs |B0
goto LOOP ; loop forever |B0
;******************************************************************