Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier. |
Home Experimente I/O-Bausteine Experimente mit Z80-CTC Stoppuhr | |||
Siehe auch: Frequenzzähler mit CTC 0 | |||
|
|||
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.
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
|
|||
Home Experimente I/O-Bausteine Experimente mit Z80-CTC Stoppuhr |