ShadA equ 0x20
ShadB equ 0x21
Data equ 0x22; keeps original dataset
PORTSHIFT;
movf Data,w; fetch original data
movwf ShadB,w; update shadow register
clrf ShadA
call UPDATE; refresh PORTS
rlf ShadB,f
rlf ShadA,f; A0 = B7
call UPDATE
rlf ShadB,f
rlf ShadA,f; A1 =B7, A0=b6
call UPDATE
rlf ShadB,f
rlf ShadA,f; A2=B7,A1=B6,A0=B5
call UPDATE
rlf ShadB,f
rlf ShadA,f; A3=B7,A2=B6,A1=B5, A0=B4
call UPDATE
return
UPDATE; port refresh.
movf ShadB,w
movwf PORTB
movf ShadA,w
movwf PORTA
clrc
return