Forum: Mikrocontroller und Digitale Elektronik UART mit C


von PD (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute

Ich habe folgendes Problem:
Wenn ich das Programm (siehe Anhang) auf dem 8515 laufen lasse, empfange 
ich am Hyper Terminal etwa folgendes:
TsTsTsTtTtTtTtTtTtetetete!e!e!e!e!e!s!s!s!s!s!sTsTsTsTtTtTtTtTtTtetetete 
!e!e!e!e!e!s!s!s!s!s!sTsTsTsTtTtTtTtTtTtetetete!e!e!e!e!e!s!s!s!s

Bei einer höherem Baudrate (19200) gibt es weniger Fehler:
Tes!Tes!Tes!Tet!Tet!Tet!Tst!Tst!Tst!est!est!estTes!Tes!Tes!Tet!Tet!Tet!T 
st!Tst!Tst!est!est!est

Ich denke es liebt an der UDRE Abfrage.
Wenn ich anstelle von while(UDRE==0); while(UDRE!=1); schreibe passiert 
gar nix mehr.....

Kann mir jemand helfen?

Gruss PD

von Jonas Diemer (Gast)


Lesenswert?

Hmm, weiß zwar nicht, welchen compiler du benutzt, aber wenns avr-gcc 
ist, ist die UDRE abfrage falsch. du holst udre ja gar nicht aus dem 
register raus, sondern checkst immer nur eine variable.

bei gcc müsste es heißen:

while (bit_is_clear(UCSRA,UDRE)) ;

wenn du allerdings codevision einsetzt siehts schon wieder anders aus. 
da kenn ich mich aber nicht aus...

von PD (Gast)


Lesenswert?

Hy Jonas

Danke für den Tip, nun funzt es!!!
Jetzt muss ich nur noch den empfang basteln:-)

CU PD

von Jonas Diemer (Gast)


Lesenswert?

schau dir mal die gcc-test programme an. empfange am besten über

SIGNAL(SIG_UART_RECV)

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.