www.mikrocontroller.net

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


Autor: Reennee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
hierher: subi ZL, low(-hierher)
sbci  ZH, high(-hierher)

Autor: Reennee (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reennee wrote:
> ich benutzte das um Zeitliche differenzen auszugleichen

geht einfacher:
;************************************************************************/
;*                                                                      */
;*                      Delay Macro 8 ... 65543 Cycle                   */
;*                                                                      */
;*              Author: Peter Dannegger                                 */
;*                                                                      */
;************************************************************************/
.listmac

;delay 8 ... 65543 cycle

.macro  mdelay
  ldi  r24, low( @0 - 8 )
  ldi  r25, high( @0 - 8 )
  sbiw  r24, 4
  brcc  pc - 1
  cpi  r24, 0xFD
  brcs  pc + 4
  breq  pc + 3
  cpi  r24, 0xFF
  breq  pc + 1
.endmacro

  mdelay  8

  mdelay  9

  mdelay  10

  mdelay  11

  mdelay  12

  mdelay  65543

  rjmp  pc


Peter

Autor: Haku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
subi  ZL,-low(PC)
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.