Forum: Mikrocontroller und Digitale Elektronik serielle Kommunikation


von Stefan (Gast)


Lesenswert?

Hallo,

folgende Ausgangssituation:

Ich habe mir eine Schaltung gebastelt, mit der ich die AT89S-Serie von
Atmel (8051er mit seriell programmierbarem Flash) programmieren kann.

Dazu habe ich einen gewöhnlichen AT89C52 verwendet, der über die
RS232-Schnittstelle Befehle bekommt und diese entsprechend auf dem
AT89S-Typ ausführt.

Ich arbeite mit Hardware-Handshake. Der Empfang läuft momentan über
Polling.
Alle Befehle werden mit dem CarriageReturn-Zeichen (0x0D)
abgeschlossen, LF-Zeichen (0x0A) werden ignoriert.

Nun habe ich folgendes Problem:

Wenn ich die Befehle einzeln (quasi manuell) an meinen Controller
sende, gibt es keine Probleme.
Alle Befehle sind darstellbare ASCII-Zeichen.

Wenn ich Befehle in einer Textdatei sammele und diese Datei
runterschicke, habe ich beim "BlankCheck"-Befehl das Problem, dass
einige der nachfolgenden Zeichen von meiner Schaltung ignoriert werden.
Dies passierte beim Austesten mit HyperTerminal.

Dies ist der einzige Befehl, bei dem es zu diesem Fehler kommt.

Nun habe ich die Kommunikation auch mit TeraTerm probiert. Dort tritt
der Fehler nur auf, wenn als Verzögerungszeit für das Senden einzelner
Zeichen bzw. ganzer Zeilen 0 ms eingetragen ist. Wenn ich die
Verzögerungszeit für Zeichen auf 1 ms stelle, funktioniert es.

Kann mir jemand folgende Vermutung bestätigen:

Der UART des Motherboards schickt (unabhängig vom Terminalprogramm)
bereits die nächsten Bytes, bevor die PC-Software merkt, dass die
CTS-Leitung deaktiviert ist.
Da der BlankCheck-Befehl logischerweise sehr lange dauert, werden
einige Zeichen von meiner Schaltung nicht erkannt.

Jetzt wäre die einzige Lösung, die mir einfällt, meine Routinen für die
serielle Schnittstelle auf Interrupt-Steuerung mit Buffer umzuschreiben,
richtig?

Oder hat mir vielleicht jemand noch ne Idee, woran es liegen könnte?

Gruß Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.