Forum: Mikrocontroller und Digitale Elektronik z-Pointer auf mehrere Tabellen??


von Mark_mit_k (Gast)


Lesenswert?

Hallo,

kann man den z-pointer auf mehrere Tabellen ausrichten?
Ich habe SINNGEMÄß folgendes vor:

main:

ldi  zl,low(tabelle1*2)
ldi  zh,high(tabelle1*2)

loop:
adiw  zl,1
lpm   r1,z
out   portb,r1
rjmp  loop

timer0_interrupt:
ldi  zl,low(tabelle2*2)
ldi  zl,high(tabelle2*2)
adiw  zl,1
lpm
out   portb,r0
ldi  zl,low(tabelle1*2)
ldi  zh,high(tabelle1*2)
reti


tabelle1: .db 1,2,3,4,5,6,7,8
tabelle2: .db 23,234,34,44,90


Ich habe auh außerhalb der interruptroutine versucht den pointer auf
die 2. Tabelle auszurichten, klappt auch  nicht.
Geht das generell nicht?

Gruß, Mark_mit_k

von crazy horse (Gast)


Lesenswert?

Klar geht das, du solltes aber in der ISR sowohl SREG als auch ZH/ZL
sichern und wieder herstellen, statt den alten Startwert wieder
herzustellen.
ausserdem hier noch ein Schreibfehler:
ldi  zl,high(tabelle2*2)

von peter dannegger (Gast)


Lesenswert?

Du must im Interrupt entweder andere Register als im Main nehmen oder
die verwendeten Register sichern, also:

xx_interrupt:
push r2
in r2, sreg
push r0
push zl
push zh
...
pop zh
pop zl
pop r0
out sreg, r2
pop r2
reti


Peter

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.