www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ST Z, R27 identisch mit OUT PortB, R27 AVR ATMega


Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Nein. Die Adresse von PortB im Adressraum ist $18.

MfG Spess

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn 0x0038 die SRAM-Adresse von PORTB ist (musst du in's Datenblatt 
schauen), dann ja.

Man kann das so schreiben :
    ldi r30, low(PORTB)
    ldi r31, high(PORTB)
    ; ...
dann ist es dasselbe.

hth, Jörg

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.