www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe zu AVR-Assembler-Befehl


Autor: Paul Baumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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).

in r16,ADCH
out OCR1A,r16

MFg
Falk

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du kannst keine IO-Register direkt kopieren. Das geht nur über ein 
Register (r16-r31).

  in r16,io1
  out oi2,r16

MfG Spess

Autor: Michael Nagler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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/...

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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sch.....ade!

Paul

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

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.