Hallo,
hiermit möchte ich versuchen, die grundsätzliche Funktion dieser 
Interrupt Service Routine ( ISR ) für das Tasterentprellen zu erklären.
In meinem Beispiel wird die Timer0 Overflow Interrupt eines ATmega8 
welcher mit seinem internen 1Mhz RC-Oszillator arbeitet unter anderem 
zur Tasterentprellung genutzt. Diese IRQ wird dazu ca. alle 2ms 
aufgerufen, dementsprechend natürlich auch die dazugehörige ISR.
Das Prinzip beruht auf dem Inkrementieren eines Arbeitsregisters
( key_reg ), dessen einzelnen Bits unterschiedliche Funktionen erfüllen.
Dieses Arbeitsregister sollte eines ab r16 sein, damit kompfortabel mit 
den Bitmanipulations,- und Auswertebefehlen cbr/sbr sowie sbrc/sbrs 
gearbeitet werden kann.
In diesem Fall dienen die Bits 1&0 als Zählerbits. Es könnten aber auch 
die Bits 5...0 dazu genutzt werden. Das darauf folgende Bit 2
( key_state ) dient der Erkennung das der Taster nicht betätigt ist. 
Dieses Bit wird nur gesetzt, wenn 3x direkt hintereinander in der ISR 
ein nicht betätigter Taster erkannt wurde ( 4x nach POR bzw. Reset ).
Das auf dieses Bit folgende Bit 3 ( key_press ) wird gesetzt, wenn auch 
hier wieder 3x direkt hintereinander in der ISR ein diesmal betätigter 
Taster dedektiert wurde. Es gilt zu beachten, das hierbei nur einmalig 
eine Aktion ausgeführt wird. Das heißt eine Dauerbetätigung löst keine 
weitere Aktion aus, da die Zählerbits immer zurückgesetzt werden.
Nach einem Power On Reset ( POR ), Watch Dog Reset, Reset oder sonstigen 
Resets, wird ein bereits davor betätigter Taster also nicht erkannt.
Dies könnte allerdings nach Ablauf der Entprellzeit durch das nicht 
gesetzte Bit 2 ( key_state ) erkannt werden, da dieses ja bei 
Nichtbetätigung des Taster gesetzt wird. Allerdings darf das nicht mit 
Taster " losgelassen " gleichgesetzt werden, denn " Taster losgelassen " 
setzt vorraus das der Taster vorher betätigt war, aber Bit 2 wird auch 
gesetzt, wenn der Taster vorher nicht betätigt wurde.
Typische Prellzeiten bei elektromechanischen Schaltern und Tastern 
liegen laut Wikipedia zwischen 100µs bis 10ms
*( Reaktionszeit Mensch 300-400ms ).*
Deshalb sollte die Zeit so eingestellt werden, das das Bit 3
( key_press ) bei  > = 10ms gesetzt wird. Hier in dem Beispiel, wo in 
der ISR welche ca. alle 2ms aufgerufen wird, unter anderem auch die 
Tasterentprellung vorgenommen wird, gilt der Taster bereits nach ca. 6ms 
( 3x 2ms ) als entprellt.
Falls es also widererwarten doch hin und wieder zu Tasterprellen kommt, 
steht der Erweiterung des Zählers auf 3-Bit oder noch mehr nichts im 
Wege. Ein 3-Bit Zäher ( Bit 2...0 ) würde also bis das Bit 4
( key_press ) gestzt wird, ein sieben maliges aufrufen der ISR 
benötigen. Dadurch wird eine Prellzeit von ca. 14ms überdeckt, was immer 
noch weit entfernt von der Reaktionszseit des Menschen ist.
Zur Verdeutlichung sollte unbedingt ein eigener PAP
( Programmablaufplan ) erstellt werden, oder evtl. ein Logikplan, wenn 
man damit besser zurecht kommt.
Bernd_Stein