Aus deiner Beschreibung werde ich nicht ganz schlau. Nochmal bitte:
Der Hardware-UART ist mit dem Modem verbunden, und der Software-UART
dient nur zur Ausgabe für Debugging o.ä.?
> Wenn das GSM-Modem mit 2 Stopbits sendet funktioniert es, mit einem
> Stopbit nicht.Es sieht so, dass der AT89S8253 (Quarz? etc.) ein Problem
> mit dem Timing hat.
Ich glaube eher deine Software hat ein Problem. Überleg mal, dein Modem
pustet mit 19200 Bd, dein Software-UART "nur" mit 9600 Bd. Allein das
ist schon etwas kontraproduktiv, weil mehrere Bytes vom Modem schneller
einträufeln können als du ausgeben kannst.
Aber lassen wir das mal aussen vor, und schauen wir uns deine
Software-UART-Sendefunktion an. Du hast da ne Warte-Schleife für 100µs
drin. Sind es jetzt wirklich mehr oder weniger genau 100µs oder 104,2µs
für 9600 Bd? Wenn es eher 100µs sind, dann bist du über den 3%
Fehlertoleranz einer UART-Schnittstelle.
Jetzt kommt aber noch hinzu, dass deine Bitknubbelei für den Soft-UART,
also das Ermitteln welcher Pegel gesendet werden soll auch noch Zeit
verbrät. Vielleicht gleicht das den "Zeitverlust" wieder aus.
Was noch zu beachten ist, während dein Soft-UART sendet, kann ja ein
weiterer Interrupt des Hardware-UART kommen, und der bringt dein Timing
für den Soft-UART durcheinander.
Kannst du einfach mal einen Text senden und schauen ob der richtig
ankommt?
Für den Soft-UART solltest du probeweise mal während dem Senden den
Interrupt des Hardware-UART sperren.
> Was fehlerhaft ist, ist das was im interen Buffer steht!
Glaube ich nicht, deine Baudrateneinstellung für 19200 sieht soweit
richtig aus. Hast du die Möglichkeit, eine LED o.ä. einzuschalten wenn
der Buffer den richtigen Inhalt hat?
Damit könntest du relativ schnell drauf kommen, welcher der UARTs ein
Problem hat.
Ralf