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