mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Indirekte Adressierung Mega 88


Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich stehe irgendwie auf dem schlauch!
ich möchte eine einfache schleife haben die fünf mal die Werte aus dem 
Input Capture Register des Mega88 ausliest und nacheinander im speicher 
ableget. Ich habe schon einige erfahrung mit dem Motorola 68hc12.

mit den x und y register möchte ich die schleife realisieren.
in x soll die anzahl der schleifendurchgänge stehen und in y die adresse 
in die ich die werte schreibe. also x soll runtergzählt werden und bei y 
soll nach dem schreiben erhöt werden.

nun habe ich aus der hilfe von avr studio folgendes gelesen und versucht 
in code umzuwandeln:

clr r27
ldi r26,0x4
clr r29
clr r28
loop:
  sts Y+,ICR1L
  sts Y+,ICR1H
  dec X
  brne loop

funktioniert aber nicht.
was muss ich noch beachten. kann mir auch jemand sagen wo ich dazu 
textstellen finde?
vielen dank schon mal!

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du kannst den Inhalt von ICR1L/H nicht direkt speichern. Das geht nur 
über Register.

   in r16,ICR1L
   sts Y+,r16

MfG Spess

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> clr r27
> ldi r26,0x4
> clr r29
> clr r28
> loop:
>   sts Y+,ICR1L
>   sts Y+,ICR1H
>   dec X
>   brne loop

Fast. Du musst noch den Umweg über "Zwischenregister" gehen:
clr XH
ldi XL, 0x04
clr YH
clr YL
loop:
  in temp, ICR1L
  st Y+, temp
  in temp, ICR1H
  st Y+, temp
  sbiw XH:XL, 1
brne loop

Da du aber eh immer von ICR1 liest, kannst du dir den zweiten Pointer 
sparen und da irgendein Register verwenden (Das wolltest du mit 'x' 
vielleicht andeuten, ich bin vom X-Pointer ausgegangen -> r27:r26):
ldi counter, 4
clr YH
clr YL
loop:

Fast. Du musst noch den Umweg über "Zwischenregister" gehen:
[avrasm]
clr XH
ldi XL, 0x04
clr YH
clr YL
loop:
  in temp, ICR1L
  st Y+, temp
  in temp, ICR1H
  st Y+, temp
  dec counter
brne loop

Den Y-Pointer solltest du übrigens entsprechend initialisieren, 0 ist da 
wohl nicht so gescheit, damit schreibst du einfach irgendwohin (War 
AFAIK der IO-Bereich...).

EDIT:
@Spess53:

Das wird auch nicht funktionieren, sts erwartet als ersten Parameter 
eine Adresse (Konstante), keinen Pointer. Da braucht man st Y+.

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank!
werde das gleich mal ausprobieren!
danke nochmal!

Autor: markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in der zwischenzeit ist ja noch ein beitrag gekommen...

Ja mit x meinte ich X-Pointer!
vielen dank hat mir sehr geholfen!!
schönen abend noch!
markus

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.