Also ich habe das Programm mal im Simulator laufen lassen und es
funktioniert einwandfrei nach ein paar kleinen Anpassungen.
Mir ist aufgefallen, daß du die for Schleife bis "<=laenge" laufen
lässt, was falsch ist. Richtig wäre bis "<laenge", da der Zähler ja bei
0 anfängt und ansonsten ein Zeichen zu viel ausgelesen wird.
Ebenso macht "ea=1" keinen Sinn, da kein Interrupt verwendet werden
soll.
Welchen Sinn deine Variable x[] haben soll ist mir auch noch unklar, da
du dieser einen Wert zuweist, diese dann aber nie mehr benutzt.
Ebenso verwendest du die Variablen "a" und "i", welche du vorher nicht
deklariert hast. Vielleicht geht das bei deinem Compiler, beim dem Keil
C51 jedenfalls musste ich "a" und "i" vorher erst deklarieren.
Deine endlos while Schleife am Ende kannst du auch mit "while(1);"
einfacher schreiben. Ebenso die TI Schleifen mit "while(TI==0);" :)
Der gravierendste Fehler, und eventuell die Ursache des Problems, könnte
der falsche Operator in deiner while Schleife sein. Du prüfst auf "TI =
0", wobei ein einfaches "=" eine Zuweisung und kein Vergleich ist. Du
mußt dort auf "TI == 0" prüfen, damit es ein Vergleich ist.
Bedingt durch die Zuweisung wird nämlich sofort das nächste Zeichen in
SBUF geschrieben, ohne auf das fertige Senden des vorherigen Zeichens zu
warten.
Ciao,
Rainer