Hallo zusammen, bin Anfänger und experimentiere zur Zeit mit dem Uart herum. Wobei ich auf ein Problem gestossen bin, welches ich schon seit längerem versuche zu lösen. Habe im Archiv leider auch keinen Lösungsansatz gefunden. Eigentlich funktioniert das senden und auch das Empfangen ohne Probleme, jedoch wenn ich nach einem empfangenen Byte mehrere (z.B. 2 Byte) wieder an den PC zurücksenden möchte wird nur eines gesendet. Kurze Beschreibung des angehängten Code's (sollte wenigstens so funktionieren): Im Hauptprogramm werden alle benötigten EInstellungen gemacht (Interrupt-Bit's gesetzt) gemacht und danach in einer Endlosschleife verweilt. Beim Empfang eines Bytes wird dieses in ein Register geschrieben (und zum testen) einmal inkrementiert, (zurück-)gesendet, gewartet bis versendet, noch einmal inkrementiert und dann noch einmal (zurück-)gesendet So dass wenn ich z.B. im Terminalprogramm des Pc's den Wert 7 an den MC sende, zuerst 8 und anschließend 9 an den PC zurückgesendt wird. Sollte zumindest so sein. Es wird aber nur einmal inkrementiert bzw. nur das erste inkrementierte Byte zurückgesendet. Kann mir hier jemand sagen was ich da falsch mache? Wäre für jeden Tipp dankbar. Danke Euch allen.
Hallo Johannes! Ich programmiere normalerweise C, aber ich habe mir dein Programm man angesehen. Meine Erfahrungen mit Assembler sind nicht die Besten. Ich versuche jeoch, dir meine Gedanken mitzuteilen. In der IRQ-Routine stehen folgende Befehle für das Senden: warte1: sbis UCSRA,UDRE rjmp warte1 out UDR, temp Also sbis wartet anscheindend so lange bis man wieder senden darf. UDRE wird dann 1, wenn das Register leer ist. Warum machst du dann eigentlich als nächstes eine Schleife mit rjmp warte1? Der Prozessor kommt da doch nie wieder raus. Oder kann der sbis-Befehl die Schleife unterbrechen? Lass mal einfach die Schleife weg. Der Prozessor weis ja sowieso nach dem sbis-Befehl, dass er senden darf. Ich hoffe ich konnte dir helfen. Tschüss! Martin
Hallo Martin, Danke für Deine Antwort. HAbe jetzt da Problem gelöst. Es lag an einer Einstellung in meinem Terminal-Program (ist von einer Buch-CD). Das hat einfach das 2. Byte verschluckt. D.h. das Prog war soweit o.k. und Deine Vermutung dann wohl nicht richtig. Noch zur Info: "sbis UCSRA, UDRE" bedeutet: Springe falls Bit (UDRE) im Register UCSRA gesetzt ist. UDRE ist gesetzt wenn die Übertragung erfolgt und somit frei für die nächste Übertragung ist. "Springe" bedeutet hier den nächsten (EIn-Wort-)Befehl überspringen (hier also das (rjmp...). Wenn das Bit also nicht gesetzt ist (und damit die Übertragung des aktuellen Bytes noch nicht abgeschlossen ist) wird der Befehl rjmp.. ausgeführt und damit zurückgesprungen, solange bis das Bit gesetzt ist. Dann wird rjmp... übersprungen und der weitere Programmlauf ausgeführt. Also korrekt. Trotzdem noch mal Danke. Johannes
Hi Johannes, im Netz gibt es ein sehr gutes Terminal von Bray. Einfach mal googlen. Da hat man die Möglichkeit, sich die Daten als Hex-Werte oder Strings anzeigen zu lassen. Ansonsten ist es sehr übersichtlich und einfach zu bedienen. Hat natürlich auch noch weitere Funktionen. Vielleicht ist es was für dich.. Gruß, Ralf
Hallo, probier doch mal NetTerm, läuft bei mir auf allen Rechnern - von Win95 bis XPpro. Gruß -=jens=-
Hi zusammen, danke für Eure Tipps zu den Tools. Habe Sie mir schon runtergeladen. Sehen echt vielversprechend aus. So, und jetzt werden Daten ausgetauscht bis die Drähte glühen. ;-) Nochmals Danke. Gruß Johannes P.S. Absolut klasse Forum hier!!!
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.