Empfangen mehrerer Zeichen

Gast #403782
Lesenswert?

Hallo
Ich hoffe jemand kann mir helfen.
Ich möchte mit einem ATMEGA32 mehrere Zeichen empfangen.
das funktioniert jedoch nicht.Senden funktioniert.

Was mache ich falsch?

Ich habe meinen Code im Dateianhang.

Danke
Angehängte Dateien:
Gast #403783
Lesenswert?

Sieht korrekt aus. Bis auf diese Zeile:

UBRRL = 25;//(unsigned char) baud;

Bist du sicher mit den 2400 Baud? Mir sieht das eher wie 9600 Baud bei
4 MHz F_CPU aus.

Hardwaremäßig alles richtig beschaltet? PC Terminalprogramm korrekt
eingestellt?
Gast #403785
Lesenswert?

UBRRL = 25; stimmt weil ich den internen 1 MHz Oszillator verwende.

Und Hardwaremäßig müsste auch alles ok sein da ich einen STring senden
kann.
Ich kann ein einzelnes Zeichen Empfangen nur sobald es mehr als eines
sind funktioniert es nicht mehr.

Jedoch verwende ich wenn ich ein einzelnes Zeichen empfange nicht diese
Schleife.

for (i = 0;i<=1;i++)
{
input[i]= USART_Receive();


}
#403788
Lesenswert?

Ich nehm alles zurück (wasn heute los? heut passieren mir die
lächerlichsten Fehler).

Der Fehler ist, dass du den String nicht mit einem '\0'
Zeichen abschliesst. Das heist: Deine 2 empfangenen Zeichen
bilden noch keinen String! Daher kannst du auch keinen
strcmp zum Vergleichen benutzen.
Gast #403791
Lesenswert?

Wieso benutzt Du nicht den Interrupt (RX-Complete)? Mit dem hatte ich
noch nie Probleme, macht den Rest des Programmes auch weniger
zeitkritisch (Polling). Freigeben und sperren kann man den USART durch
setzen und löschen von RXEN, nicht RXCIE. Wenn möglich sollte man die
Benutzung der Interrupts immer vorziehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren