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
© Copyright 2025 ExpyDoc