Gast
#273054
Hi! Ich habe meine liebe Not mit der Programmierung des ATMega8-U(S)ART. Hoffentlich kann sich jemand eines Anfängers erbarmen und eine Erklärung zu folgenden drei Phänomenen geben: Erstens: Die Probleme fangen schon mit dem Beschreiben der Register an. ; Frame-Format setzen: 1 start, 8 data, 1 stop bit ldi temp, 0x86 ; URSEL=1 out UCSRC,temp ; UBRRH UND UCSRC werden geschrieben ; Baudrate in den UART tickern ldi temp, 0x00 ; URSEL=0 out UBRRH, temp ; UBRRH UND UCSRC werden geschrieben ; etc... Warum hat die liebe URSEL, die beim Schreiben zwischen UCSRC und UBRRH wählt, ganz offenbar keinen Effekt? Zweitens: Das Register UCSRC, in dem verschiedene Dinge stehen wie etwa die Wortlänge (5-8 Bit), braucht anscheinend gar nicht geschrieben zu werden! Mir liegen einige Beispielcodes vor, etwa der des uC.net-MMC-MIDI-Recorders und der RozzBox (www.rozzbox.de), in denen überhaupt kein Zugriff auf UCSRC stattfindet. Der Simulator im AVR-Studio zeigt dieses Register standardmäßig mit dem Wert 0x00 an, was einer Wortlänge von 5 Bit entspricht. Das MIDI-Protokoll hat aber 8 Datenbits. Warum funktionieren alle genannten Beispiele trotzdem? Drittens: Angenommen, ich habe in meinem Programm eine Endlosschleife, aus der heraus bei RXC in eine Interrupt-Routine gesprungen werden soll. Ich pausiere die Ausführung des Programmes also in der Endlosschleife, stelle im Simulator des AVR-Studio das UDR auf einen Wert ein und setze das RXC-Bit in UCSRA. Wenn ich nun "Step-Into" einen Schritt weitergehe, wird UDR auf null resettet, obwohl noch gar nicht ausgelesen wurde. Warum? Über jede hilfreiche Antwort freut sich Matthias