Einführung in die praktische Arbeit


Teil I: Der Assembler und Simulator

In diesem ersten Teil des Mikrorechner-Praktikums sollen Sie sich anhand einfacher Aufgaben mit der Bedienung des Assemblers und des Simulators vertraut machen. Drucken Sie sich dazu am besten die im PDF-Format vorgegebenen
Aufgabenstellungen aus. Alle darin erwähnten Vorlagedateien finden Sie im Unterverzeichnis "Programs" des Stammverzeichnisses dieser CD-ROM.


Teil II: Der Praktikumsrechner und seine Komponenten

Im zweiten Teil des Mikrorechner-Praktikums wollen wir Ihnen anhand von einfachen Versuchen zeigen, wie die wesentlichen Komponenten des Mikrorechners - CPU, Tastatur, Anzeige, Parallelport, Timer und V.24-Schnittstelle - programmiert werden können. Zu jedem Versuch entwicklen wir schrittweise einen Lösungsweg.

Wir beginnen mit einer Aufgabe, die zunächst zeigt, wie
Tastatur und Anzeige mit Hilfe der Monitorroutinen angesprochen werden können.

Versuch 1: Dezimalzähler


Gesucht ist ein Programm, das im Adreßfeld S5 - S2 der Anzeige einen 4-stelligen Dezimalzähler realisiert.

Im einzelnen soll das Programm:

  1. die Anzeige löschen,

  2. über die Tastatur einen 4-stelligen Startwert einlesen, wobei nur die Ziffern 0, 1, ..., 9 akzeptiert werden sollen, und diesen Startwert im Adreßfeld anzeigen,

  3. nach Betätigen der Funktionstaste '+' den Zählvorgang mit einer Zählfrequenz von (ungefähr) 1 Hz beginnen,

  4. nach Betätigen der Funktionstaste '-' den Zählvorgang solange stoppen, bis er durch die Taste '+' wieder gestartet wird,

  5. bei Erreichen des Endwertes '9999' mit dem Wert '0000' zyklisch weiterzählen.

Alle nicht genannten Funktionstasten sollen keine Wirkung haben. (Natürlich außer 'F4' und 'C'.)


Lösungsweg:

  1. Zeichnen Sie für die in der Aufgabenstellung skizzierte Lösung ein Flußdiagramm!
    Hier finden Sie einen Vorschlag für dieses Diagramm.

  2. Rufen Sie die Entwicklungsumgebung Ihrer Wahl (unter DOS oder Windows) auf und öffnen Sie mit dem Editor die Datei "Rahmen.asm", die Sie im Unterverzeichnis "Demos" finden.
    In dieser Datei sind bereits alle Deklarationen aufgeführt, die Sie für den Aufruf der Monitorroutinen und der Selektion der Baustein-Register benötigen. Sie können diese Datei daher für Ihre eigenen Lösungen als Programmrahmen (Template) benutzen.

  3. Geben Sie im Editor der IDE Ihr Assemblerprogramm ein und speichern Sie es unter dem Namen "Vers-1.asm".

  4. Assemblieren Sie das Programm und lassen Sie dabei ein Listing "Vers-1.lst" anlegen. Bei der Windows-Version ist die Erzeugung des Listings voreingestellt, bei der DOS-Version müssen Sie das unter dem Menuepunkt 'Projekt -> Parameter' einstellen. Das erzeugte Listing finden Sie im selben Unterverzeichnis wie die Quelldatei "Vers-1.asm".

  5. Rufen Sie den Simulator Ihrer Wahl (unter DOS oder Windows) auf. Laden Sie Ihr assembliertes Programm "Vers-1.hex" in den Simulator und lassen Sie es laufen.

  6. Zur Überprüfung wiederholen Sie nun die Schritte 4 und 5, indem Sie mit der IDE Ihrer Wahl (unter DOS oder Windows) die vorgegebene Musterlösung "V1-ml.asm" assemblieren, sich das Listing "V1-ml.lst" genau anschauen und das Ergebnis "V1-ml.hex" mit dem Simulator Ihrer Wahl (unter DOS oder Windows) austesten.

Hinweis: Falls Sie die Programme direkt von der CD-ROM aus starten, müssen Sie sich die Demo-Beispiele natürlich zunächst in einem Arbeitsverzeichnis auf der Festplatte abspeichern.



In der nächsten Aufgabe wollen wir uns nun um die Programmierung des Parallelport-Bausteins MC6821 kümmern.

Versuch 2: Parallelport


