Aufgabenblatt 5

Maschinenorientierte Programmierung
Prof. Dr. Sven-Hendrik Voß
SoSe 16
27. Juni 2016
Laborübung 5
Abnahme (bitte vom Betreuer per Unterschrift bestätigen lassen)
Aufgabe 1
Aufgabe 2
Aufgabe 3
Aufgabe 4
Hinweise zum Labortermin 5
Beachten Sie die bereits bekannten grundsätzlichen Hinweise für die Labortermine. Für alle Programmentwurfsaufgaben ist der schon bekannte Ablauf einzuhalten.
Achten Sie insbesondere auf die rechtzeitige Abgabe Ihres Laborberichts und
Vollständigkeit der Unterlagen. Dazu zählen u.a. die Beantwortung aller behandelten Fragen unter Aufzeigung des Lösungsweges, Programmablaufpläne und kommentierter Code! Die Abnahme der Laborleistung erfolgt im Rahmen einer praktischen Vorführung auf der Hardware! Diese ist obligatorisch und muss vom Betreuer
abgenommen und gegengezeichnet werden.
Wie immer ist zum Gelingen der Laborübung eine gute Vorbereitung vorab unerlässlich.
Markierte Aufgaben sind als Vorbereitung zu dem Termin vorab zu bearbeiten
(Hausaufgabe) und am Anfang des Labortermins vorzuzeigen
1
MOP - Laborübung 5
27. Juni 2016
Aufgabe 1
Kontrollfragen
1. Warum ist im Sekundärmodus des 8051 ein ALE Signal erforderlich? Und was
müsste man am Pinning des 8051 ändern, um die Leitung ALE überflüssig zu
machen?
2. Welchen Vorteil hat die Verwendung von Timer und Interrupt für ein System?
Warum ist es problematisch, viele Interrupts in einem System zu aktivieren?
3. Was ist der Unterschied zwischen dem Befehl RET und dem Befehl RETI?
Aufgabe 2
Aufgabenteil 1) bis 3)
Diese Aufgabe gilt als Vorbereitung auf die nachfolgende, in der Sie einen elektronischen Würfel programmieren werden. Hier geht es zunächst nur um die Realisierung
einer Ausgabe. Die LED-Dotmatrix auf dem STC 8051 Professional Kit soll für die
Anzeige der Würfelaugen entsprechend folgender Darstellung genutzt werden:
1. Für die Ausgabe auf der LED-Dotmatrix sind einige Vorüberlegungen nötig.
Füllen Sie zunächst die vorbereiteten Matrixdarstellungen mit den Würfelzahlen 1 - 6 aus. Für die Würfelzahl 5 ist dies bereits beispielhaft vorgegeben.
Daneben schreiben Sie (ebenfalls wie im Beispiel) spaltenweise analog dazu die
Binärwerte, die das Muster repräsentieren.
2
MOP - Laborübung 5
27. Juni 2016
Die Ansteuerung der LED-Matrix erfolgt (ähnlich wie die 7-Segment-Anzeigen) im
Zeitmultiplex-Verfahren, und zwar Spalte für Spalte. Laut Schaltplan ist die Matrix
über Port 0 und Port 2 mit dem Controller verbunden.
Zur Aktivierung einer Spalte der LED-Matrix wird diese low-aktiv mit einer logischen
3
MOP - Laborübung 5
27. Juni 2016
0 angesteuert. Es wird jeweils immer nur eine Spalte auf einmal aktiviert, die anderen sind mit logisch 1 inaktiv geschaltet. Dies geschieht über Port 2. Die 8 Spalten
entsprechen dabei genau der Bitbreite 8 des Ports. Während über Port 2 die aktive
Spalte ausgewählt ist, müssen an Port 0 zeitgleich die darzustellenden Daten anliegen.
Port 2 entspricht damit der Darstellung der soeben ermittelten Binärwerte für jede
Spalte.
Um beispielsweise die erste Spalte von der Würfelzahl 5 auszugeben, würde man Port
2 und Port 0 folgendermaßen setzen:
MOV P1,#11111110b
MOV P0,#11000011b
; Spalte 1 auswählen
; Spalte 1 Daten
Damit man die Matrix mit dem Auge als statisch wahrnehmen kann, folgt dann wie
gewohnt eine kurze Warteschleife, bevor man mit der nächsten Spalte fortfährt:
MOV P2,#11111101b
MOV P0,#11000011b
; Spalte 2 auswählen
; Spalte 2 Daten
; und so weiter
Da das Vorgehen per Direktwertzuweisung für alle darzustellenden Würfelaugen unpraktikabel ist, ist das Speichern der auszugebenden Werte in einer Lookup Table
vorzuziehen. Diese Methode haben wir bereits in Aufgabenblatt 4 kennengelernt.
Um Ihnen den Einstieg zu erleichtern, sei hier ein Beispielprogramm gegeben, das die
Würfelzahl 5 per Lookup Table darstellt.
ORG 000h
start:
MOV DPTR,#50h
MOV R0,#00h
MOV R2,#11111110b
main:
MOV A,R0
ACALL output
MOV A,R2
RL A
MOV R2,A
INC R0
ACALL delay
CJNE R0,#8,main
MOV R0,#00h
SJMP main
delay:
MOV R6,#255
here:
DJNZ R6,here
RET
output:
MOVC A,@A+DPTR
4
MOP - Laborübung 5
27. Juni 2016
MOV P0,A
MOV P2,R2
RET
ORG 50h
DB 11000011b, 11000011b, 00000000b, 00011000b
DB 00011000b, 00000000b, 11000011b, 11000011b
END
2. Untersuchen Sie wie dieses Programm funktioniert. Zum Verstehen hilft es Ihnen, wenn Sie alle Quelltextzeilen des Programms kommentieren.
3. Erweitern Sie das Beispielprogramm um die Darstellung aller möglichen Würfelaugen. Die Darstellung soll ca. jede Sekunde umschalten. Realisieren Sie dies mit
Warteschleifen.
4. Simulieren Sie die Funktionalität im Simulator des MC-Tools 5.2.0. und beobachten Sie die entsprechenden Ausgabeports des Controllers (Port 0 und Port
2). Für die Simulation ist es ratsam die Warteschleife auszukommentieren.
5. Testen Sie das Programm nun auf dem STC 8051 Professional Kit und lassen
Sie sich die Vorführung abzeichnen.
Aufgabe 3
Machen Sie sich eingehend mit der Interrupt-Programmierung beim 8051 vertraut und
wenden Sie Ihr Wissen darauf an, einen elektronischen Würfel zu programmieren, der
durch einen Taster interruptgesteuert eine Zufallszahl zwischen 1 und 6 ausgibt.
Setzen Sie den Taster S19 zum Auslösen des externen Interrupts (neg. Flanke) ein, um
die Würfelzahl“ auf der LED-Dotmatrix des STC 8051 Professional Kits auszugeben.
”
Achten Sie darauf, dass der Würfel gerecht ist. Die Wahrscheinlichkeit eine bestimmte
Zahl zu erhalten, soll für alle Zahlen gleichgroß sein. Gehen Sie bei dieser Aufgabe
wie folgt vor:
1. Ermitteln Sie zunächst wieviele externe Interrupteingänge es beim klassischen
8051 Mikrocontroller gibt und an welchen Ports sie liegen. Mit welchem Interrupteingang ist Taster S19 verbunden?
2. Entwickeln Sie nun gemäß der geforderten Funktionalität einen Programmablaufplan für das Programm. Die Ausgabe der Würfelzahl auf der LED-Dotmatrix
können Sie abstrahieren und in einem Block zusammenfassen.
3. Erstellen Sie nun das vollständige Programm in Assembler, das Sie zunächst
im EdSim51 oder dem internen Simulator des MC-51 in Betrieb nehmen und
die Funktionalität per Simulation verifizieren. Beachten Sie die Hilfestellung am
Ende der Aufgabenbeschreibung.
5
MOP - Laborübung 5
27. Juni 2016
4. Kommentieren Sie den Code. Eruiren Sie anschließend, ob Ihr Programm der
Forderung nach einer gleichen Wahrscheinlichkeit für jede Zahl nachkommt und
begründen Sie Ihre Schlussfolgerung plausibel.
5. Nach erfolgreicher Simulation portieren Sie ihr Programm auf das STC 8051
Professional Kit und testen Sie es. Lassen Sie sich die Vorführung abzeichnen.
Kleine Hilfestellung: Für die Lösung der Aufgabe empfiehlt sich der Ansatz, dass
im Hauptprogramm ein Zählregister z.B. zyklisch von 1 bis 6 zählt und der Taster
den (externen) Interrupt auslöst, in dessen Service Routine der aktuelle Wert des
Zählregisters ausgewertet wird.
Dieser Zählwert (1, 2, 3, 4, 5 oder 6) kann in der Lookup Table als Indexwert für
die Darstellung auf dem Ausgangsport (LED-Dotmatrix) genutzt werden. Es gilt zu
beachten, dass für die Darstellung einer Würfelzahl immer 8 Bytes in der Lookup
Table verwendet werden. Der Index muss also also die aus der Table zu lesenden Daten
jeweils in Schritten von 8 referenzieren. (Wie realisiert man das am einfachsten?)
Da der Zählerstand sehr schnell wechselt und zum Zeitpunkt des Tastendrucks dem
Benutzer unbekannt ist, kann das Ergebnis als zufällig betrachtet werden. Bei der
Umsetzung ist darauf zu achten, dass der Inhalt des Zählregisters nie den gültigen
Zahlenbereich (z.B. 1 bis 6) verlässt, während ein Interrupt passieren kann.
Aufgabe 4
Timer ermöglichen das Zählen externer Impulse oder messen Zeiten zwischen Ereignissen. Eine beliebte Anwendung von Timern ist auch die Puls-Weiten-Modulation
(PWM). In dieser Aufgabe soll per PWM eine LED abwechselnd hell und dunkel
gedimmt werden.
Das Dimmen von LEDs erfolgt über die Variation ihres Versorgungsstroms. Bei geringerem Strom ist die Helligkeit geringer, bei höhererem Strom entsprechend heller. Anstatt den Strom abzusenken, ist es auch möglich die volle Stromstärke über einen geringeren Zeitraum anzulegen. Da der Stromfluss mit einem Vorwiderstand eingestellt
wird, ist durch das Ohmsche Gesetz dieser Stromfluss bei konstantem Widerstand
proportional zur Höhe der Versorgungsspannung. Durch das Ein- und Ausschalten
von Portpins können wir konstante Spannungen in der Zeit variieren.
Genau das ist das Prinzip einer PWM. Hier geht es also um die Erzeugung von
Pulsen mit einem definiertem Puls/Pausen-Verhältnis. Dazu soll Timer 0 in Modus
2 (8 Bit Auto-Reload) mit Interrupt verwendet werden. Die Werte für die High- und
Low-Pegeldauer sollen so gewählt werden, dass die Gesamtverzögerung immer gleich
bleibt. Wenn also für die High-Pegeldauer der Wert X in TH0 geladen wird, wird
TH0 für die Low-Pegeldauer mit 255-X beschrieben, so dass also insgesamt immer
255 Zählwerte verwendet werden. Gedimmt werden soll die oberste LED der LEDKette auf dem STC 8051 Professional Kit (P0.0). Gehen Sie nun folgendermaßen
vor:
1. Das STC 8051 Professional Kit wird mit einer Referenzfrequenz von 11,0592
6
MOP - Laborübung 5
27. Juni 2016
MHz betrieben. Bei Überlauf der Zählregister wird ein Interrupt ausgelöst. Wie
lang ist der Zeitabstand zwischen zwei von Timer 0 ausgelösten Interrupts bei
frei laufendem 16-Bit-Timer (Timer Mode 1)?
2. Wie lang ist der Zeitabstand zwischen zwei von Timer 0 ausgelösten Interrupts
bei frei laufendem 8-Bit-Timer (Timer Mode 2, Reload=0)?
3. Wird der 8-Bit Timerwert vom Minimal- zum Maximalwert variiert, welche
Dauer hat dann der resultierende kürzeste und längste Impuls?
4. Entwickeln Sie einen Programmablaufplan für das Programm. Orientieren Sie
sich dabei an folgendem Prinzip: Im Hauptprogramm sollen zunächst die Timerund Interrupt-Register initialisiert werden. Danach verweilt dieses in einer Dauerschleife. Die Timer ISR kümmert sich um die PWM im Hintergrund.
Die Breite der PWM soll durch ein Registerwert (bspw. R0) definiert sein, der
sich sukzessive von 0 angefangen erhöht bis zum Maximalwert (255). Danach
soll er wieder schrittweise bis 0 dekrementiert werden. Auf diese Weise kommt
das abwechselnde Hell-Dunkel-Dimmen zustande. R0 = 0 resultiert in ca. 0 V,
bei R0 = 255 erhalten wir ca. 5 V.
5. Erstellen Sie nun das vollständige Programm in Assembler, das Sie zunächst im
EdSim51 oder dem internen Simulator des MC-51 in Betrieb nehmen und die
Funktionalität per Simulation verifizieren...
6. Kommentieren Sie den Code.
7. Nach erfolgreicher Simulation portieren Sie ihr Programm auf das STC 8051
Professional Kit und testen Sie es. Lassen Sie sich die Vorführung abzeichnen.
7