nabla
09.03.2006, 16: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...
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...