Ich möchte bei einem atmega128 eine der beiden seriellen Schnittstellen initialisieren. Ich komme aber nichtmal bis zum Einstellen der Baudrate. Ich habe sie in r16 und r17 gespeichert und wie folgt initialisiert: ; Baudrate einstellen out UBRR1L, r16 out UBRR1H, r17 Der Assembler (AVR-Simulator von ARVStudio4) bringt aber immer den Fehler: "Illigal argument type or count". Ich hab auch schonmal versucht direkt die Adressen für UBRR1L und UBRR1H einzugeben ($98 und $99 wenn ich mich nicht irre). Aber der Fehler tritt generell ab allen Adressen gößer $3F auf. Für kleinere Adressen funktionniert die Zuweisung. Kann mir jemand weiterhelfen? P.S. Weis jemand wie ich eine 7-Bitübertragung ohne Parität mit einem Startbit und 2 Stopbits initialisiere. Ich komm da mit dem Datenblatt nicht so ganz klar...
Die Befehle OUT und IN gehen nur in den gemapten I/O-Bereich von 0x00 bis 0x3F (0x20 bis 0x5F). Zugriff auf die Reister oberhalb der Marke 0x5F geht nur mit LDS statt IN und STS statt OUT. Z. B.: STS UBRR1L, r16 STS UBRR1H, r17 Eine Umrechnung der Adresse (+0x20) ist nicht erforderlich da für die "hohen" Register über 0x5F die ware Adresse definiert ist. MfG Andi
Ach ja, um sich damit nicht herumschlagen zu müssen, kann man das mit Macros gut handeln: .macro OUTI ;OUT immediate Byte ldi r16,@1 ;OUTI Adresse,Wert (8 Bit) .if @0>0x3F sts @0,r16 .else out @0,r16 .endif .endm .macro OUTR ;OUT Byte von Register .if @0>0x3F ;OUTR Adresse,Register sts @0,@1 .else out @0,@1 .endif .endm ;Und noch was zum einlesen: .macro INR ;IN Byte in Register .if @0>0x3F ;IN Register,Adresse lds @0,@1 .else in @0,@1 .endif .endm Bei festen Werten nimmt man einfach OUTI Adresse,Wert und bei in einem Register berechneten Wert OUTR Adresse,RN (register r0 bis r31). MfG Andi
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.