yes you may :

Code:
Main:

serin portc.7,6,lowbyte 'sit and wait for an input
serin portc.7,6,highbyte 'sit and wait for an input
outdata.lowbyte = lowbyte 
outdata.highbyte = highbyte
if outdata = 0 then ' pause time according to turning on or off
Tptime = 0
else
Tptime = ptime 'from eprom
endif

FOR LoopCount = 1 to 16 
bitmask = (outdata & ((DCD loopcount) - 1)) 'find the dec number corresponding to the first pin to switch on
If  (outdata & (DCD loopcount) - 1) <> (outdata & (DCD (loopcount - 1)) - 1)  Then ' If we sent it just now don't bother again
GOSUB SyncSend           ;   send the data
pause TPtime 'pause for a bit
 endif
NEXT LoopCount 
GOTO Main

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
;----[Send synchronous data]------------------------------------------------
SyncSend:
    SHIFTOUT  SDout, SClk, 1,[bitmask\16]
    HIGH Strobe                  ; strobe the shift registers latches
    @ NOP                        ; hold Strobe for 1uS
    LOW Strobe                   ; Strobe idles LOW
 RETURN
I think I'm nearly there with this method (DCD)
I would love to know if there is a more efficient way of doing it.
Jerson, could you expand on what your method does?