>hef4094 > movwf txbyte > movlw 0x07 > movwf bitcount >Sendbit > btfss txbyte, bitcount ; Skip next line if bit is set. > call SendZero ; Sends a 0 > call SendOne ; Sends a 1 > decfsz bitcount,1 ; Decrement bitcount, SKip if Zero > goto Sendbit > return You will never transmit bit 0 using this routine, and it will always transmit an extra 1 bit if you try to send a 0 bit. Also any new data that you send will not appear at the outputs of the 4094 until the next bit send is executed. ie CLOCK = high. Try this..... hef4094 movwf txbyte movlw 0x08 movwf bitcount Sendbit rlf txbyte btfss status,carry goto send0 call SendOne goto OneLess Send0 call SendZero OneLess decfsz bitcount goto Sendbit return Also try this for the SendOne/Zero routine..... ; Clock bit is normally HIGH, so that previous data is already ; at the output gates. SendZero bcf Port(x),DATA ; send 0 bit goto ClkOut SendOne bsf Port(x),DATA ; send 1 bit ClkOut call wait bcf Port(x),CLOCK ; strobe data to latches call wait bsf Port(x),CLOCK ; send data to output pins ; the next instruction depends on how many instructions ; are executed before this routine is called again ; (may not be needed if clock speed is low) call wait return I know you have already tried it, but it's fairly easy to trap errors like these by using MPSIM or MBLAB simulator and single step through the code. Another thing that is sometimes hard, but very necessary, is to make sure the code is compatable with any external devices, or you may suffer many frustrated hours of fruitless debugging. This means a close examination of the device data sheet. Tony For the beginner.... PicNPoke Multimedia 16F84 Simulator Assembler, and Tutorial. Now with PicNPlay circuit simulator. Plus animated Address Mode Tutor. http://www.dontronics.com/picnpoke.html