LCALL es una instrucción de la gama alta de microcontroladores de 16 bits.
Para los microcontroladores de la gama media de 14 bits
(PIC16F84, PIC16F87x, etc), LCALL no es una instrucción del microcontrolador,
sino que el ensamblador MPASM interpreta LCALL
como una "instrucción especial" que genera otras tres instrucciones básicas:
dos para posicionar los bits 3 y 4 del PCLATH y otra para el call.
Se suele utilizar para llamadas a subrutina por encima de los 2 k.
Ahora bien, el problema del manejo de las tablas no es la llamada "call"
sino la instrucción "addwf PCL,F", ya que al ejecutar esta instrucción
los 5 primeros bits del PCLATH son transferidos al registro PCH del
contador de programas, y por tanto cuando se utiliza esta instrucción
hay que asegurarse que el registro PCLATH tiene el valor correcto,
porque si ésto no es así, el salto es impredecible.
Esto suele ocurrir cuando el valor de PCL se desborda sin que el registro
PCLATH se incremente convenientemente, por eso en las primeras 256 posiciones
no hay problema, porque PCL no se puede desbordar.
Una solución para utilizar tablas por encima de las primeras 256 posiciones,
la he encontrado muy bien xplicada en un documento en
www.pic16f84a.com.
He intentado subirlo al foro, pero no me deja.
Saludos.
Adrian.