Hallo zusammen!

Arexx-Henk meinte in " Asuros SerWrite(..) - Verständnisproblem":
....
Vorbild:

- die Asuro sendet einige Daten mittels den

SerWrite() Funktion

- die Asuro schaltet direkt um nach empfangen mittels den

SerRead() Funktion

ohne diesen Warteschleiffe in die SerWrite() Funktion werden
die letzten drei Karakter vom transmitter nicht mehr
ausgestrahlt.

Warum nicht?

Guck mal in die SerRead() Funktion.

Dort steht u.a.

UCSRB = 0x10; //enable receiver

Mit diesen Kode wird die receiver eingeschaltet ABER
damit wird auch die transmitter direkt AUSgeschaltet.
....
Leider hat Henk _nicht_überall_ Recht! (Mit den 3 letzten Sätzen schon!) )

Da könnte man (_etwas_besser_!) ) schreiben: "UCSRB |= 0x10; //enable receiver"
... und zum Ausschalten: "UCSRB &= ~0x10; //disable receiver"

Prog.-Teil aus "SerWrite()":
Code:
....
  }
  while (!(UCSRA & 0x40))   // abwarten, bis das _letzte_Zeichen_
    ;                                   // uebertragen wurde.
                                        // Wait for transmit complete flag (TXC)
// Bis hierher wurde ALLES uebertragen!     *************************************
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  for (i = 0; i < 0xFE; i++)            // warten auf irgendwas; keiner weiss
    for (length = 0; length < 0xFE; length++);  // wofuer 
}
.....
Was soll da bitte noch übertragen werden, wenn's schon fertig ist??

Und
" if (UCSRA & 0x20) // wait for empty transmit buffer "
===>> "0x20" ist "bit 5"!

cu Helmut