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!
Hi Du kannst den Inhalt von ICR1L/H nicht direkt speichern. Das geht nur über Register. in r16,ICR1L sts Y+,r16 MfG Spess
> 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+.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.