mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik wo kann ich Details zu Assembler finden (evtl. Tutorial)


Autor: Roger Petri (hpa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

seit ein paar Tagen bin ich stolzer Besitzer eines STK500 und fang jetzt 
an die berühmten Lämpchen blinken zu lassen usw. . Bei einigen Listings 
ist mir aufgefallen, dass ich bestimmte Bits eines Registers anscheinend 
so setzen kann:

; ADC initialisieren: Single Conversion, Vorteiler 128

    ldi     temp1, (1<<REFS0)                   ; Kanal 0, interne 
Referenzspannung 5V
    out     ADMUX, temp1
    ldi     temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
    out     ADCSRA, temp1

die Möglichkeit bistimmte Bits im ADCSRA so zu setzen ist mir nicht 
bekannt. Gibt es irgendwo im Netz eine Seite wo man solche Sachen (und 
vielleicht noch andere nützliche) nachlesen kann oder vielleicht ein 
Buch wo das erklärt wird?

Danke!

Autor: ein anderer ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Roger

Atmel hat die Datenblätter zu den AVRs online und den Assembler 
Instruction Set mit der Beschreibung, welche Assemblerbefehle verstanden 
werden. Das AVR Tutorial wurde ja schon genannt. In der Hilfe vom 
AVR-Studio sind auch Hinweise.

Bei den Assemblerbefehlen sind nur bestimmte Kombinationen von Anweisung 
und Operanden möglich. Das betrifft hier den Fall, wie man Konstanten in 
ein Prozessorregister schafft (z.B. mit ldi "LoaD Immediate").

ADCSRA wird zwar als Register bezeichnet, aber es ist genau genommen 
kein Prozessorregister, sondern ein im Speicherbereich abgebildetes 
Register der Hardwareperiferie.

Nach ADCSRA wird hier mit OUT geschrieben (je nach Lage des Registers im 
Speicher ist ggf. ein anderer Befehl nötig). Bei Out ist aber die 
direkte Angabe des Wertes als Operand nicht erlaubt, daher oben der 
Umweg über temp1 als Arbeitsregister.

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für Assembler recht gut:

http://www.avr-asm-tutorial.net/

gruß hans

Autor: Roger Petri (hpa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antworten :-).

Das Tutorial von Gerhard Schmidt (http://www.avr-asm-tutorial.net/) hab 
ich auch als Grundlage für meine ersten Gehversuche genommen aber da 
steht das oben genannte leider auch nicht drin. Naja, ich nehms mal 
einfach so hin und bin froh das ich es in einem Listing gefunden habe.

Gruß
Roger

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Durchblättere doch einfach mal die Hilfe des AVR-Studios. Da gibt es 
Kapitel über Direktiven, Operatoren des Präprozessors und Vieles mehr. 
Sämtliche erforderlichen Informationen sind da drin. Einfach mal etwas 
drin "surfen".

~

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>aber da steht das oben genannte leider auch nicht drin.

Ohne jetzt erkannt zu haben, worauf Deine Frage genau abzielt:

Im AVRStudio4 Menupunkt Hilfe --> AVRTools UserGuide

Dort Inhalt --> AVR Assembler --> User's Guide --> Expressions

Dort steht (unter anderem), was "<<" und "|" bedeuten.

Am bestens liest Du aber diesen User's Guide komplett. So viel ist es 
gar nicht, und dann kann Dich nix mehr erschüttern ;-)

Die Bezeichnungen der Bits "ADEN" und der Register "ADCRS" etc. kannst 
Du dem Register Summary ganz hinten im Datenblatt Deines Controllers 
entnehmen. Definiert sind die Kürzel in der DEF-Datei (z. B. M8.DEF für 
den ATmega8), die Du per Include in Deine Sourcedatei einbindest. Tipp: 
Mal im Editor öffnen und studieren.

Zu der Notation

ldi temp1, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)

gibts übrigens kaum eine bessere Alternative, weil man so wunderbar 
direkt sieht, welche Bits gesetzt sind, und weil man nur die 0 oder 1 an 
der passenden Stelle in eine 1 bzw. 0 zu verwandeln braucht, wenn man 
mal ein Bit ändern will.

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.