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


Experiment: Stoppuhr

Im folgenden Experiment wird eine Stoppuhr aufgebaut, die mit einer Auflösung von 10 ms eine maximale Zeitdauer von ca. fünf Minuten messen kann. Folgende Abbildung zeigt den Aufbau des Experiments. Es werden die Platinen uP1, SERPAR, 7SGDSP und DIGMLT verwendet. Die Stoppuhr wird von zwei Tasten (T1 und T2 der Platine DIGMLT) bedient, wobei mit Taste T1 die Stoppuhr gestartet und angehalten werden kann, mit Taste T2 wird die Stoppuhr auf null gesetzt.

Experiment: Stoppuhr

Statt der Tasten kann natürlich auch ein beliebiges anderes elektrisches TTL-Signal verwendet werden. Zu beachten ist, dass die beiden Tastenanschlüsse verschieden reagieren. Der Anschluss für T1 ist pegelsensitiv (LOW=Uhr angehalten, HIGH=Uhr läuft), der Anschluss für T2 reagiert auf jede Veränderung des Eingangssignals.

Das unten abgedruckte Listing zeigt die Implementation der Stoppuhr. Der Kanal 3 des CTC erzeugt jede ms einen Interrupt. In der Interrupt-Serviceroutine wird ein Zähler alle 10 ms inkrementiert. Da die grundlegende Funktion der Stoppuhr, nämlich die Erzeugung eines periodisch inkrementierten Wertes, bereits in der Interruptroutine erledigt wird, beschränkt sich das Stoppuhrenprogramm lediglich auf die Manipulation der Interruptquelle und des Zeitzählers (Variable CLKCNT).

Das Programm überprüft zunächst, ob sich der Wert der Variablen CLKCNT seit dem letzten Schleifendurchgang geändert hat. Falls dies der Fall ist, wird der neue Wert am Display ausgegeben. Dann werden die Tasten T1 und T2 überprüft. Liegt T1 auf HIGH, wird dem Kanal 3 des CTC erlaubt, einen Interrupt (Routine CLKGO) zu erzeugen; liegt T1 auf LOW, wird der Interrupt von CTC-3 abgeschaltet (Routine CLKSTP). Dies entspricht dem Starten und Stoppen der Stoppuhr. Ist Taste T2 umgeschaltet worden, so wird die Zählervariable CLKCNT auf null gesetzt.

;===================================================
;------ Experiment: Stoppuhr mit CTC 3 -------------
;===================================================
;
            .GLOBAL STPCLK
STPCLK:     IN      A,(PIN)     ;Status der Tasten
            AND     03
            LD      B,A
            LD      HL,0A5A5H   ;erste Anzeige
            LD      (LASTCK),HL ;  erzwingen
$LOOP1:     LD      DE,(CLKCNT) ;Zeit anzeigen
            LD      HL,(LASTCK) ;  nur wenn Änderung
            XOR     A
            SBC     HL,DE
            JR      Z,$4
            EX      DE,HL       ;neuer Wert
            LD      (LASTCK),HL ;  = alter Wert
            CALL    DSPHL       ;Anzeige
            LD      C,2
            CALL    SETDP
$4:         IN      A,(PIN)     ;Tasten prüfen
            AND     03
            XOR     B           ;Veränderung ?
            JR      Z,$LOOP1
            BIT     1,A         ;Reset ?
            JR      Z,$1
            LD      HL,0        ;Uhr rücksetzen
            LD      (CLKCNT),HL
            IN      A,(PIN)
            AND     03
            LD      B,A         ;Tasten aktualisieren
            JR      $LOOP1
$1:         IN      A,(PIN)     ;Start/Stop ?
            AND     03
            LD      B,A         ;Tasten aktualisieren
            BIT     0,A
            CALL    NZ,CLKGO
            CALL    Z,CLKSTP
            JR      $LOOP1
;
            .DATA
LASTCK:     DEFW    0           ;letzter Zeitwert
            .CODE
;
;===================================================
;------ Start clock (CTC 3) ------------------------
;===================================================
;
CLKGO:      PUSH    AF          ;Interrupt erlauben
            LD      A,081H
            OUT     (CTC3),A
            POP     AF
            RET
;
;===================================================
;------ Stop clock (CTC 3) -------------------------
;===================================================
;
CLKSTP:     PUSH    AF          ;Interrupt abschalten
            LD      A,001H
            OUT     (CTC3),A
            POP     AF
            RET


Last Update: 2008-05-31