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


von Roger P. (hpa)


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!

von ein anderer ich (Gast)


Lesenswert?


von Stefan B. (stefan) Benutzerseite


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.

von hans (Gast)


Lesenswert?

Für Assembler recht gut:

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

gruß hans

von Roger P. (hpa)


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

von Sinusgeek (Gast)


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

~

von Gast (Gast)


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.

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.