Das stimmt, aber auch dafür gäbe es eine Lösung (um den armen p@ty komplett zu verwirren):Zitat:
Schönheitsfehler: Solange die Taste gedrückt ist, wird übriges Programm aufgehalten.
Man konfiguriert den 16-Bit-Timer so, dass er deutlich länger als 6 Sekunden für einen Durchlauf braucht. Z.B. mit einer Taktfrequenz von 1 MHz (die für diese Anwendung ja locker reichen müsste) und einem Prescaler von 1024, macht knapp 1000 Counts pro Sekunde. Der Timer läuft kontinuierlich durch.
Der Taster wird an einem Change-konfigurierten Interrupt-Eingang angeschlossen. Bei fallender Flanke (Beginn Tastendruck) wird der aktuelle Timer-Wert in eine erste Word-Variable übernommen, bei steigender Flanke (Ende Tastendruck) in eine zweite Word-Variable. Zieht man den ersten Wert vom zweiten ab weiß man, wie lange der Taster gedrückt wurde (und zwar auch, wenn der Timer zwischendurch übergelaufen ist). Dann noch ein kleines Flag nach der steigenden Flanke gesetzt, das in der Hauptschleife das Ende des Tastendrucks signalisiert - fertig!