hallo, wie im anhang zu sehen ist, versuche ich gerade über ne for-schleife zeichen, die ich über den uart empfange, in einen String zu speichern um diesen später komplett zurückzusenden.(habe bewusst nicht auf vorgefertigte c-funktionen zurückgegriffen) nun, die uart-kommunikation von uC zum PC und umgekehrt klappt, auch die im code enthaltene sendefunktion funzt so wie sie soll. das was der code nun macht, er scheint die zeichen zu empfangen gibt dann aber lediglich das (glaube ich) letzte zeichen 15x zurück. dank euch p.s. wie am programmierstil bestimmt zu erkennen ist, bin ich noch etwas jungfrau was das programmieren angeht ;), also habt erbarmen
@Lupin Erstmal danke. aber funktioniert die Routine nicht nur mit einem Zeichen? Sprich, so wie SendenByte(EmpfangByte() ); (Echo)
Schau Dir doch noch mal die Sendeschleife in main() durch: for (i=0;i<=14;i++) { test[i]=EmpfangByte(); } //String senden for (j=0;j<=14;j++) //klappt auf jeden Fall { UDR=test[j]; SendenByte(UDR); } UDR ist bereits das UART Register. Wenn Du dort was hineinschreibst wird es gesendet, wenn Du von dort liest wird das zuletzt empfangene Zeichen geliefert. Also: Warum weist Du UDR in dieser Schleife direkt was zu? Senden ist doch Aufagbe der Funktion SendenByte. Und was willst Du senden. Na ja, das Zeichen das in test[j] steht, wobei j von 0 bis 14 laeuft. Also muss es heissen for( j = 0; j <= 14; j++ ) { SendenByte( test[j] ); } PS: Gewoehn dir an, in for Schleifen nach Moeglichkeit die Abfragebedingung mit < zu formulieren und nicht mit <= for( j = 0; j < 15; j++ ) Die Schleife wird 15-mal durchlaufen und als geuebter C Programmerier sieht man das dann auch mit einem Blick.
nochwas: solange du in der SendenByte() schleife hängst kannst du auch keine bytes empfangen ich glaube ein AVR hat keine UART FIFOs - d.h. die daten die während dieser Zeit empfangen werden sind verloren (nur das letzte byte bleibt dann im UDR register stehen).
Danke an alle. @Lupin. Das wird dann auch der Grund für mein Problem sein...
@kbuchegg mmh. Klasse Sache, dein Tipp hat geholfen, bin mir sicher ich hatte es so schonma. Nochmals danke.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.