PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART-Verbindung -- TXC oder UDRE -Atmel 8535



nabla
09.03.2006, 15:03
Hi ich habe folgende Frage:

Ich lese mit meinem AVR über den internen ADC alle 2 Sekunden einen Wert ein und möchte Ihn dann über die serielle Schnittstelle an den PC senden. Der 2 Sekunden-Takt habe ich durch eine ISR realisiert, in der dann auch der Wert vom ADC geholt wird und die Daten gesendet werden. Ich sende eine 3Stellige Zahl stellenweise.

Nun meine Fragen zum senden:

Ich schreibe die Daten in das UDR-Register.

Dann warte ich bis das Bit UDRE im USR-Register High wird. So funktioniert alles perfekt...

Warum funktioniert es nicht, wenn ich Warte bis das TXC-Bit im USR-Register High wird. Ist das nicht eigentlich das gleiche? Wenn ich es so löse sendet er immer nur das erste Zeichen...

Anbei auch mal der Code:



void send_ist(int ist)
{
eins=ist/100;
hilfe=ist%100;
zwei=hilfe/10;
drei=hilfe%10;

UDR=eins+48;
while(!(USR&BIT(UDRE)));
UDR=44;
while(!(USR&BIT(UDRE)));
UDR=zwei+48;
while(!(USR&BIT(UDRE)));
UDR=drei+48;
while(!(USR&BIT(UDRE)));
UDR=86;
while(!(USR&BIT(UDRE)));
UDR=95;
while(!(USR&BIT(UDRE)));
}

DANKE schonmal...

linux_80
10.03.2006, 00:31
Hallo,

TXC zeigt an, das alle Daten auch wirklich gesendet wurden,
das Bit ist dann gesetzt.

UDRE zeigt an, dass das DatenRegister leer ist, und wieder neu beschrieben werden kann. Das Bit ist gesetzt, wenn das Register leer ist.

Es ist nicht das gleiche, aber es sollte doch gehen, wenn man auf TXC prüft.
Das Bit wird nur automatisch zurückgesetzt, wenn eine ISR aufgerufen wird.

Jetzt kommts drauf an wie der UART teil initialisiert wurde.

Vor dem ersten Byte würde ich schon überprüfen, ob das Register leer ist, damit nix überschrieben wird.