Schreiben Sie ein Programm, das
  1. die Anzeige löscht und danach zyklisch:

  2. nach dem Betätigen des Schalters an CB2 (durch die positive Flanke) den durch den Zustand der Schalter an den Porteingängen PB7,..., PB0 gegebenen Binärwert als Hexadezimalzahl im Datenfeld der Anzeige (S1, S0) darstellt,

  3. nach der Eingabe für eine Sekunde die Leuchtdiode am Ausgang CB2 aktiviert,

  4. über die Tastatur eine 2-stellige Hexadezimalzahl einliest und im Operationsfeld der Anzeige (S7, S6) darstellt,

  5. nach Betätigen des Schalters an CB1 die unter 4. eingelesene Hexadezimalzahl eine Sekunde lang am Port PB ausgibt und dabei die LED an CB2 aktiviert,

  6. mit 2. fortfährt.

Hinweis: Die Eingabe der 2-stelligen Zahl unter 4. muß mit einer Funktionstaste abgeschlossen werden, wenn Sie die vorgegebenen Monitorroutinen benutzen.

Lösungsweg:

  1. Zeichnen Sie für den in der Aufgabenstellung skizzierten Lösungweg ein Flußdiagramm!

  2. Erstellen Sie die Lösung in denselben Schritten, die im Versuch 1 beschrieben wurden. Nennen Sie Ihre Dateien "Vers-2.asm", "Vers-2.lst" und "Vers-2.hex".
    DOS-IDE, Windows-IDE
    DOS-Simulator, Windows-Simulator

  3. Überprüfen Sie Ihre Lösung mit den Musterlösungen "V2-ml.asm", "V2-ml.lst" und "V2-ml.hex".


Die nächste Aufgabe hat nun die Programmierung des Timer-Bausteins MC6840 zum Gegenstand. Dabei werden wir auch zum ersten Mal eine Interruptroutine programmieren. Schauen Sie sich dazu die Interruptvektor-Tabelle des Praktikumsrechners an.
Zur Erstellung einer Interrupt-Routine und zum Setzen des zugehörigen Vektors gehen Sie bitte wie folgt vor:

INTVEQU $.....; niederwertige Adresse des Interruptvektors in der Tabelle
  ;  
HP:LDD #INTER; Startadresse der Interruptroutine nach D laden
 STD INTV; abspeichern der Startadresse im Interruptvektor
  ;  
INTER:.....; Beginn der Interruptroutine
  ;  
 RTI ; Schluß der Interruptroutine


Versuch 3: Timer-Baustein


Der Praktikumsrechner soll in dieser Aufgabe einen Signalgenerator realsieren, der am Ausgang O3 des Timers #3 eine Rechteckschwingung ausgibt. Die Schwingungsdauer soll ein ganzzahliges Vielfache einer Grundimpulsdauer D sein und zyklisch an- und absteigend zwischen zwei vorgegebenen Grenzwerten moduliert werden. Als Grundimpulsdauer D sei der Wert D = 256 µs ms angenommen. Die Schwingungsdauer S nehme die Werte S = n * 2 * D für n = 1, ..., 256 an.

Im einzelnen soll das Hauptprogramm
  1. die Anzeige löschen,

  2. den Interruptvektor für Timer #3 modifizieren,

  3. den Timer #3 so initialisieren, daß er zyklisch zählt und der Ausgang sowie der Interrupt zum Prozessor aktiviert sind,

  4. ein Flag zur Erkennung der Halbwellen jeder Schwingung initialisieren,

  5. ein Flag zur Bestimmung der Modulationsrichtung 'Verlängern/Verkürzen der Schwingungsdauer' initialisieren,

  6. den Timer #3 mit dem Startwert (S = 2 * D) laden,

  7. den Timer #3 starten,

  8. in einer Endlosschleife auf das Auftreten von Interrupts warten.

  9. >

Die Interruptroutine soll
  1. zwischen den Halbwellen der Schwingung unterscheiden und nach jeder Vollschwingung:

  2. den Timer #3 stoppen,

  3. den Faktor n (s.o.) um 1 erhöhen oder erniedrigen und in der Anzeige S1, S0 darstellen,

  4. die Richtung 'Erhöhen/Erniedrigen' bei Erreichen der Grenzen umschalten und in der Anzeige S7, S6 geeignet darstellen,

  5. den Timer #3 erneut starten,

  6. das Interrupt-Flag löschen,

  7. ins Hauptprogramm zurückspringen.


Lösungsweg:

  1. Zeichnen Sie für den in der Aufgabenstellung skizzierten Lösungweg ein Flußdiagramm!

  2. Erstellen Sie die Lösung in denselben Schritten, die im Versuch 1 beschrieben wurden. Nennen Sie Ihre Dateien "Vers-3.asm", "Vers-3.lst" und "Vers-3.hex".
    DOS-IDE, Windows-IDE
    DOS-Simulator, Windows-Simulator

  3. Überprüfen Sie Ihre Lösung mit den Musterlösungen "V3-ml.asm", "V3-ml.lst" und "V3-ml.hex".