Hola,
Las tablas son utilizadas como tecnica para consulta o seleccion de valores.
Se trabaja con el registro llamado PCL (02h) que es el Contador de Programa o Puntero.
El valor que contiene el PCL corresponde al numero de linea que se esta ejecutando actualmente.
A medida que el programa se va ejecutando el valor de PCL se actualiza de manera automatica.
Osea que si lees el valor del registro PCL estas obteniendo la posicion actual de memoria en la que se encuentra trabajando el microcontrolador.
Además puedes modificar el valor de PCL, con esto estas seleccionando manualmente la direccion de memoria (flash) que quieres ejecutar.
Las tablas utilizan esta posibilidad de seleccionar la direccion de memoria para realizar consultas.
La tecnica consiste en sumar la un valor (indice) al registro PCL para que la ejecucion del programa salte una determinada cantidad de lineas.
En general las tablas de declaran como subrutinas donde el nombre de la tabla es ingresado como etiqueta y luego es llamada mediante call.
Esto te permite optimizar el codigo dado que si necesitas realizar mas de 1 consulta solo tienes que ingresar unas pocas lineas y no escribir toda la tabla nuevamente.
Ademas, si necesitas corregir la tabla lo haces en una sola vez.
Te mostrare la estructura de las tablas mediante un ejemplo
A continuacion se selaccionan valores mediante una tabla llamada tabla_prueba1 segun el valor de un registro llamado dato.
El resultado de la consulta se almacena en el registro llamado resultado.
-------------
dato equ 0x20 ;dato a partir del cual consultar
resultado equ 0x21 ;resultado de la consulta
;consultar tabla_prueba1
...
movf dato,w ;cargar el valor a consultar en W. Indica el nro de elemento a seleciconar
call tabla_prueba1 ;consultar la tabla
movwf resultado ;guardar el resultado
... continua ell resto del programa
;declaracion de la tabla
tabla_prueba1 ;nombre de la tabla = nombre de la subrutina
addwf pcl,1 ; (*) sumar el valor a consultar (que esta cargado en W) al registro PCL.
retlw .00 ;si el valor a consultar es 0, retorna del call con un 0 en W
retlw .10 ;si el valor a consultar es 1, retorna del call con un 10 en W
retlw .20 ;si el valor a consultar es 2, retorna del call con un 20 en W
--------------------
(*) Dado que el registro PCL controla la ejecucion del programa:
- si a PCL le sumamos 0, ejecutara la linea siguiente (retlw .00)
- si a PCL le sumamos 1, la ejecucion salta 1 linea (hasta retlw .10)
- si a PCL le sumamos 2, la ejecucion salta 2 lineas (hasta retlw .20)
De esta manera segun el valor de entrada (dato) se obtiene un valor de salida (resultado).
Otra apliacacion es la seleccion del codigo o rutina a ejecutar
Po ejemplo:
;selecicona rutina segun dato
movf dato,w ;cargar el valor a consultar en W.
addwf pcl,1 ; (*) sumar el valor a consultar (que esta cargado en W) al registro PCL.
goto rutina1
goto rutina2
goto rutina3
Espero que te sirva.
Un saludo
Canito