Like Dave says, ignore the last stop bit and when sending/receiving data by adding a pause after the serin command, especially if in a loop receiving byte after byte.

Or write a Bit Bang routine.

Lasy example below, but I am sure you can create a couple of loops to cut it down, have used pauseus of 104 that gives you 9600 baud, simply cut down the pause time to suit required baud rate:


To send a byte:

'Send Start Bit
portb.7=0
pauseus 104

'Send Byte out
portb.7=Byteout.bit0
pauseus 104
portb.7=Byteout.bit1
pauseus 104
portb.7=Byteout.bit2
pauseus 104
portb.7=Byteout.bit3
pauseus 104
portb.7=Byteout.bit4
pauseus 104
portb.7=Byteout.bit5
pauseus 104
portb.7=Byteout.bit6
pauseus 104
portb.7=Byteout.bit7
pauseus 104

'Send Parity bit
portb.7=Parity
pauseus 104

'Send 2 Stop Bits
portb.7=1
pauseus 104
portb.7=1
pauseus 104

*****

To receive a byte:

'Check for start bit by sampling the port twice within 104us.
check1:
if portb.6=0 then
else
goto check1
endif
pauseus 52
if portb.6=0 then
else
goto check1
endif
pauseus 104

'Receive Byte in
ByteIn.bit0=portb.6
pauseus 104
ByteIn.bit1=portb.6
pauseus 104
ByteIn.bit2=portb.6
pauseus 104
ByteIn.bit3=portb.6
pauseus 104
ByteIn.bit4=portb.6
pauseus 104
ByteIn.bit5=portb.6
pauseus 104
ByteIn.bit6=portb.6
pauseus 104
ByteIn.bit7=portb.6
pauseus 104

'Receive Parity bit
Parity=portb.6
pauseus 104

'Receive 2 Stop bits
pauseus 104
pauseus 104

Regards

Sean.