Forum: Mikrocontroller und Digitale Elektronik unexpected REGDEF - z-pointer einrichten - icall / ijmp


von Rouven Z. (samtox2)


Lesenswert?

Hallo zusammen!

Ich will gerade den Befehl icall nutzen um ein menü einzurichten.
Habe allerdings anscheinend ein Problem mit zl und zh.
AVRStudio gibt mir immer den Fehler "syntax error, unexpected REGDEF"
aus.

Könnte da mal jemand einen Blick darauf werfen, wo ich da etwas falsch
mache?

Hier der komplette code:
---------------------------CODE ANFANG-------------------------------
.include "m162def.inc"
.def dashier = r16
ldi dashier, 0x02

          ;----in der nächsten Zeile wird der Fehler angezeigt----
   ldi zl,low (dashier*2) ;hier z.B. 0x02 statt "dashier*2 oder
   ldi zh,high(dashier*2) ;"dashier", dann gehts ohne Fehler.
                          ;Allerdings kann ich damit nicht anfangen

   icall        ;auch mit ijmp ändert sich nichts
   ret
punkt1:
   nop
   ret
punkt2:
   nop
   ret
punkt3:
   nop
ret

dashier:
   rjmp punkt1
   rjmp punkt2
   rjmp punkt3

ende: rjmp ende
---------------------------CODE ENDE--------------------------------


MFG
Samtox

von Hannes L. (hannes)


Lesenswert?

Du musst den Z-Pointer mit einer Konstante laden, nicht mit einer
Variable. Die Konstante ist das Label, an dem deine Sprungtabelle
beginnt. Und das *2 ist wohl auch nur bei LPM nötig, da hier der
wordweise organisierte Flash byteweise angesprochen werden muss. Bei
IJMP/ICALL wird der Flash wordweise angesprochen.

Siehe: http://www.hanneslux.de/avr/stopuhr/index.html
oder http://www.hanneslux.de/avr/zuenduhr/index.html

Die Steuerung des Menüs müsste in beiden Codes zu finden sein.

...

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.