Els polsadors i els interruptors tenen el problema que quan canvien d'estat els contactes reboten i, per això, sovint el microcontrolador no veu només una activació entrada sinó unes quantes. Quan només volem saber l'estat del polsador o interruptor això no sol ser important però sí quan volem comptar les activacions o fer que cada activació canviï l'estat del sistema.
El que cal fer és assegurar-nos que l'estat de l'entrada és estable. El programa que es proposa mira el polsador (o interruptor), aproximadament, cada mil·lisegon. Si N vegades seguides el troba igual ho considera estable. El diagrama de flux del programa seria el següent, on en verd hi tenim el nom de les etiquetes de cada part del programa.

El programa mira el polsador de la placa (connectat a RA3). Recordem que l'entrada RA3 està habitualment activada i es desactiva quan es prem el polsador. En el programa hem considerat que N és 4 i fem servir la funció xor tant per comparar dos valors com per invertir un bit.
cblock 0x20 Polsador ; Una variable amb l'estat del polsador (1 = premut) Previ ; I una amb l'estat previ del polsador Compta ; Una variable per comptar iteracions Retard1 ; Variable per al bucle de retard endc
org 0 Inici bsf STATUS,RP0 ; Tria el banc 1 movlw 0xFF ; Posa l'acumulador a FFh (tot uns) movwf TRISA ; Posa tots els bits del port A com a entrada bcf STATUS,RP0 clrf Compta ; Posa el comptador d'iteracions a valor zero clrf Previ ; L'estat previ del polsador és no premut BucleR movlw b'00000001' movwf Polsador ; Activem polsador abans de comprovar btfsc PORTA,3 ; Mira si està desactivada l'entrada A3 ; Si desactivat (premut), no fa la instrucció següent clrf Polsador ; Si no està premut, desactiva polsador movf Previ,w ; Copia Previ a l'acumulador xorwf Polsador,w ; Compara Previ amb Polsador, si són iguals s'activa Z btfsc STATUS,Z ; Si són iguals va a Final goto Esborra incf Compta,f ; Si són iguals, incrementa el valor de Compta movf Compta,w ; Copia Compta a l'acumulador xorlw .4 ; Comprova si val 4, si ho val s'activa Z btfss STATUS,Z ; Si val 4 no fa la instrucció següent goto Final ; Si no era 4 va a Final movf Polsador,w ; Copia Polsador a W, si val 0 s'activa Z btfsc STATUS,Z ; Si Polsador valia 1 (Z=0) no fa la instrucció següent goto Invert ; Si no està premut, ja estem Accions ; Aquí anirien les accions que cal fer cada cop ; que es prem el polsador Invert movf Previ,w ; Copia Previ a l'acumulador xorlw b'00000001' ; Inverteix el valor movwf Previ ; I ho guarda a Previ Esborra clrf Compta ; Posa el comptador d'iteracions a valor zero Final ; Funció de retard 1 ms nop decfsz Retard1,f goto Final goto BucleR ; Repetim-ho... end

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.