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


Experiment: Lauflicht

Das folgende Experiment verwendet einen Rotationsbefehl zur Erzeugung eines Lauflichts. Der Aufbau der Versuchsanordnung entspricht der im Experiment 8fach-Inverter dargestellten Anordnung. Das Lauflicht wird erzeugt, indem zu Beginn des Programms ein Bit des Registers A auf eins und alle anderen auf null gesetzt werden. Der Inhalt des Akkumulators wird an den Port POUT ausgegeben und dann um ein Bit nach rechts rotiert. Nach einer Verzögerung von etwa 150 ms wird der Registerinhalt erneut nach rechts rotiert und wieder ausgegeben. Durch diese Schleife wird das eine gesetzte Bit dauernd im Kreis geschickt.

;===================================================
;---- Experiment: Lauflicht ------------------------
;===================================================
;
            .GLOBAL LAUFL
LAUFL:      LD      A,1         ;Initialisierung
$L1:        OUT     (POUT),A    ;Ausgabe auf POUT
            RRCA                ;Bit schieben
            LD      HL,10000    ;Länge der Verzögerung
            CALL    DELAY
            JR      $L1         ;Endlosschleife
;
;===================================================
;------ Verzögerung --------------------------------
;===================================================
;
;ENTRY:     HL ... Zahl der Schleifendurchläufe
;EXIT:      Verzögerung um 26*HL + 47 Takte,
;           falls keine Wartezyklen etc. aufgetreten sind
;
            .GLOBAL DELAY
DELAY:      PUSH    AF          ;Wert von AF sichern
            PUSH    HL          ;Wert von HL sichern
$1:         DEC     HL
            LD      A,L         ;Test, ob HL=0
            OR      H
            JR      NZ,$1       ;Schleife, falls HL<>0
            POP     HL          ;alten Wert von HL und
            POP     AF          ;  AF wiederherstellen
            RET

Dieses kleine Programm verwendet ein Unterprogramm, das die Verzögerung zwischen den einzelnen Rotationsschritten erzeugt. Da solche Programme, die eine einstellbare Verzögerung erzeugen, öfters benötigt werden, ist es sinnvoll, ein solches Programm als Unterprogramm zu formulieren, dem als Parameter die Dauer der Verzögerung übergeben wird.

Das Unterprogramm DELAY übernimmt im Register HL den Verzögerungsparameter. Dieser gibt an, wie viele Schleifendurchläufe das Programm machen soll. Pro Durchlauf benötigt es 26 Takte, was bei einer Taktfrequenz von 4 MHz einer Zeit von 7.5 µsek entspricht. Man beachte, dass der Aufruf des Programms und das Sichern der verwendeten Register auch eine gewisse Zeit benötigen, was sich in der von der Routine benötigten Gesamtzeit niederschlägt (47 zusätzliche Takte ohne CALL).

Zu Beginn des Programms werden die Register HL und A auf den Stack gelegt, da sie während der Programmausführung verändert werden. Die Verzögerungsschleife selbst besteht nur aus einem Dekrementieren von HL und der Abfrage, ob HL gleich null ist. Wenn dies der Fall ist, werden HL und A wieder in den ursprünglichen Zustand gebracht (vom Stack geladen) und das Programm wird mit RET verlassen.


Last Update: 2008-05-31