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.
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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.