Si pones la etiqueta 'tabla' en la línea 343, eso aproximadamente será grabado en la dirección 0x0148 de memoria de programa, donde tienes el noveno bit activado y según la hoja de características de los pic16...
... cuando se hace una operación que involucra a PCL, se concatena el valor de PCL + 5 bits de PCLATH.
Entonces si PCL vale 0x48 (porque se trunca el noveno bit) y luego le concatenas 5 bits de PCLATH (todos en cero), se obtiene la dirección de memoria 0x0048, la cual apunta a un lugar no esperado por ti.
Debes poner a pclath igual a 0x01 antes de hacer ADDWF PCL,F para que cuando llames a la subrutina el valor regrese a donde debe. Puedes poner PCLATH igual a 0x01 cuando configuras puertos.