void LEER_BUFF(void)
{
while(S0TIR == 1)
{
}
}
Meines Wissens wird dieser Interrupt-Request (Bit 7 im S0TIC)
GESETZT wenn du neue Zeichen eintragen kannst, danach sollte er
gelöscht werden (du verwendest ja keinen Interrupt, welcher dies ja
automatisch machen würde). Fakt ist dadurch das du den S0TBUF ständig
neu belegst kommt dann chrott raus.
besser wäre vielleicht:
void LEER_BUFF(void)
{
while(S0TIR == 0); // Warten bis übergang von 0 -> 1
S0TIR = 0; // IR löschen
}
Außerdem solltest du in main ganz am Ende eine Endlosschleife machen
for(;;);
da sonst unvorhergesehene Dinge passieren (Stack zerschossen,
Programmcode ausgeführt der nicht erwünscht etc.)
Dann noch ein paar Anmerkungen:
Wenn das Programm auch noch etwas anderes machen soll, ist es ratsam
das Senden (und Empfangen) in Interrupts zu machen, da du selbst wenn
du mit 115200Baud arbeitest ca. 86us Sekunden in der Schleife hängt bis
er neue Dinge tun kann (das sind ungefähr 400 MC-Befehle wo er was
sinnvolles tun kann.
Gruss