www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART Probleme


Autor: Artur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe seit kurzem Probleme mit der RS232. Im Terminal erscheinen die 
Daten erst, sobald (während) ich einen Reset am PIC auslöse. Was kann 
das sein?
Ich gebe die Daten mit folgender FUnktion aus:


void Usart_write(unsigned char data)
{
  while(!TXIF);
  TXREG = data;
}

Autor: 1.8T-Passat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bißchen mehr von Deinem Quelltext würde uns allen das Antworten 
erleichtern. ;-)

Autor: Artur (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da ist nicht viel...

ist bei einer schleife das selbe:


i=48 //ASCII48 = "0" 57 = "9"
do{
  Usart_write(i)
  }while((i++)<58);


so bekomm ich die Zahlen von 0 bis 8 geliefert, wenn ich resete, kommt 
auch noch die 9

Autor: Andy M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich mit PICs nicht aus. Vielleicht musst du auf ein Flag 
warten, dass du neue Daten nachliefern kannst und der Buffer nicht grade 
voll ist.

Warum beim Reset die 9 kommt, kann ich dir leider nicht sagen.

Autor: Stefan_KM (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er wartet doch mit

>while(!TXIF);

Die 9 kommt wahrscheinlich, weil die anderen Zahlen überschrieben 
werden. Ich glaueb es kann im Terminal eingestellt werden, dass bei 
einem neuen Zeichen ein \n eingefügt wird. Dann sollten die Zahlen 
untereinander geschrieben werden.

Autor: Chipsammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem konnte ich inzwischen klar definieren:
das letzte Zeichen wird erst während (?) eines Resets übermittelt, und 
dann nochmal anstatt dem ersten Zeichen nach dem Neustart...
schon merkwürdig

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chipsammler schrieb:
> das letzte Zeichen wird erst während (?) eines Resets übermittelt...
Welches Terminal-Programm verwendest du?

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
übertrage mal nach jedem Zeichen ein \n, kann sein das Windows/dein 
Programm da was puffert

Autor: Chipsammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verwende Teraterm... aber danke für den Hinweis! Habe nun 
HyperTerminal versucht und dort trat der Effekt nicht auf...
VIelen Dank also!

Autor: Chipsammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch eine Frage:

wenn ich
TXREG = 0x0A
sende

müsste ja der Cursor im Terminal in die nächste Zeile springen oder?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Chipsammler schrieb:
> wenn ich
> TXREG = 0x0A
> sende müsste ja der Cursor im Terminal in die nächste Zeile springen oder?
Aber nicht unbedingt an den Zeilenanfang zurück :-o
0x0A = Linefeed
0x0D = Carriage Return
http://de.wikipedia.org/wiki/Steuerzeichen

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.