Hallo, Wir haben vor kurzem Angefangen was über den 8051 zu lernen und auch mit assembler programmierung angefangen und schreiben Programme für einen ADuC812 von Analog Devices. Wir sollen nun folgende Aufgaben bewältigen, aber leider steig ich da überhaupt nicht durch und würde mich sehr über eure Hilfe freuen: Aufgabe 2.1 Zählen von Tastendrücken; Ausgabe auf LED-Zeile Es soll ein Programm erstellt werden, das die einzelnen Tastendrücke auf T3 zählt und als Binär-Wert auf der LED-Zeile ausgibt. Zeichnen Sie ein Struktogramm für das Programm. Um einen Wert auf die LED-Zeile schreiben zu können, wird sie deklariert: pLED EQU 0F000h Der Datenpointer wird am Programmanfang mit der LED-Zeile initialisiert: mov DPTR, #pLED Innerhalb des Programms wird sie über den Datenpointer angesprochen: movx @DPTR,A Mit obiger Zeile wird der Inhalt des Akkus auf die LED-Zeile geschrieben. Jeder erkannte Tastendruck auf T3 soll in R1 gezählt und der Zählerstand soll innerhalb der Hauptschleife ständig ausgegeben werden (Achtung: LED-Zeile ist lowaktiv). Aufgabe 2.2 LED-Lauflicht Die LEDs des Standard-Erweiterungsboards sollen als Lauflicht gesteuert werden (der Reihe nach soll je eine Diode leuchten). Zeichnen Sie ein Struktogramm für das Programm und markieren Sie die Stelle, an der die Verzögerungsschleife eingefügt wird. Erstellen Sie drei Programme: a) ohne Verzögerungsschleife, b) mit einer Verzögerungsschleife nach jedem Schritt, c) mit geschachtelten Verzögerungsschleifen. Verwendete Adresse : pLED EQU 0F000h Bemerkung: Um das Blinken der LEDs wirklich mit dem Auge wahrnehmen zu können, müssen die Zeiten größenordnungsmäßig im Bereich zwischen einigen Zehntelsekunden bis zu wenigen Sekunden liegen. Dies soll durch Warteschleifen erreicht werden. Programmieren Sie zunächst ein Lauflicht ohne Verzögerung: Das Ergebnis ist eine nahezu konstante, jedoch insgesamt geringere Helligkeit, da das Auge zu träge ist, dem schnellen Hell-Dunkel- Wechsel zu folgen. Schätzen Sie ab, wie schnell die Zeiten für diesen Wechsel etwa sind. Hierzu muss man aus der Tabelle der Assemblerbefehle die Zahl der Maschinenzyklen entnehmen und addieren (Bei unserem Entwicklungsboard entspricht ein Maschinenzyklus einer Zeit von etwa 1 ms) Danke schonmal für eure Hilfe! Gruß, Oliver
Hab Ihr auch einen Lehrer? Wenn ja, dann löchert diesen solange bis ihr wisst wie es geht. Dafür ist er da.
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.