Hallo, ich möchte gern den Wert des PC zum Z-Register addieren und hab das so versucht. Da es ja keinen Befehl zum Addieren mit einer Konstanten gibt habe ich das hier versucht: subi ZL,-low(PC) sbci ZH,-high(PC) Macht aber nicht das was es tun soll. liegt es an der Schreibweise?
Hallo, der Programmzähler dürfte Word-organisiert sein wie der Flash selbst auch. Also eher (2*PC). Ich frage mich allerdings: wozu braucht man das? Gruß aus Berlin Michael
Reennee wrote: > subi ZL,-low(PC) > sbci ZH,-high(PC) Hier ist der PC schon ein höher also sbci ZH,-high(PC-1) -- oder -- subi ZL,-low(PC+1) Je nachdem welche Stell du brauchst. EINFACHER geht es allerdings wenn du ein Label verwendest:
1 | hierher: subi ZL, low(-hierher) |
2 | sbci ZH, high(-hierher) |
für den nachfolgenden ijmp Befehl ich benutzte das um Zeitliche differenzen auszugleichen nach dem Ijmp kommt eine handvoll nop die dann entsprechend der Differenz angesprungen werden. in ZL,TCNT1L in ZH,TCNT1H in templ,ICR1L in tempH,ICR1H sub ZL,templ sbc ZH,temph ldi templ,low(PC) ldi temph,high(PC) add ZL,templ adc ZH,temph ijmp nop nop nop nop nop nop nop nop nop nop nop nop nop
Reennee wrote:
> ich benutzte das um Zeitliche differenzen auszugleichen
geht einfacher:
1 | ;************************************************************************/ |
2 | ;* */ |
3 | ;* Delay Macro 8 ... 65543 Cycle */ |
4 | ;* */ |
5 | ;* Author: Peter Dannegger */ |
6 | ;* */ |
7 | ;************************************************************************/ |
8 | .listmac |
9 | |
10 | ;delay 8 ... 65543 cycle |
11 | |
12 | .macro mdelay |
13 | ldi r24, low( @0 - 8 ) |
14 | ldi r25, high( @0 - 8 ) |
15 | sbiw r24, 4 |
16 | brcc pc - 1 |
17 | cpi r24, 0xFD |
18 | brcs pc + 4 |
19 | breq pc + 3 |
20 | cpi r24, 0xFF |
21 | breq pc + 1 |
22 | .endmacro |
23 | |
24 | mdelay 8 |
25 | |
26 | mdelay 9 |
27 | |
28 | mdelay 10 |
29 | |
30 | mdelay 11 |
31 | |
32 | mdelay 12 |
33 | |
34 | mdelay 65543 |
35 | |
36 | rjmp pc |
Peter
1 | subi ZL,-low(PC) |
2 | sbci ZH,-high(PC) |
Der AVR kann ja schon viel, aber sowas nu auch wieder nich. Teil PC mal in PCH und PCL auf und addiere die dann zum Z-Register. Danach noch ein, zwei Worte abziehen, denn die Addition braucht ja auch mehrere Schritte.
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.