www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik unbeantwortete Frage im Tutorial


Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

Im Tutorial steht:

include "4433def.inc"

        ldi R16, 0xFF
        out DDRB, R16                     ; Port B: Ausgang

        ldi ZL, LOW(daten*2)              ; Low-Byte der Adresse in
Z-Pointer
        ldi ZH, HIGH(daten*2)             ; High-Byte der Adresse in
Z-Pointer

        lpm                               ; durch Z-Pointer
adressiertes Byte nach R0 lesen
        mov R16, R0                       ; nach R16 kopieren
        out PORTB, R16                    ; an PORTB ausgeben

ende:   rjmp ende                         ; Endlosschleife

daten:
.db 0b10101010


Hm, nebenbei steht auch noch man soll sich keine Gedanken über
"(daten*2)" machen, das ist eben so.
Trotzdem wüßte ich gerne warum *2?
Leider hab ich noch keine Literatur gefunden, die mir das beschreibt!?

Grüße und Dank für Eure Antwort
Mike

Autor: mmerten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist eine Eigenheit des Atmel AVR Assemblers. Dort sind Labels im
.cseg Word orientiert bedingt durch die Busbreite (16 Bit). Der Zugriff
mit LPM über die Index-Register R31:R30 (ZH:ZL) erfolgt aber Byte
orientiert daher hier die Multiplikation Label * 2.

Autor: Aleksej Kiselev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil Tabellen wordweise gespeichert sind, aber Z-Register wird byteweise
adressiert.
Flashspeicher von AVR ist so gebaut, dass man nur Words auslesen kann.
Und mit Z-Register kann man auch RAM-Speicher zugreifen, da werden die
Daten als Bytes gespeichert.

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, danke werds mir merken!!!

Mike

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.