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.
Bookmarks