serielle Kommunikation

Gast #136242
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.