Wenn der Code kleiner wird, dafür aber ein Zeichen mehr ankommt, dann würde ich mal auf Eingangsbufferüberlauf tippen. Es könnte sein, dass durch den LCD Befehl eine Pause mit eingebracht wird. Wie sieht es denn ohne ausgabe auf dem LCD aus? Lässt sich der Eingang evtl per Interrupt abfragen?