Aufgabenblatt 3

Maschinenorientierte Programmierung
Prof. Dr. Sven-Hendrik Voß
SoSe 16
13. Juni 2016
Laborübung 3
Abnahme (bitte vom Betreuer per Unterschrift bestätigen lassen)
Aufgabe 1
Aufgabe 2
Aufgabe 3
Aufgabe 4
Aufgabe 5
Hinweise zum Labortermin 3
Beachten Sie die bereits in den ersten zwei Terminen bekanntgegebenen, grundsätzlichen Hinweise für die Labortermine. Für alle Programmentwurfsaufgaben ist
der schon bekannte Ablauf einzuhalten. Dieser wird nun um einige obligatorische Schritte ergänzt, wenn es darum geht, die erstellten Programme auf der 8051
Labor-Hardware (STC 8051 Professional Kit) real zu erproben:
1. Erfassung und Analyse des Problems bzw. der zu lösenden Aufgabe
2. Formulierung eines geeigneten Lösungsweges (Algorithmus)
3. Umsetzung des Algorithmus in ein Programmablaufdiagramm
4. Programmierung des Codes in Assemblersprache
5. Ausführen und Testen des Programms in EdSim51 oder MC-Tools 5.2.0 (IDE
für ASEM-51, enthält auch einen Simulator).
6. meist Fehlersuche (= Debugging), iterativ ab Schritt 4...
7. wenn fehlerfrei: Übersetzung des erstellten Programms in Maschinenbefehle
durch den Assembler“ und Generierung einer *.hex - Datei mit dem Programm
”
MC-Tools 5.2.0
8. Übertragung der *.hex - Datei in den Codespeicher des STC 8051 mit Hilfe des
In-System Programmiertools STC ISP V486
9. evt. nochmal Debugging, iterativer Prozess der Schritte 4, 7 - 9
Achten Sie beim Schreiben darauf, dass Sie nur ASCII-Text ohne Formatierung und
Sonderzeichen erzeugen. Ansonsten gibt es Fehlermeldungen. Lesen Sie auch die Hin”
weise zur professionellen Assembler-Programmierung“. Die Arbeit mit realer Hardware ist meist weitaus zeitintensiver. Zum Gelingen der Laborübung ist 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 3
13. Juni 2016
Aufgabe 1
Kontrollfragen
1. Das Bit mit der Bitadresse 4Dh aus dem bitadressierbaren Bereich des internen
RAM des 8051 wird mit einem dafür geeigneten Befehl gesetzt. Welches Byte
ist damit beeinflußt worden (Adresse), und welches Bit dieses Bytes wurde gesetzt?
2. In welchen Registern kann die Adresse stehen, wenn Sie einen Wert aus dem
Akku ins externe RAM kopieren wollen? Es gibt zwei Möglichkeiten!
3. Kann mit den Befehlen push und pop auch auf den externen Datenspeicher
zugegriffen werden?
Aufgabe 2
Sie haben im Unterricht gelernt wie ein Mikrocontroller-Programm in Assemblersprache (Mnemonics) programmiert wird, von einem Assemblerprogramm (Assembler) assembliert, d.h. in Hex-Code umgesetzt, und anschließend anhand einer Hex-Datei auf
den Controller geladen wird. Um den Zusammenhang zwischen den Mnemonics und
der Maschinensprache weiter zu verdeutlichen und das Gelernte zu vertiefen, geht es
hier um eine manuelle Deassemblierung“. Folgender Speicherauszug aus dem Code
”
Memory des EdSim51 enthält den Programmcode eines vollständigen Programms. An
Adresse 00000h beginnt der erste Maschinenbefehl.
2
MOP - Laborübung 3
13. Juni 2016
1. Geben Sie das zugehörige Quellprogrammstück in Assemblersyntax an. Ziehen
Sie dazu die Befehlsliste für den Mikrocontroller 8051 zu Rate und notieren Sie
den resultierenden Programmcode. Das Ergebnis ist in Ihrem Protokoll festzuhalten.
2. Überprüfen Sie das theoretisch ermittelte Quellprogramm anhand einer Eingabe
im EdSim51. Lassen Sie sich dies abzeichnen.
3. Schauen Sie sich die Werte der 8051-internen Speicher- und Statusregister nach
Durchlauf des Programms (also zum Zeitpunkt des Programmendes) an. Erklären Sie die Werte in R0, R1 und A. Wieso steht im internen Datenspeicher
an Adresse 50h ein Wert ungleich Null?
4. Welche Funktion hat das Programm? Wie wird diese Funktion umgesetzt? Kommentieren Sie dazu die Quelltextzeilen aus Aufgabenteil 2a) in Ihrem Protokoll.
Aufgabe 3
Zählschleifen (oder Warteschleifen) sind für das hardwarenahe Programmieren
oft sehr hilfreich. Schleifen verwendet man, wenn bestimmte Anweisungen oder
Operationen beliebig oft wiederholt werden sollen oder wenn eine definierte Zeitspanne überbrückt werden muss, bsp. für die wahrnehmbare Ansteuerung von LEDs.
Eine bequeme Realisierung einer Warteschleife ist mit dem DJNZ-Befehl möglich.
Dieser Befehl dekrementiert ein gegebenes Register jeweils um eins und führt einen
Vergleich mit 0 durch. Folgendes Programm realisiert eine geschachtelte Zählschleife:
start:
MOV R1,#12
loop1:
MOV R0,#4
loop2:
DJNZ R0,loop2
DJNZ R1,loop1
end
1. Ermitteln Sie die genaue Laufzeit des angegebenen Programms. Gehen Sie davon aus, dass der Mikrocontroller mit einer Referenzfrequenz von 11,0592 MHz
betrieben wird und bedenken Sie das Verhältnis von Referenztakt zu Maschinenzyklus beim 8051.
2. Könnte die ermittelte Zeit auch mit einer einfachen, d.h. nicht verschachtelten
Schleife umgesetzt werden? Wenn ja, wie würde das Programm aussehen?
3. Geben Sie nun neue Zahlenwerte für R1 und R0 im oben gezeigten Programm
an, so dass der Controller für die Bearbeitung des Programms 133 ms benötigt.
3
MOP - Laborübung 3
13. Juni 2016
Aufgabe 4
Das in Aufgabenblatt 2, Aufgabe 4 gegebene Programm soll nun auf das STC 8051
Professional Kit portiert und ergänzt werden. Ziehen Sie für die Details zum Board
und Mikrocontroller folgende Dokumentationen zu Rate (zu finden auf der Internetseite zu dieser Veranstaltung):
• STC89C51RD+ Data Sheet (Datenblatt des Controllers)
• STC 8051 Professional Kit Schematic (Schaltplan des Boards)
Gehen Sie folgendermaßen vor:
1. Befassen Sie sich mit dem Schaltplan des Boards. Ermitteln Sie an welchen
Ports jeweils die LEDs und die Taster (die großen blauen) angeschlossen sind.
Wie müssen die LEDs angesteuert werden (low-aktiv mit 0 oder high-aktiv mit
1)? Wie reagieren die Taster (low-aktiv mit 0 oder high-aktiv mit 1)?
2. Modifizieren Sie das Programm mit den korrekten, ermittelten Portzuweisungen. Für den Taster verwenden Sie S19, für die LED R18 (siehe Schaltplan).
3. Die Taster auf dem Board sind nicht entprellt, d.h. beim Betätigen der Taster entsteht eine Reihe von Impulsen. Dies kann zu fehlerhaftem Verhalten des
Boards führen. Ergänzen Sie daher das Programm durch eine softwaremässige
Entprellung. Die Entprellung soll nach folgendem Prinzip erfolgen: Wenn erkannt wurde, dass der Taster gedrückt wurde, soll eine Pause von ca. 20ms mit
Hilfe einer Warteschleife eingefügt werden. Anschließend wird erneut überprüft,
ob der Taster immer noch gedrückt ist. Dieser Ablauf wird 3 mal wiederholt.
Damit kann letztlich sichergestellt werden, dass der Taster nicht mehr prellt.
Das STC 8051 Professional Kit wird mit einer Referenzfrequenz von 11,0592
MHz betrieben. Die Zeitdauer eines Maschinenzyklus für diese Frequenz haben Sie bereits in Aufgabe 3 berechnet. Wählen Sie dementsprechend für die
Verzögerungsschleife eine sinnvolle Größe (entsprechend 20 ms).
4. Testen Sie die Funktionalität des Programms im Simulator des MC-Tools 5.2.0.
Bedenken Sie, dass der Simulator nicht echtzeitfähig ist.
5. Nach erfolgreicher Simulation erweitern Sie nun die Funktionalität des Programms um Folgendes: Taster S19 soll die LED mit einmaliger Betätigung dauerhaft einschalten. Taster S18 soll die LED dauerhaft ausschalten. Taster S17
4
MOP - Laborübung 3
13. Juni 2016
versetzt die LED in einen Blinkzustand, in dem die LED im Abstand von ca.
100 ms 10 mal an und wieder aus geht. Für Warteschleifen u.ä. können Sie ihr
Programm mittels separater Subroutinen und entsprechender Funktionsaufrufe
strukturieren (siehe Hinweise zur Assembler-Programmierung und Befehlssatz
für entsprechende Befehle).
6. Zeichnen Sie einen vollständigen Programmablaufplan des Programms.
7. Verifizieren Sie die erweiterte Funktionalität des Programms anhand einer Simulation.
8. Fügen Sie zweckmäßige und erklärende Kommentare in Ihren erweiterten Assemblercode ein (Kommentare werden durch ein Semikolon eingeleitet).
9. Testen Sie nun die Funktionalität beider Programme auf dem STC 8051 Professional Kit. Generieren Sie dazu jeweils ein hex-File mit Hilfe des MCTools und
übertragen Sie dieses in den Programmspeicher des 8051 mit Hilfe des In-System
Programmier-Tools STC ISP V486. Lassen Sie sich die Vorführung abzeichnen.
Aufgabe 5
Das STC 8051 Professional Kit verfügt u.a. über einen Buzzer (englisch für Summer, Pieper). Dies ist ein elektrisch ansteuerbarer akustischer Signalgeber, der einen
Summ- bzw. Piepton erzeugt. Mittels dieser Komponente soll nun ein Drei-Ton”
Synthesizer“ gebaut werden. Halten Sie sich bei der Implementierung an folgende
Vorgehensweise:
1. Lösen Sie die vorderen zwei Rändelschrauben am STC 8051 Professional Kit
und öffnen Sie vorsichtig den Deckel. Verbinden Sie den Ausgang P3.7 des 8051
Mikrocontrollers mit dem Pin ”Bell” am J17. Ziehen Sie dazu ggf. den Schaltplan des Boards zu Rate.
2. Um mit einem Mikrocontroller Töne zu erzeugen, müssen an dem Ausgang, an
dem der Buzzer angeschlossen ist, Rechtecksignale mit der dem zu erzeugenden
Ton entsprechenden Periodendauer generiert werden. Berechnen Sie die Periodendauer, sowie die mittels einer Warteschleife zu überbrückende Dauer an
Maschinenzyklen für die Töne c4 , e4 und g4 .
Hinweis: Grundton a1 hat eine Frequenz von f=440 Hz. Eine Tonleiter mit 8
Tönen ist eine Oktave und entspricht einer Verdopplung der Frequenz. Eine
Liste der Frequenzen aller Töne der Klaviertastatur in der gleichstufigen Stimmung finden Sie im Anhang.
3. Erstellen Sie ein Programm, mit dem die Töne c4 , e4 , g4 (C-Dur Tonleiter) erzeugt werden können. Ermöglichen Sie es, dass diese mit Betätigung der Taster
S19 (c), S18 (e) und S17 (g) erklingen. Die Töne sollen so lange wiedergegeben
werden wie der jeweilige Taster gedrückt wird. Gleichzeitig soll das Aktivieren
der Taster auf der LED-Leiste sichtbar gemacht werden, d.h. für alle verwendeten Taster ist jeweils eine LED vorzusehen, die leuchtet, wenn der Taster
5
MOP - Laborübung 3
13. Juni 2016
gedrückt wird. Nehmen Sie das Programm aus Aufgabe 4 als Grundlage und
verwenden Sie die Rechenergebnisse aus Aufgabenteil 5b). Achten Sie insbesondere auf die Entprellung der Taster.
4. Zeichnen Sie einen Programmablaufplan für das Programm.
5. Versehen Sie Ihren geschriebenen Assemblercode mit erklärenden, sinnvollen
Kommentaren
6. Testen Sie die Funktionalität des Programms in EdSim51 oder im Simulator
des MC-Tools 5.2.0.
7. Nehmen Sie das Programm nun auf dem STC 8051 Professional Kit in Betrieb
und lassen Sie sich die Vorführung abzeichnen.
Zusatzaufgabe (freiwillig)
Erweitern Sie das Programm aus Aufgabe 5 dadurch, dass statt den Tastern S19, S18,
S17 das Tastenfeld (4x4 Keypad) links davon benutzt wird. Dort stehen Ihnen 16
Tasten zur Verfügung. Diese sollen mit den Grundtönen c4 bis d6 (unter Aussparung
der halben Töne) belegt werden. So haben Sie ausreichend Töne zur Verfügung, um
einfache Melodien zu spielen.
Die Ansteuerung des 4x4 Keypad ist etwas aufwendiger als das simple Einlesen der
Taster. Alle Tasten des 4x4 Keypads, also vier Zeilen und vier Spalten, hängen mit
beiden Enden an den Portpins des Port 1 (siehe auch Schaltplan des Boards). Insgesamt sind also 16 Tasten mit nur acht Anschlüssen verbunden. Für die Erfassung der
Tastenbetätigung empfiehlt sich folgende Vorgehensweise in mehreren Schritten:
Jeweils an eine der 4 Spalten wird ein 1-Signal und an die anderen Spalten ein 0-Signal
angelegt. Wurde in der Spalte eine Taste gedrückt, ändert sich der Signalzustand an
einem der 4 Zeilen-Anschlüsse von 0 auf 1. Hieraus kann die betätigte Taste ermittelt
werden. Nach Erkennen einer Tastenbetätigung wird auf das Loslassen der Taste
gewartet. Dazu wird an alle 4 Spalten ein 1-Signal angelegt. Nach Loslassen der Taste
haben alle Zeilen-Ausgänge wieder ein 0-Signal. Viel Erfolg!
6
MOP - Laborübung 3
Tastennummer
Tastenfarbe
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
weiß
weiß
schwarz
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
schwarz
weiß
weiß
schwarz
weiß
schwarz
weiß
13. Juni 2016
Notation
(englisch)
C8
B7
A#7/Bb7
A7
G#7/Ab7
G7
F#7/Gb7
F7
E7
D#7/Eb7
D7
C#7/Db7
C7
B6
A#6/Bb6
A6
G#6/Ab6
G6
F#6/Gb6
F6
E6
D#6/Eb6
D6
C#6/Db6
C6
B5
A#5/Bb5
A5
G#5/Ab5
G5
F#5/Gb5
F5
E5
D#5/Eb5
D5
C#5/Db5
C5
B4
A#4/Bb4
A4 Concert Pitch
G#4/Ab4
G4
F#4/Gb4
F4
E4
D#4/Eb4
D4
7
C#4/Db4
C4 Middle C
Notation
(deutsch)
c5
h4
ais4 /b4
a4
gis4 /as4
g4 /as4
fis4 /ges4
f4
e4
dis4 /es4
d4
cis4 /des4
c4
h3
ais3 /b3
a3 /b3
gis3 /as3
g3
fis3 /ges3
f3
e3
dis3 /es3
d3
cis3 /des3
c3
h2
ais2 /b2
a2
gis2 /as2
g2
fis2 /ges2
f2
e2
dis2 /es2
d2
cis2 /des2
c2
h1
ais1 b1
a1 Kammerton
gis1 /as1
g1
fis1 /ges1
f1
e1
dis1 /es1
d1
cis1 /des1
c1
Frequenz
(Kammerton 440Hz)
4186,01
3951,07
3729,31
3520,00
3322,44
3135,96
2959,96
2793,83
2637,02
2489,02
2349,32
2217,46
2093,00
1975,53
1864,66
1760,00
1661,22
1567,98
1479,98
1396,91
1318,51
1244,51
1174,66
1108,73
1046,50
987,767
932,328
880,000
830,609
783,991
739,989
698,456
659,255
622,254
587,330
554,365
523,251
493,883
466,164
440,000
415,305
391,995
369,994
349,228
329,628
311,127
293,665
277,183
261,626