Forum: Mikrocontroller und Digitale Elektronik USART Probleme


von Artur (Gast)


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;
}

von 1.8T-Passat (Gast)


Lesenswert?

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

von Artur (Gast)


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

von Andy M. (Gast)


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.

von Stefan_KM (Gast)


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.

von Chipsammler (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von ... .. (docean) Benutzerseite


Lesenswert?

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

von Chipsammler (Gast)


Lesenswert?

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

von Chipsammler (Gast)


Lesenswert?

noch eine Frage:

wenn ich
TXREG = 0x0A
sende

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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

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.