Un par de cosas antes de ir al problema. Consejos sobre programacion y otras cosas mas:
Estas en un PIC18 , eso dejalo para los PIC16, los PIC18 su memoria de datos comienza en 0x00, ya que todos los SFR estan al final.
Recomendable tambien que mires ACCESS y BANK, observaras que ahora las instrucciones aceptan un parametro mas que es la 'a'
Soy de la costumbre de que si o si hay que poner todos los vectores , aunque no se utilizen, y si no los usas poneles un RETURN, asi:
ORG 00H
GOTO Configuracion
ORG 08H
RETURN
ORG 18H
RETURN
De esa forma si por si las dudas activas o se activa una interrupcion simplemente vuelve a donde estaba y listo. Observa tambien que no pongo ninguna ORG debajo del RETURN de 0x18, eso NO se hace por las dudas lo digo, ya que vi a varios.
Podrias haber usado W y F, es mas intuitivo y facil de recordar, estos estan incluidos en el .inc, es decir:
Mover registro a W
CONT
DAT
X
REP
m
n
o
CP
VLA
VALTC2
Tanto para vos en un futuro como para mucha gente que pueda ver tu codigo, usa nombres significativos en los registros. Si cuesta inicialmente escribir un poco de mas, pero luego con solo leer el programa sabes de que se trata. Yo ahora tengo que descifrar que hace cada registro gracias a esto, y tal ves encontrar el problema que me tomaba 10min, me lleva 30min. Ojo no lo digo por que soy peresozo y quiero hacerte tener laburo a vos, si vos dejas este codigo 2 meses y volves vas a sufrir igual. Pero como es corto tal ves no sea problema. En fin es una costumbre mejor adquirirla en todos los lenguajes, algunos compiladores con el Ctrl+espacio si escribis unas letras te lo autocompleta o te da las opciones, no se si en ASM ocurre igual, pero en C si.
Ahora el problema.Si hubieras usado W y F te hubieras dado cuenta mas rapido... 0 es W y 1 es F, resumen siempre estas incrementando RESULTADO y poniendo ese valor en W, lo cual RESULTADO siempre tiene el mismo valor.
Solucion:INCR
INCF RESULTADO, F
MOVFF RESULTADO, RESU
RETURN
Hay codigo que esta por demas, hay registros que estan por demas y no tiene sentido como lo es REP asi como esta en el programa, al menos con el valor 1. Pero si no fuera 1 lo pondria en otro lado y no en la rutina principal, sino al comienzo de GEN fuera del loop, donde tenes el NOP ese sin sentido.
Tambien hay cosas buenas como el formato del programa, es decir la creacion del loop principal y ese manejo, falta pulir unos detalles como los anteriores para que todo sea casi perfecto. (Por que despues te das cuenta que estas recien en la base de la montaña

)