www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik serielle Kommunikation


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.