Forum: Mikrocontroller und Digitale Elektronik Indirekte Adressierung Mega 88


von markus (Gast)


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!

von Spess53 (Gast)


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

von Philipp B. (philipp_burch)


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+.

von markus (Gast)


Lesenswert?

vielen dank!
werde das gleich mal ausprobieren!
danke nochmal!

von markus (Gast)


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

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.