Hallo, ich habe das Fach Microcontroller im 4. Semester (Studiengang Elektrotechnik) und wir fangen jetzt an zu programmieren. ich bin blutiger Anfänger in Assembler. Wir verwenden den ATmega8 von Atmel und das myAVRMK2 nachfolgend ist ein Auszug aus einer Aufgabe, bei der eine LED leuchten soll. main: ldi r16 , LOW(RAMEND) ; Init Stackpointer Low out SPL , r16 ; init Stack ldi r16 , HIGH(RAMEND) ; init Stackpointer High out SPH , r16 ; init Stack sbi DDRB , 0 ; PORT B.0 = 1 Ausgang kann mir jemand grob schildern was hier vor sich geht? Ich weiß was LDI ist, und ich weiß ungefähr was ein Stackpointer ist (=ein Stapelspeicher) DDR ist das Register? und ich weiß das SBI bedeutet, es soll eine "1" ins Register für den Port B.0 gesetzt werden. Ich verstehe aber nicht was es mit dem Low(RAMEND) und dann High(RAMEND) auf sich hat. Ausserdem verstehe ich nicht was out SPL, r16 und out SPH, r16 bedeuten soll. Danke!
Der Stack wird einfach auf das obere Ende des RAMs initialisiert. Da der Stack rückwärts in das RAM läuft, ist das die allgemeine Vorgehensweise. Neuere AVRs machen das automatisch beim RESET.
DDRB ist ein sogenanntes "special function register", also keine gewöhnliche Speicherzelle, in die man einen Wert reinschreibt, und alles was passiert, ist dass der Wert auch beim Lesen wieder raus kommt. Der Wert, den Du auf DDRB schreibst wird vom Port B benutzt, um einzustellen welcher Pin Ausgang und welcher Eingang ist. Bei AVRs werden unter jeder Adresse 8 Bit adressiert. Da ein Bit pro Portpin ausreicht, passen also die Infos von 8 Portpins in das Register. Es ist nicht gesagt, dass immer alle 8 benutzt sind, oft liest man auch nicht den Wert zurück, den man hinein geschrieben hat. Manchmal steht auch eine Warnung im Datenblatt, dass man unbedingt nur den Wert 0 in bestimmte Bits schreiben soll, weil das Bit entweder eine undokumentierte Funktion besitzt oder für spätere Erweiterungen genutzt werden soll. Das ganze heißt memory mapped io. Im Gegensatz z.B. zum Z80, der eigene Bussteuerleitungen und Befehle hatte, um die Peripherie anzusprechen. Memory maaped hat den Vorteil, dass Du eigentlich alle Adressierungsarten hast, die es auch für normalen Speicher gibt. Nachteil ist, dass Du gnadenlos mit dem Stackpointer auf so einen Bereich zeigen kannst, oder wenn nicht wie beim AVR getrennt (Buch aufschlagen bei Harvard vs. von Neumann Architektur) den Inhalt der Peripherieregister der CPU als Programm unterjubeln kannst. Immer noch nicht verwirrt : Intel hat mit dem 8051 den Vogel abgeschossen und RAM mit memory mapped SFRs auf die selben Adressen gelegt. Ausgewählt wird durch die Adressierungsart. Die out-Befehle zähle ich jetzt mal als Adressierungsart, Du sprichst damit auch nur Speicherstellen unter einer anderen Nummer an, an die Du auch mit anderen Befehlen zum Speicherzugriff dran kommst.
Zum Nachschlagen immer praktisch - der AVR Befehlssatz: http://www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf
Zum Nachschlagen noch praktischer - der AVR Assembler Tutorial: https://www.mikrocontroller.net/articles/AVR-Tutorial und hier direkt zum Stack: https://www.mikrocontroller.net/articles/AVR-Tutorial:_Stack
Ostap A. schrieb: > Stapelspeicher) DDR ist das Register? und ich weiß das SBI bedeutet, es > soll eine "1" ins Register für den Port B.0 gesetzt werden. Ich verstehe DDRB ist ein Register. Näheres dazu im Datenblatt für ATMega8 > aber nicht was es mit dem Low(RAMEND) und dann High(RAMEND) auf sich RAMEND ist in der includierten Datei "m8def.inc" definiert. Ein Speicheradresse, deren Wert plausiebel wird, wenn man sich mit dem Speicheraufbau des Mega8 beschäftigt hat. > hat. Ausserdem verstehe ich nicht was out SPL, r16 und out SPH, r16 > bedeuten soll. Danke! SPL und SPH findet man auch in der "m8def.inc" definiert und im Datenblatt erklärt.
Wahnwitz von Antenne schrieb: > Au backe ... und das nach vier Silvestern !!! Uiii, und welch ein Wortwitz! Silvester statt Semester. Ha ha ha. Das habe ich ja noch nie gehört.
Naja - unser Elektrotechnik Prof war ein alter Amateurfunkhase und konnte quasi in Wellen denken und war ein Experte in Analogtechnik. Er gab aber offen zu keinen Schimmer von Digitaltechnik zu haben. Assembler konnte der garantiert nicht. Darum ist es ok im 4 Semester keinen Schimmer von Assembler zu haben :-)
Silvester sind geil, da kann man rumballern, saufen und dem Prof. ne explodierende Zigarre anbieten.
Hi Ostap A. schrieb: > habe das Fach Microcontroller im 4. Semester (Studiengang > Elektrotechnik) und wir fangen jetzt an zu programmieren. Warum wurden Euch zuvor nicht ein oder zwei Informationen zu den benutzten Steinchen gegeben? Da der µC in ASM programmiert werden soll, dürfte sich das Datenblatt zum µC für Dich/Euch bestens eignen - eigentlich werden Ihr Das bei jedem 2.ten Handgriff wieder wälzen. Wie Dir schon gesagt wurde, ist das DDRB-Register das Daten-Richtungs-Register (Data Direction Register für Port B). Somit hast Du den 'Pin' auf LOW (PortB wurde von Dir nicht 'angefasst' und sollte somit Null sein) geschaltet. Eine LED würde gegen Vcc leuchten (sofern ein richtig dimensionierter Vorwiderstand genutzt wird, ist aber hoffentlich bekannt). Wenn jetzt das PortB noch gesetzt wird, schaltest Du den Ausgang auf HIGH(=1) oder LOW(=0). Wenn Das DDR-Register auf 0 steht, ist der entsprechende Pin ein IN und mit dem 'Port' wird der PullUP eingeschaltet, oder eben nicht. Steht aber ALLES im Datenblatt des µC. Selber habe ich mir die Befehle (beim ATtiny45 2 Seiten) und die Register (eine Seite) ausgedruckt und mit den einzigebenden Werten erweitert so z.B., daß SBI (set Bit I/O-Register) als erstes Argument einen Wert 0-31 wünscht und als 2.ten Wert 0-7, also die Bitposition. Etwas anders dagegen SBR (set Bit Register) als erstes Register einen Wert 16-31 (nur die hohen Register), als zweiten Wert das Bitmuster, also Wert 0-255, also alle Bits, die gesetzt werden sollen 'auf ein Mal' (entspricht auch ORI, gleiche OpCode) Diese Listen wirst Du wirklich IMMER brauchen. Hilfreich ist auch, das PDF des Datenblatt offen zu haben, um schnell ein Register oder ein Registerbit suchen zu können, oder welcher Wert welcher Teiler ist (CS-Register der Timer). Wünsche Dir viel Erfolg und hoffe, daß auch Spaß dabei kommt. MfG
Patrick J. schrieb: > Warum wurden Euch zuvor nicht ein oder zwei Informationen zu den > benutzten Steinchen gegeben? Weil das normalerweise irgendwo in den Vorlesungen gesagt wird. Oder irgendwo im Skript steht. Oder weil es sich für eine Studenten des 4. Semesters vielleicht gehört, auch mal Google zu verwenden nicht um den nächsten Silverster zu finden sondern auch mal was zu dem System auf dem ich arbeite. Und weil Digitaltechnik normalerweise im 4. Semester nicht einfach so beginnt sondern in den Semstern vorher das Thema schon eingeführt wird. Und weil man den Praktikumstutor auch mal fragen kann. rgds
Hallo, nochmal danke für die zahlreichen antworten ich habe heute im labor erfahren dass wir diese "Sequenz" wohl einfach bei allen Programmen am Anfang verwenden. Es hat also nichts mit der eigentlichen Aufgabe zu tun. Ich werde trotzdem alle Antworten lesen ..vielleicht verstehe ich es ... Digitaltechnik hatten wir im 2. ten semester... Da haben wir KV-Diagramme gemacht.. Im 3. ten Semester haben wir in C/C++ programmiert. Ich muss ehrlich sagen, ich habe alles bestanden aber ich bin absolut kein Fan von Informatik. Wenn ich Mathe 4 statt Microcontroller wählen dürfte...ich würde es ohne zu überlegen machen. Ich hoffe ich kann mich öfter hier im Forum erkundigen, bei Verständnisfragen...da "Handbücher" etc am Anfang schon etwas überfordern. Eine vom Menschen formulierte Aussage kann da schon um Lichtjahre nach vorne bringen.
Hi Ostap A. schrieb: > Wenn ich Mathe 4 statt Microcontroller wählen dürfte...ich würde es ohne > zu überlegen machen. Verstehe ich nicht wirklich - Mathe ist 'rein logisch' - genau wie µC. In meinen Augen ist Mathe um Welten schwerer (umfangreicher), als das bisschen µC-Logik. Wenn gleich ich auch C++ (denke ich Mal) nicht viel abgewinnen kann, da erscheint mir Assembler 'sinniger' - muß aber Jeder für Sich selber ausmachen. (wobei ich mir anmaße, daß man als ASM-Progger eher einem C-Listing-Problem behilflich sein kann, als anders herum) Ostap A. schrieb: > Ich hoffe ich kann mich öfter hier im Forum erkundigen, bei > Verständnisfragen...da "Handbücher" etc am Anfang schon etwas > überfordern. ;) Da wir Dich da kaum dran hindern können, immer wieder gerne. Wäre aber trotzdem schön, wenn Du Dir die Bücher zuvor angeschaut hast und wirklich ein Problem und nicht die Hausaufgabe zu Lösen ist. MfG
Löten macht Spaß schrieb: > Neuere AVRs machen das automatisch beim RESET. Nur manchmal nicht im Datenblatt, vergl. Mega328/Mega328PB... Warum sich das nicht ordentlich dokumentieren lässt weiß der Geier.
Ostap A. schrieb: > Digitaltechnik hatten wir im 2. ten semester... Da haben wir > KV-Diagramme gemacht.. > Wenn ich Mathe 4 statt Microcontroller wählen dürfte...ich würde es ohne > zu überlegen machen. Also nicht erkannt dass ein Zustandsübergang im KV-Diagramm dasselbe ist wie eine Bifurkation einer Parameterkurve im Phasenraum :-) Und das Unrolling einer rekursiven Funktion im uC dasselbe wie die Lösung einer Differenzengleichung ...
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.