Cosas a tener en cuenta:
1-
Estas habilitando una interrupcion (TMR0) y no estas haciendo uso de la misma.
deberias tener algo asi:
ORG 0x04
GOTO INTERRUPCION ; es decir que cuando ocurra haga un salto a esa bandera atienda la interrupcion y salga.
En tu caso estas volviendo a borrar el PORTA y B seteando todo de vuelta, ya que comenzaria un poco mas abajo que "Inicio" (4 instrucciones mas) para tu ejemplo como lo tenes escrito y para simular paso a paso no necesitas interrupcion.
Cuando ocurre una interrupcion en el PIC16F84A el vector de interrupcion esta en la posicion 0x04
2-
Estas haciendo:
ANDLW 0x0F ; o en binario 0000 1111
CALL TABLA1
Al hacer ese AND estas limitando a 2^4 = 16 posiciones tu tabla
3-
Estas usando un timer para mostrar los valores, y el timer sigue contando con lo que si pasan 2 ciclos de instrucción cualquiera sea sumaria 2... Generalmente para una tabla harías algo así:
INCF CONTADOR,F ; Incremento mi contador o "base" a donde quiero llegar de mi tabla ( Recaudo siempre al comienzo poner a 0 el registro CONTADOR )
;código extra
MOVF CONTADOR,W ; ese valor lo meto a mi tabla
CALL TABLA1 ; LLamo a la tabla
Como son 36 posiciones y no es potencia de 2, no te va a servir el ANDLW, sino que que vas a tener que controlar que no supere el valor 35 (contando a 0 como valor), esto es cargandolo a W, restandole 35 y fijandose si se activaron la bandera de Cero (Z), asi reseteas tu registro CONTADOR. Eso iría en donde puse "Codigo Extra"
4-
En caso de ser MUY grande la tabla, hay que tomar consideraciones extras
Uno de los principales problemas es que el salto GOTO solo modifica el PCL y carga 2 bit de PCLATH en los bits mas significativos de PC
GOTO k
Operation:
k -> PC<10:0>
PCLATH<4:3> -> PC<12:11>
Entonces si una tabla comienza en 0x0AA y termina en 0x1AA y nadie carga el valor del PCLATH, cuando vos crees que te envia a la direccion 0x100 esta enviandote a 0x000 ( es decir al comienzo ).Algunas soluciones a esto es poner las tablas desde la otra pagina y cuando llames a la tabla cargas el valor del PCLATH
Resumiento:
Cualquiera de estos puede ser tu error, tanto que la interrupcion te "resetea" el micro al 13er valor, o como que estas limitando la tabla a 16 valores, o que estas usando el TIMER entonces puede que caiga siempre en los mismos valores por que depende de la cantidad de ciclos que pasaron, o la menos probable es que te pasaste en cantidad xD ( se necesitan 256 instrucciones para pasar de "pagina", asi que no lo veo probable en este caso). Es lo que se me ocurre viendo el codigo