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

OP #1537200
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.