Solo he mirado este trozo de codigo pero creo que no esta bien.
;------------EXPLORANDO ENTRADAS-------------------
movlw d'10' ;Cargo REG1 con 10
movwf REG1
exploro0 btfsc PORTA,0 ;Exploro RA0
goto exploro1 ;Si es 1 voy a muestra
call retardo ;Si es 0 llamo a retardo(Rutina antirebotes)
clrf TMR0
decfsz REG1,1 ;Velvo de la rutina retardo y compruebo REG1
goto exploro0 ; si no es 0 (<160ms) vuelvo a explorar RB0
incf CREDITOS,1 ; si es 0 (160ms). Pulsacion correcta. Incremento CREDITOS
exploro1 btfsc PORTA,1 ;Exploro RB1
goto muestra ;Si es 1 voy a muestra
call retardo ;Si es 0 llamo a retardo
clrf TMR0 ;Pongo TMR0 a cero
decfsz REG1 ;Compruebo REG1
goto exploro1 ; si no es 0 vuelvo a explorar RB1
movlw 0
subwf CREDITOS,0
btfsc ESTADO,2 ; si hay 0 CREDITOS
goto muestra ; voy a muestra sin restar
;si hay 1 o ams creditos puedo restar
Primero no estas haciendo antirrebotes, el antirrebotes es leer un pin hacer un retardo de 20ms (el tuyo esde 16, creo que te vale) y VOLVER A LEER ESA ENTRADA OTRA VEZ, esta segunda lectura es la valida.
Despues estas leyendo RAO y si es 0 durante un tiempo, 16ms*10=160ms incrementas contador de creditos, es esto lo que quieres? o que se incremente cuando se pulse? Porque en el esquema esta a 0 en reposo, por eso supongo que quieres que se incremente al pulsarlo.