Hallo, eine Frage an die Erfahrenen mit ATMEGA / AVRs: (ATmega8, DDRB=Ausgang) LDI R27, $55 LDI R30, $38 LDI R31, $00 Führen die folgenden Befehle zum gleichen Ergebnis? a) ST Z, R27 b) OUT PortB, R27 Viele Grüße und einen Guten Rutsch ins Jahr 2010 wünscht Herbert
Hi Nein. Die Adresse von PortB im Adressraum ist $18. MfG Spess
Wenn 0x0038 die SRAM-Adresse von PORTB ist (musst du in's Datenblatt schauen), dann ja. Man kann das so schreiben :
1 | ldi r30, low(PORTB) |
2 | ldi r31, high(PORTB) |
3 | ; ... |
dann ist es dasselbe. hth, Jörg
Hi Korrektur: $38 ist richtig. >Man kann das so schreiben : > ldi r30, low(PORTB) > ldi r31, high(PORTB) > ; ... >dann ist es dasselbe. Nein. 'PortB' ist als $18, also der IO-Adresse, definiert. Z muss aber mit der Speicheradresse geladen werden. Und die ist $38. MfG Spess
Hallo, Danke für die schnellen Antworten. Jetzt bin ich noch mehr verwirrt: Im ATmega8 Datenblatt steht auf Seite 287 (Register Summary) für PortB 0x18 (0x38). Dabei fällt mir auf, das in den Klammern immer Hex +20 steht. Auf der Seite davor bzw. danach steht aber nichts, was die Klammern bedeuten. LDI R27, $55 LDI R30, $38 LDI R31, $00 Führen die folgenden Befehle zum gleichen Ergebnis? a) ST Z, R27 (das wäre also $0038, Z=R31,R30) < $55 b) OUT PortB, R27 (das wäre also $18) < $55 Letztendlich hätte ich gern gewußt, ob in beiden Fällen an PortB $55 erscheinen wird. Viele Grüße Herbert
Hi >Dabei fällt mir auf, das in den Klammern immer Hex +20 steht. >Auf der Seite davor bzw. danach steht aber nichts, was die Klammern >bedeuten. Du musst dir das Ganze wie einen durchgehenden Adressraum vorstellen: $00..$1F Register 0..31 $20..RAMSTART IO-Register RAMSTART...RAMEND RAM Die unteren 64 Io-Register haben zusätzlich noch die IO-Adressen $00-$3F, die z.B. von 'in'/'out' verwendet werden. MfG Spess
Hallo, also kann ich PortB über beide Möglichkeiten "umschalten". Ich habs mal als Inline ASM mit in den Quelltext eingefügt. Per Debugger erscheint jedenfalls in beiden Fällen der Wert am virtuellen PortB. Danke für die Erklärungen. Viele Grüße Herbert PS: Warum ??? Ich versuche gerade zu verstehen, was der Compiler aus meinem Quelltext macht und wie der die Ports dann anspricht in einer LIB, da ich keine IN/OUT Befehle in der LST Datei gefunden habe, sondern die Adressierung über Z. Hat mich etwas stutzig gemacht.
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.