Indirekte Adressierung Mega 88

Gast #672241
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!
#672246
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:
1
clr XH
2
ldi XL, 0x04
3
clr YH
4
clr YL
5
loop:
6
  in temp, ICR1L
7
  st Y+, temp
8
  in temp, ICR1H
9
  st Y+, temp
10
  sbiw XH:XL, 1
11
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):
1
ldi counter, 4
2
clr YH
3
clr YL
4
loop:
5

6
Fast. Du musst noch den Umweg über "Zwischenregister" gehen:
7
[avrasm]
8
clr XH
9
ldi XL, 0x04
10
clr YH
11
clr YL
12
loop:
13
  in temp, ICR1L
14
  st Y+, temp
15
  in temp, ICR1H
16
  st Y+, temp
17
  dec counter
18
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+.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren