#define clk 0 // index for RA0
#define dat 1 // index for RA1
/*
void test()
{ u16 data; u08 lpctr; //
asm movlw high(_owbuff) // for 16F enhanced mid-range
asm movwf _fsr0h // "
asm movlw low(_owbuff) // "
asm movwf _fsr0l // "
//asm lfsr 0,_owbuff // for 18F (2 words, 2 cycles)
asm movlw 16 //
asm movwf _lpctr // loop counter = 16
lp1:
asm moviw _fsr0++ // for 16F enhanced mid-range
asm movwf _data+0 // "
asm moviw _fsr0++ // "
asm movwf _data+1 // "
//asm movf _postinc0,W // for 18F
//asm movwf _data+0 // "
//asm movf _postinc0,W // "
//asm movwf _data+1 // "
asm movlw ~(1<<clk|1<<dat)
asm btfsc _data+1,3 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b11
asm andwf _porta,F // clk = 0, dat = 0
asm btfsc _data+1,2 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b10
asm andwf _porta,F // clk = 0, dat = 0
asm btfsc _data+1,1 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b9
asm andwf _porta,F //
asm btfsc _data+1,0 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b8
asm andwf _porta,F //
asm btfsc _data+0,7 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b7
asm andwf _porta,F //
asm btfsc _data+0,6 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b6
asm andwf _porta,F //
asm btfsc _data+0,5 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b5
asm andwf _porta,F //
asm btfsc _data+0,4 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b4
asm andwf _porta,F //
asm btfsc _data+0,3 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b3
asm andwf _porta,F //
asm btfsc _data+0,2 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b2
asm andwf _porta,F //
asm btfsc _data+0,1 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b1
asm andwf _porta,F //
asm btfsc _data+0,0 //
asm bsf _porta,dat //
asm bsf _porta,clk // shift out b0
asm andwf _porta,F //
asm decfsz _lpctr,F // all 16 words? yes, skip, else
asm bra lp1 //
}