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
Gast
#1537206
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 | |
2 | |
3 | |
dann ist es dasselbe. hth, Jörg
Gast
#1537215
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
Gast
#1537246
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.