Hi, You do not call bit_delay after you have found the start bit. This causes all 8 data bits to be sampled in rapid succession. Proposed correction: . . . start_bit btfsc ser_in,2 goto start_bit ;look for start bit call start_delay ;get centre of start bit btfsc ser_in,2 ;look if still low goto start_bit ;false input start again ==> call bit_delay ;Wait until middle of first data bit movlw 8 ;load counter for 8 bits movwf bit_cntr clrf rcv_byte ;clear recieve byte recieve btfss ser_in,2 ;get bit bcf c,0 ;clear carry if bit is zero btfsc ser_in,2 bsf c,0 ;set carry if bit is high rrf rcv_byte,1 ;rotate carry to high bit in recieve byte ==> call bit_delay ;Wait until middle of next data bit decfsz bit_cntr,1 ;if counter not finished get next bit goto recieve . . . Hope this helps! Niki