Hi Dennis, Yeah, I know about the bsf/bcf read-modify-write issue, but it should only be a problem if something else is driving the pins, right? All PORTC pins are outputs at this point, and should be the only things driving the bus. Furthermore, the first listing works, and that uses bsf/bcf, just in a different place! Actually, the version I *want* to use is: movf PC_SEND,0 ; get byte to send to PC andlw b'00001111' ; want to send low nibble first iorlw b'11100000' ; keep spare bits high, keep bit 4 low lp1 btfsc PORTB,7 ; wait for low on PC AUTOFD line goto lp1 movwf PORTC ; write data movf PORTD,0 ; retrieve first byte from the PC movwf PC_RECV_0 ; store first byte bsf PORTC,4 ; *now* raise the handshake line This should be a bit faster, since the outgoing portc value (minus the handshake bit) is prepared in W while the PC is processing the previous nibble. However, this code doesn't work either, despite (as far as I can see) being functionally equivalent, as far as the protocol goes! Cheers, Ben > Read write modify instruction BSF PORTC.4 > Reads the state written to PORTC, then writes it back > Try > > andlw b'00001111' ; want to send low nibble first > iorlw b'11100000' ; keep spare bits high, keep bit 4 low > movwf PORTC ; write data > iorlw b '00010000; > movwf PORTC