Laboraufgabenblatt 2 - Beuth Hochschule für Technik Berlin
Laboraufgabenblatt 2 - Beuth Hochschule für Technik Berlin
Laboraufgabenblatt 2 - Beuth Hochschule für Technik Berlin
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
FB VI, Labor für Digitaltechnik<br />
MOP: Laborübung 2<br />
Abnahme (bitte vom Betreuer per Unterschrift bestätigen lassen)<br />
Aufgabe 1 Aufgabe 2 Aufgabe 3 Aufgabe 4 Aufgabe 5<br />
Hinweise zum Labortermin 2<br />
Von jeder Gruppe ist pro Laborübung ein Laborbericht anzufertigen und pünktlich<br />
zu Beginn des nächsten Labortermins abzugeben. Die Laborberichte müssen alle<br />
im jeweiligen Übungsblatt aufgeführten Fragen behandeln. Erfassen und<br />
kommentieren Sie zudem alle Beobachtungen und Ergebnisse. Achten Sie bei<br />
Rechenaufgaben darauf, den Lösungweg kenntlich zu machen.<br />
Zusätzlich zur Abgabe des Berichts findet nach Fertigstellung der Aufgabe eine<br />
persönliche Rücksprache zur durchgeführten Übung mit beiden<br />
Gruppenmitgliedern statt. Lassen Sie sich dazu Ihre Anwesenheit, sowie die<br />
erfolgreiche praktische Abnahme auf dem jeweils aktuellen Aufgabenblatt<br />
quittieren. Drucken Sie dieses dazu aus und heften Sie es als Deckblatt zu Ihrem<br />
Laborbericht.<br />
Machen Sie sich mit der Befehlsliste für den Mikrocontroller 8051 vertraut. Diese<br />
stellt die Grundlage dieser und aller folgenden Laborübungen dar. Für alle<br />
Programmentwurfsaufgaben ist folgender Ablauf einzuhalten:<br />
1. Schritt: Erfassung und Analyse des Problems bzw. der zu lösenden Aufgabe<br />
2. Schritt: Formulierung eines geeigneten Lösungsweges (= Algorithmus)<br />
3. Schritt: Umsetzung des Algorithmus in ein Struktogramm oder Flussdiagramm<br />
(Programmablaufplan)<br />
4. Schritt: Programmierung des Codes in Assemblersprache mit den<br />
entsprechenden Mnemonics mit Hilfe eines geeigneten Editors<br />
(entweder EdSim51 oder Notepad++ (beherrscht ASM-Syntax))<br />
5. Schritt: Ausführen und Testen des Programms in EdSim51<br />
6. Schritt: meist Fehlersuche (= Debugging), iterativ ab Schritt 4...<br />
Achten Sie beim Schreiben darauf, dass Sie nur ASCII-Text ohne Formatierung und<br />
Sonderzeichen erzeugen. Ansonsten gibt es Fehlermeldungen.<br />
Und nun gutes Gelingen!<br />
MOP_Laboruebung_2.doc Seite 1 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß
Aufgaben<br />
1. Kontrollfragen<br />
a. Worin bestehen die grundlegenden Unterschiede zwischen Mikroprozessoren<br />
und Mikrocontrollern? Nennen Sie jeweils ein Einsatzbeispiel.<br />
______________________________________________________________<br />
______________________________________________________________<br />
b. Was sind Gemeinsamkeiten, was potentielle Unterschiede innerhalb<br />
sogenannter Prozessorfamilien?<br />
______________________________________________________________<br />
______________________________________________________________<br />
c. Sie haben im Unterricht die verschiedenen Adressierungsarten kennengelernt.<br />
Nennen Sie Vorteile der indirekten Adressierung.<br />
______________________________________________________________<br />
______________________________________________________________<br />
2. Der Akkumulator (A) nimmt beim 8051 eine zentrale Stellung ein. Sämtliche<br />
Berechnungen und Datentransfers benutzen den Akkumulator. Für arithmetische<br />
oder logische Operationen muss einer der Operanden im Akkumulator<br />
bereitgestellt werden. Das Ergebnis wird wiederum im Akkumulator abgelegt.<br />
Speziell für die Multiplikation und die Division existiert der Hilfsakkumulator (B).<br />
Der 8051 Mikrocontroller führe nun folgende Assembler-Befehle aus.<br />
Akkumulator- (A) und Hilfsakkumulator (B-Register) seien zu Beginn 0.<br />
MOV A,#55 ;__________________________________<br />
ADD A,#7 ;__________________________________<br />
A=0___h B=0___h<br />
A=0___h B=0___h<br />
MOV B,A ;__________________________________ A=0___h B=0___h<br />
MOV A,#78 ;__________________________________<br />
A=0___h B=0___h<br />
MUL AB ;__________________________________ A=0___h B=0___h<br />
a. Kommentieren Sie jede Befehlszeile mit der Funktionsbeschreibung und geben<br />
Sie jeweils an, welchen Wert Akkumulator und B-Register nach der<br />
Befehlsausführung besitzen. Nutzen Sie dazu auch die Befehlsliste für den<br />
Mikrocontroller 8051.<br />
MOP_Laboruebung_2.doc Seite 2 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß
. Welche mathematische Berechnung wird ausgeführt? (mathematischer Term)<br />
______________________________________________________________<br />
c. Welche Assemblerbefehle müssen ausgeführt werden, um folgenden Ausdruck<br />
zu berechnen (Rx sind Register)?<br />
R4 = R3 / [ (R0 - R1) * R2 ]<br />
Nutzen Sie wiederum die Befehlsliste des 8051 als Referenz und orientieren<br />
Sie sich an der Vorgehensweise der Aufgabe 2. Kommentieren Sie jeweils die<br />
Funktion jedes Befehls. Zur Vereinfachung wird angenommen, dass das<br />
Produkt kleiner als 256 ist.<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
______________ ; _________________________________<br />
3. Die folgenden Hexadezimalzahlen sollen addiert werden: 96h und 5Dh.<br />
a. Wandeln Sie die Hexadezimalzahlen in Dualzahlen um.<br />
b. Führen Sie die Addition schriftlich binär aus.<br />
c. Berechnen Sie, ob ein Carry (Übertrag?), Hilfs-Carry (auch Auxiliary Carry, d.h.<br />
Übertrag im unteren Halbbyte?) oder ein Overflow (Überlauf) bei dieser<br />
Rechenoperation eintritt.<br />
d. Geben Sie zu der obengenannten Addition die zur Ausführung in<br />
Assemblersyntax notwendigen Instruktionen an. Orientieren Sie sich dafür<br />
wieder an der Befehlsliste für den Mikrocontroller 8051. (Erinnerung: Der 8051<br />
ist eine Akkumulatormaschine)<br />
e. Führen Sie das unter 3 d) erstellte Programm in EdSim51 aus. Carry Flag,<br />
Auxiliary Carry Flag und Overflow Flag sind Bestandteil des Program Status<br />
Word (PSW) Registers. In diesem Register sind mehrere Kennzeichnungsbits<br />
zusammengefaßt, die Auskunft über den Zustand der CPU oder das Ergebnis<br />
einer Operation geben. Verrsuchen Sie, die Werte im PSW in der Simulation<br />
nachzuvollziehen. Lassen Sie sich die Vorführung abzeichnen.<br />
f. Wandeln Sie die Zahlen und das Ergebnis in Dezimalzahlen mit bzw. ohne<br />
Vorzeichen um und erläutern Sie die Unterschiede.<br />
g. Ließe sich mit dem 8051 (8-Bit Mikrocontroller) auch eine 16 Bit Addition<br />
durchführen. Wenn ja, wie?<br />
MOP_Laboruebung_2.doc Seite 3 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß
4. Eine LED soll durch einen Taster abwechselnd ein- und ausgeschaltet werden.<br />
Die LED wird dazu in Durchlassrichtung zwischen Port P1.7 und High (+5V) gelegt<br />
(siehe EdSim51 Schaltplan). Der Taster liegt zwischen Port P2.3 und Low<br />
(Masse). Grob skizziert lässt sich diese Aufgabe mit folgendem Programm lösen:<br />
start:<br />
SETB xxxx ;LED initialisieren (ausschalten)<br />
SETB xxxx ;Taster als Input konfigurieren (high)<br />
main:<br />
JNB xxxx,ein ;Falls Taster betaetigt, LED EIN<br />
JB xxxx,aus ;Falls Taster nicht betaetigt, LED aus<br />
JMP main<br />
ein:<br />
CLR xxxx<br />
JMP main<br />
aus:<br />
SETB xxxx<br />
JMP main<br />
end<br />
;LED an<br />
;LED aus<br />
Gehen Sie nun wie folgt vor:<br />
a. Ergänzen Sie die Lücken xxxx im gezeigten Assembler-Code. Achten Sie<br />
insbesondere auf die korrekte Pin- und aktive Pegelzuordnung.<br />
b. Markieren Sie im EdSim Schaltplan (Abbildung 1) farblich, welche Ports<br />
geschaltet werden.<br />
c. Vergegenwärtigen Sie sich wie das Programm funktioniert. Simulieren Sie das<br />
Programm anschließend in EdSim51 und erläutern Sie die Funktionalität.<br />
Lassen Sie sich die Vorführung abzeichnen.<br />
d. Wozu wird hier der Befehl JMP verwendet? Sie werden feststellen, dass es<br />
diesen Befehl im Befehlsumfang des 8051 so gar nicht gibt. Analysieren Sie<br />
den Assembler Code im Code Memory Fenster und nennen sie anhand des<br />
ermittelten Hexcodes den verwendeten Befehl.<br />
e. Simulieren Sie das Programm noch einmal und achten Sie auf den<br />
Befehlszähler (PC: Program Counter). Kommentieren Sie nun die JMP Befehle<br />
in dem Programm aus und beobachten Sie was passiert, wenn Sie das<br />
Programm nun simulieren. Wie ist dieses Verhalten zu erklären?<br />
f. Ein Programmablaufplan (auch: Struktogramm) dient der grafischen Darstellung<br />
von Codesequenzen und Verzweigungen. Erstellen Sie zu diesem Assembler-<br />
Programm einen Programmablaufplan und tragen Sie neben dem Ablaufplan<br />
die entsprechenden Assembler-Befehle des Programms ein. Zur Erleichterung<br />
ist das Gerüst des Ablaufdiagramms bereits in Abbildung 2 vorskizziert.<br />
MOP_Laboruebung_2.doc Seite 4 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß
Abbildung 1: EdSim Schaltplan<br />
Abbildung 2: Gerüst des Programmablaufplans<br />
MOP_Laboruebung_2.doc Seite 5 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß
5. Wandeln Sie Ihr in Pseudocode geschriebenes Programm aus Laborübung 1 in<br />
richtige Assemblersyntax um und verfizieren Sie das Resultat in EdSim51. Für die<br />
geeigneten Assembler-Befehle ziehen Sie wiederum die Befehlsliste für den<br />
Mikrocontroller 8051 zu Rate. Beachten Sie auch die Hinweise zu diesem<br />
Labortermin (vor allem im Hinblick auf die Einhaltung des vorgeschrieben<br />
Ablaufs).<br />
Gehen Sie von folgenden konkreten Werten aus: Die Grundseite des ersten<br />
Dreiecks beträgt 16 [Einheiten], die darauf senkrecht stehende Höhe beträgt 7<br />
[Einheiten]. Das zweite Dreieck hat eine Grundseitenlänge von 12 [Einheiten] und<br />
die darauf senkrecht stehende Höhe dieses Dreiecks beläuft sich auf 9 [Einheiten].<br />
Das Ergebnis der Rechnung soll letztendlich als Binärwert auf der LED-Kette<br />
angezeigt werden (LED leuchtet = 1, LED leuchtet nicht = 0). Für die<br />
Ausgangswerte, alle Zwischenergebnisse, sowie das Endergebnis ist eine<br />
Speicherung im internen RAM vorzusehen. Lassen Sie sich die Vorführung<br />
abzeichnen.<br />
Hinweis: Zum Anzeigen eines Wertes auf der LED-Kette (Port 1) reicht eine<br />
einfache MOV Anweisung mit der Angabe des darzustellenden Wertes aus. Um<br />
beispielsweise den Wert 16 auf der LED-Kette anzuzeigen, würde man folgenden<br />
Assembler-Code verwenden.<br />
MOV P1, #16<br />
Zusatzaufgabe<br />
Schreiben Sie ein Assemblerprogramm für die Volumenberechnung einer<br />
Pyramide. Gehen Sie dabei von einer quadratischen Pyramide aus. Eine<br />
Seitenlänge der Grundfäche beträgt 6 [Einheiten]. Die Höhe beträgt 3 [Einheiten].<br />
Das Ergebnis der Rechnung soll wie in Aufgabe 5 als Binärwert auf der LED-Kette<br />
angezeigt werden. Für die Ausgangswerte, alle Zwischenergebnisse, sowie das<br />
Endergebnis ist wieder eine Speicherung im internen RAM vorzusehen.<br />
MOP_Laboruebung_2.doc Seite 6 von 6 <strong>Beuth</strong> <strong>Hochschule</strong> <strong>Berlin</strong><br />
30.10.2013 Prof. Dr. Sven-Hendrik Voß