ST Z, R27 identisch mit OUT PortB, R27 AVR ATMega

OP #1537200
Lesenswert?

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 #1537215
Lesenswert?

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
OP #1537232
Lesenswert?

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
Lesenswert?

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
OP #1537271
Lesenswert?

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.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren