Forum: Mikrocontroller und Digitale Elektronik Pointer Verstaendniss in avr assembler


von Mirko Roller (Gast)


Lesenswert?

Ich habe volgendes Problem mit den Z Pointer in avr assembler, in
Variante 1 Funktioniert es wie ich will, in Variante 2, nicht.
Wo liegt mein Verstaendniss Problem ? Vielleicht kennt sich damit
jemand aus ? Als Assembler benutze ich avra unter linux.

Vielen Dank fuer eure Hilfe.


Version 1: ( klappt )
  ldi ZL,LOW(TEST_DATEN*2)
  ldi ZH,HIGH(TEST_DATEN*2)
  adiw ZL,3    ;  Z+= 3
  lpm      ; R0 = (Z)
  ;out PORTD,R0    ; LEDs = 1100 = OKAY
TEST_DATEN:
.db $0,$1,$2,$3,$4,$5
--------------------------------------------------
Version 2: ( klappt nicht )
  ldi ZL,LOW(TEST_DATEN*2)
  ldi ZH,HIGH(TEST_DATEN*2)
  ld temp1,Z+  ;temp1=0
  ld temp1,Z+  ;temp1=1
  ld temp1,Z+  ;temp1=2
  ld temp1,Z  ;temp1=3
  out PORTD,temp1  ; LEDs = sollten 1100 sein, ist es aber nicht.

von plitzi (Gast)


Lesenswert?

Nur mit dem lpm-Befehl kann man beim AVR aus dem Programmspeicher lesen.
Der ld-Befehl liest immer aus dem SRAM oder (wenn der Zeiger klein genug
ist) aus dem IO-Bereich.

Jörg

von Alisa 1387 (Gast)


Lesenswert?

Ich hab da auch nochmal ne dumme Frage: Wenn ich z.B. $60 über einen
Pointer ansprechen möchte muß ich dann "$60" in das low byte und
"$00" ins high byte schreiben? Nur mal so zur Info, nicht dass ich
irgendwo in die Walachei schreibe ;)

von Daniel (Gast)


Lesenswert?

@Alisa : Die Antwort lautet : "Ja"

MfG, Daniel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.