Hallo. Für eine Schrittmotorsteuerung will ich Werte im Flash lesen. Eigentlich will ich ein Register als Index verwenden (Array). Es gibt aber keinen Befehl ADIW rd,r1 Ich habe mir jetzt mit einer Schleife und ADIW rd,k63 beholfen. Aber schön finde ich das nicht. Was mache ich wenn meine Look-Up-Tables mal grösser sind als 4 Einträge? Dank im Voraus. . . . ldi ZH, high((pattern)*2) ldi ZL, low((pattern)*2) TCmp1C: cpi temp1, 0 breq TCmp1D adiw ZL, 2 dec temp1 rjmp TCmp1C TCmp1D: lpm ; Programmspeicher nach r0 . . . pattern: .dw 0x0009, 0x000c, 0x0006, 0x0003
so geht`s auch TCmp1C: add ZL,temp1 brcc PC + 2 inc ZH add ZL,temp1 brcc PC + 2 inc ZH TCmp1D: lpm ; Programmspeicher nach r0
Besten Dank. Ich nehme an, Ich könnte auch (nur) einen Addiervorgang machen, wenn ich die Addresse wortmässig vorliegen habe. Dirk
richtig aber danach ist dann lsl ZL rol ZH zur Adresskorrektur erforderlich ldi ZH, high(pattern) ldi ZL, low(pattern) add ZL,temp1 brcc PC + 2 inc ZH lsl ZL rol ZH
Hi. Nochmals danke. Aber jetzt musste ich doch eine Weile überlegen. Wenn bezogen auf deinen ersten Code mein temp1 als Byteoffset vorliegt, (Also quasi temp1 = 2 * temp1) muss ich doch nix korrigieren. Dein zweite Code bezog sich doch auf die Annahme, dass temp1 die Wortdifferenz ist, oder? Dann wird aber mit lsl ZL und rol ZH die gesammte Adresse geshiftet. Das geht aber nur, wenn 'pattern' ein Wort index ist, aber nicht mit einem Label, so wie ich's in meinem ersten Code verwende? Oder hab ich jetzt krumm gedacht? Danke für Geduld Dirk
Ein Label ist im Atmel-Assembler immer eine Wort-Adresse, deshalb das "*2" bzw. "lsl ZL; rol ZH". Für den zweiten Code muss in temp1 ein Wort-Index stehen.
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.