Hallo Ich habe mal mein zweites "Werk" in Assemblersprache angefügt und habe ein Problem beim Kompilieren mit AVR-Studio: Es erscheint ein Fehler in der Zeile: out OCR1A, ADCH ;Nimm den Wert des AD-Wandlers als PWM-Einstellung Offenbar geht es so nicht, Werte von einem Register in das andere zu "tun". Kann mir jemand einen Rat geben, wie ich sonst den Wert der in ADCH steht in OCR1A umlagern kann. Ratlos Paul
@ Paul Baumann (Gast) >Problem beim Kompilieren mit AVR-Studio: Es erscheint ein Fehler in der >Zeile: >out OCR1A, ADCH ;Nimm den Wert des AD-Wandlers als PWM-Einstellung Es wäre sinnvoll, die Fehlermeldung zu kopieren und hier zu posten. >Offenbar geht es so nicht, Werte von einem Register in das andere zu >"tun". Nein, geht auch nicht. Man kann nicht direkt ein SFR in eine anderes SFR kopieren. Das geht nur über den Umweg der CPU-Register. http://www.mikrocontroller.net/articles/Speicher#Register Steht auch in der Assemblerdoku zum out Befehl (lesen bildet).
1 | in r16,ADCH |
2 | out OCR1A,r16 |
MFg Falk
Hi Du kannst keine IO-Register direkt kopieren. Das geht nur über ein Register (r16-r31). in r16,io1 out oi2,r16 MfG Spess
Du kannst nicht direkt den Inhalt eines Ports in einen anderen Port kopieren. Also brauchst Du dafür ein Hilfsregister: in temp, adch out ocr1a, temp Gruß Michael
Danke an Euch Ratgeber! ;-) Das probiere ich gleich aus, R16 hat sowieso Langeweile. @Falk Ich habe versucht, den Denkfehler durch (ziemlich langes) Lesen des AVR-ASM-Tutorials zu erkennen. Es ist mein 2. Programm, was ich mit Assembler schreibe, sei nicht so "ruppig" mit einem alten Zausel. ;-) MfG Paul
@ Paul Baumann (Gast) >Ich habe versucht, den Denkfehler durch (ziemlich langes) Lesen des >AVR-ASM-Tutorials zu erkennen. Tja, wohl leider an der falschen Stelle gelesen. Das hier ist besser. http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf Lässt sich prima per Inhaltsverzeichnis navigieren. > Es ist mein 2. Programm, was ich mit >Assembler schreibe, sei nicht so "ruppig" mit einem alten Zausel. ;-) OK, OK, Gnade vor Recht. ;-) MFG Falk
In Ordnung, so läßt es sich kompilieren. @Falk Den Link habe ich mir gespeichert, aber ich bin ein ganz lausiger "Englischversteher" ;-), da war mir das andere Tutorial ganz angenehm. Eine andere Frage noch: Gibt es in AVR-Studio auch so schöne "Schieberegler" zum Simulieren von AD-Wandler-Eingaben wie in BASCOM? MfG Paul
Paul Baumann wrote: > Eine andere Frage noch: Gibt es in AVR-Studio auch so schöne > "Schieberegler" zum Simulieren von AD-Wandler-Eingaben wie in > BASCOM? Nein, gibt es nicht. Die komplette Analog-Peripherie wird vom Simulator nicht unterstützt.
> Du kannst keine IO-Register direkt kopieren. Das geht nur über ein > Register (r16-r31). > in r16,io1 > out oi2,r16 Nur zur Vollständigkeit: Das geht auch mit den unteren Registern r0-r16. Denn es finden dabei ja keine Konstantenzugriffe statt. ...
@Hannes Aha! Gut, das habe ich mir in mein Büchlein geschrieben. Mist ist eben nur, daß man das nicht alles schön simulieren kann. Morgen stecke ich alles mal auf ein Steckbrett, um zu sehen, ob es<in Natura geht. MfG Paul
Paul Baumann wrote: > @Hannes > Aha! Gut, das habe ich mir in mein Büchlein geschrieben. Gute Idee, dazu fehlt mir die Konsequenz... ;-( > > Mist ist eben nur, daß man das nicht alles schön simulieren kann. Man kann, aber eben nicht mit Schieberegler. Setze einen Haltepunkt (F9) auf den Befehl zum Einlesen des ADC. Dann fahre bis zum Haltepunkt (F5), dann manipuliere mit der Maus die Bits des ADC-(Doppel)registers und simuliere im Einzelschritt (F11) weiter. Ist vermutlich etwas umständlicher als ein SchieBÄÄÄHHregler, erfüllt aber seinen Zweck. > Morgen > stecke ich alles mal auf ein Steckbrett, um zu sehen, ob es<in Natura > geht. Viel Erfolg. > > MfG Paul MfG (Mit fettem Gesäß), Hannes
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.