Forum: Mikrocontroller und Digitale Elektronik AVR PC zum Z-Register addieren


von Reennee (Gast)


Lesenswert?

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?

von Michael U. (amiga)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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)

von Reennee (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Haku (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.