en realidad xxgaaraxx tus problemas son otros, eso no es un BUG lo que dice vixctor, corresponde al funcionamiento del PIC, y es una desventaja de los PIC de gama baja.
Lo que no entiendo es por que tenes 2 codigos. Uno para un PIC16F84 y otro para un PIC16F877A
En tu primer programa el de PIC16F84A seria algo mejor esto asi:
Loop
btfss PORTA,0 ; RA0=1? Si estan en 1 salta
goto Loop ; No vuelve
call Delay_20_ms ; Elimina rebotes
Loop_2
btfsc PORTA,0 ; RA0=0? Es decir solto el boton?
goto Loop_2 ; No, espero que suelte
btfss PORTA,1 ; RA1=1? SI: Ascendente, NO: descendente
goto Down ; NO
INCF PORTB,F ; SI
goto Loop
Down
DECF PORTB,F ;Cuenta descendente
goto Loop
Quitandole el WDT ( poniendolo en OFF con los FUSES ) por que ? por que puede que ese delay sea muy grande y active el WDT, por otra parte cambie el segundo BTFSS por un BTFSC, De esa forma solo incrementa/decrementa cuando hay un flanco de bajada del boton.
De todas formas es buena practica, en los PIC16F ( que solo tienen el registro PORTx ) de usar un registro como usaste vos en tu programa. Y es malo hacer esto:
BSF PORTD,1
BCF PORTD,0
BSF PORTD,2
segun lo que este conectado al pin del micro puede que ocurra un error, por que el micro funciona con la base de leer-modifica-escribir, es decir cada instruccion hace eso, si suponete que tenes una gran capacidad en el RD1, cuando se ejecuta la primera instruccion no hay problema pero cuando se ejecuta la segunda, ocurre que por esa capacidad al leer el puerto se toma como un 0 (ya que va creciendo lentamente la tension ) entonces al leer el portd,1 lee 0 , modifica el portd,2 de la instruccion y luego guarda, efectuandose el error.
Distinto los PIC18 que usan distintos registros ( LATx , PORTx ) LATx es el registro de latch de salida, este lo usas para escribir en el puerto ( para ponerle un 1 o un 0 ) y PORTx para leer el pin, entonces ahora el micro lee del LATx que no es influenciado por lo que esta presente en el pin y se evitan esos problemas.