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!
@ 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.
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
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". ~
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.