Hola rmatama, veo que posees varios errores, por ese motivo aqui te dejo una rutina que funciona correctamente para lo que deseas hacer, de esta manera podras comparar en que te as confundido:
Codigo:
; CUARZO DE 4 MHz
LIST P = 16F873
INCLUDE <P16F873.INC>
ESTADO EQU 0x20
WWW EQU 0x21
CONTADOR EQU 0x22
;-----------------------------------------------------------------------------------------------
ORG 0x00 ; Vector de arranque
goto INICIO
ORG 0x04 ; Vector de interrupcion
goto INTERRUPCION
;-----------------------------------------------------------------------------------------------
INTERRUPCION ; Interrupcion que se realizara cada 0.5 seg
movwf WWW ; Se guarda el estado del registro W
swapf STATUS,W
movwf ESTADO ; Se guarda el estado del registro STATUS
movlw H"DC"
movwf TMR1L
movlw H"0B" ; Por cada interrupcion cargo los registros TMR1L y TMR1H con el dato H"0BDC"=D"3036" que
movwf TMR1H ; resulta de la resta de 65536-65250=3036
btfsc PORTB,7 ; Se verifica el estado del pin RB/, si es cero se salta
goto INCREMENTAR ; Si es 1 salta a INCREMENTAR
decf CONTADOR,F ; Decremento el contador
movf CONTADOR,w ; Movemos el contador al registro W
movwf PORTC ; Movemos el registro W a PORTC
goto RET
INCREMENTAR
incf CONTADOR,F ; Incremento el contador
movf CONTADOR,W ; Movemos el contador al registro W
movwf PORTC ; Movemos el registro W a PORTC
RET
swapf ESTADO,W
movwf STATUS ; Se reponen los datos al registro STATUS
swapf WWW,F
swapf WWW,W ; Se reponen los datos al registro W
bcf PIR1,TMR1IF ; Se borra el flag de la interrupción del TMR1
retfie ; Sale de la interrupcion
;-----------------------------------------------------------------------------------------------
INICIO
bsf STATUS,RP0
bcf STATUS,RP1 ; Selecciono BANCO-1 de memoria RAM
movlw B"11111111"
movwf TRISA ; Puerto A como entrada
movlw B"11111111"
movwf TRISB ; Puerto B como entrada
movlw B"00000000"
movwf TRISC ; Puerto C como salida
movlw B"00000110"
movwf ADCON1 ; Configuro el Puerto A como entradas digitales
bcf STATUS,RP0
bcf STATUS,RP1 ; Selecciono BANCO-0 de memoria RAM
movlw B"00110001" ; Configuro el TMR1 como controlador de los 0.5seg ya que el TMR0 no alcanza a ese tiempo
movwf T1CON ; Habilito el TMR1 y selecciono el prescaler en 8
movlw B"11000000"
movwf INTCON ; Habilito las interrupciones globales y perifericas
clrf PIR1 ; Borro todos los flag de las interrupciones incluyendo el del TMR1
bsf STATUS,RP0 ; Paso al BANCO-1 de memoria RAM
movlw B"00000001"
movwf PIE1 ; Habilito la interrupcion por sobreflujo del TMR1
bcf STATUS,RP0 ; Paso al BANCO-0 de memoria RAM
movlw H"DC"
movwf TMR1L
movlw H"0B" ; Cargo los registros TMR1L y TMR1H con el dato H"0BDC"=D"3036" que
movwf TMR1H ; resulta de la resta de 65536-65250=3036
RETORNO
nop
goto RETORNO ; Continuamente se esta en esta rutina asta que se genera la interrupcion
;-----------------------------------------------------------------------------------------------
END
Un saludo y suerte, cualquier duda solo preguntala.
Atte. CARLOS