Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.


Experiment: Parallel ablaufende Programme: Sinusgenerator und Lauflicht

Im folgenden Experiment soll die Implementation von zwei Programmen, die sowohl zeitlich als auch inhaltlich voneinander unabhängig ablaufen, gezeigt werden. Es soll sowohl der im vorigen Experiment gezeigte Sinusgenerator als auch ein Lauflicht quasi parallel betrieben werden. Dazu wird das Hauptprogramm des Sinusgenerators, das ja nur aus einer Warteschleife besteht, durch ein Programm ersetzt, das die Lauflichtsteuerung übernimmt.

Zum Aufbau des Experiments werden wie im vorigen Beispiel die Platinen uP1, ADAC12 und DIGMLT verwendet (Abbildung). Der NMI-Eingang des Mikrocomputers wird mit dem Rechteckgenerator der Platine DIGMLT verbunden. Außerdem wird die 8-Bit-Parallelschnittstelle des Mikrocomputers (POUT) mit den LEDs der Platine DIGMLT verbunden.

Aufbau des Experiments 'Parallele Programme'

Das folgende Listing zeigt das kurze Hauptprogramm für das Lauflicht:

;===================================================
;---- Experiment: Sinusgenerator, Version B --------
;===================================================
;
            .GLOBAL LFLSIN
LFLSIN:     LD      HL,SINTAB   ;Sinustabelle laden
            LD      DE,FNCBUF
            LD      BC,512
            LDIR
            LD      HL,FNCBUF   ;Zeiger initialisieren
            LD      (FBFPOI),HL
            LD      A,1         ;Bit 0 = 1
$1:         OUT     (POUT),A    ;Ausgabe auf LEDs
            RLCA                ;Bit rotieren
            LD      HL,10000    ;70 ms warten
            CALL    DELAY
            JR      $1          ;unendliche Schleife

Nach der Initialisierung des Zeigers auf die Sinustabelle wird das Register A auf den Wert $01 gesetzt (Bit 0 = HIGH). Dieses Bit wird in der nachfolgenden Schleife rotiert, wobei nach jedem Schieben des Bits eine Warteschleife von 70 ms aufgerufen wird.

Sperrt man den NMI-Eingang der CPU (keine Verbindung mit dem Rechteckgenerator), so kann das Lauflichtprogramm ungestört ablaufen und man sieht eine leuchtende LED jeweils von links nach rechts laufen. Hängt man nun an den NMI-Eingang den Rechteckgenerator, der auf eine niedrige Frequenz (z.B. 1 kHz) eingestellt ist, so wird am DA-Wandler die Sinuskurve in gewohnter Weise ausgegeben. Das Lauflicht läuft scheinbar unbeirrt weiter. Erhöht man die Frequenz des Rechteckgenerators, so erhöht sich entsprechend auch die Frequenz des Sinussignals, das Lauflicht wird aber langsamer - und zwar umso mehr, je höher die Frequenz des Rechteckgenerators wird.

Die Erzeugung des Sinussignals verbraucht natürlich Rechenzeit (ca. 100 µsek pro Interruptaufruf), die dann dem Programm, das das Lauflicht betreibt, abgeht, da der nicht maskierbare Interrupt die höhere Priorität besitzt. Wird das Rechtecksignal so hochfrequent, dass die Zeit zwischen zwei Impulsen nur wenig länger als die Bearbeitungszeit des NMIs ist, so sackt die Geschwindigkeit des Lauflichts bis auf null ab.

Das hier beschriebene Experiment ist im Prinzip eine sehr einfache Version eines Multitasking-Betriebs, wo mehrere Aufgaben quasi gleichzeitig vom Mikroprozessor erledigt werden.


Last Update: 2008-05-31