Okay, also ich sehe grad das ich mich verrechnet hatte:
9600 Baud und 16MHz ergeben laud Bascom berechnung 0,16% Fehler. Also absolut top.
Also ich vermute das sich dein Controller dabei etwas "verschluckt" durch das senden und wieder empfangen.
Schreib deine Schleife mal (nur zum testen) folgender maßen (der rest gleich wie oben):
PS: Die Variable L kannst du dir auch sparen 
Code:
Do
B = Inkey(#4)
'Waitms 500
If B <> 0 Then
Locate 4 , L
Lcd Chr(b)
L = L + 1
End If
Loop
So und dann sag mal was dein LCD so ausspuckt
Lesezeichen