Formato De Las Instrucciones; Manejo De Tablas - EVOLUPIC b Manual Del Usuario

Tabla de contenido

Publicidad

Resultado: Bit Test F, Skip if Clear. Hace una prueba sobre el bit 3 de la localidad 35H. Si el valor es 0, no ejecuta la siguiente
instrucción, pero sí la siguiente. Si el valor es 1, entonces ejecuta la siguiente instrucción.

16.2 FORMATO DE LAS INSTRUCCIONES:

Todas las instrucciones llevan alguno de los siguientes formatos, dependiendo de la función que desempeñen:
Instrucciones orientadas a byte. Instrucciones orientadas a bit. Instrucciones de manejo de constantes (en la literatura de Microchip,
las constantes se denominan "literals") y, finalmente instrucciones de salto CALL y GOTO.
Enseguida, se muestra el formato para cada tipo de instrucción. Las palabras son de 14 bits. El trabajo de
decodificación de cada formato es realizado por el programa ensamblador, razón por la cual el programador no requiere de
decodificar manualmente cada instrucción..
INSTRUCCIONES ORIENTADAS A BYTES:
Si d=0, destino es W, si d=1, destino es f
INSTRUCCIONES ORIENTADAS A BITS:
b selecciona el bit del registro f, (valor de 0 a 7)
INSTRUCCIONES MANEJO DE CONSTANTES:
k es la constante en la instrucción.
INSTRUCCIONES CALL Y GOTO:
k es la dirección inmediata en 12 bits.

16.3 MANEJO DE TABLAS:

Es importante recordar que el microcontrolador 16F88 opera con una arquitectura HARVARD. Lo anterior hace que el
manejo de tablas sea distinto a procesadores con arquitectura VON NEUMANN, en donde la memoria de código y datos es
compartida, y entonces, a través de direccionamiento indirecto es posible recuperar los datos de la tabla. En el caso de la
arquitectura Harvard, la tabla está en la memoria de código y debe entonces de manejarse como parte del programa ejecutable. La
forma de resolverlo es a través instrucciones RETLW. La tabla forma parte de una subrutina que en este ejemplo lleva la etiqueta
TABLA.
Supongamos que deseamos crear una tabla de 4 datos. Y que estos 4 datos son los caracteres ASCII de las letras H,O,L
y A. Dentro del programa principal, existirá una instrucción de "call" que llama a la etiqueta que está al inicio de la tabla, como se
muestra en el listado de abajo.
Una vez que el el contador del programa queda posicionado al inicio de la tabla, usamos la instrucción addwf, para
sumar a la parte baja del contador del programa, PCL, un número del 1 al 4, que debe de estar almacenado en el registro W desde
antes de la ejecución de la instrucción de "call". Al ejecutarse dicha instrucción (addwf), el contador del programa queda
posicionado en la localidad deseada de la tabla.
Ahora, mediante la instrucción "retlw" (return from subroutine with literal in w), regresamos al programa principal,
pero el registro W, contiene ahora el dato que aparece a la derecha de la instrucción (alguno de los códigos ASCII de la H,O,L ó
A), y los cuales forman parte de la tabla.
Es decir que el registro W contiene, antes de la instrucción de "call", el desplazamiento (offset) deseado sobre la
dirección de inicio de la tabla, (que en el ejemplo, puede ser un valor del 1 a 4). Aquí es muy importante señalar que en la
instrucción (addwf PCL), se está afectando la parte baja PCL (8 bits) y también la alta (3 bits) del contador del programa, la cual
se carga con el contenido de PCLATH. Es necesario entonces inicializar también el registro PCLATH para que contenga el valor
de la página en donde se encuentra la tabla, que pueden ser los valores 0 a 7.
...main...
movlw 1
movw,f PCLATH
.............
13
13
13
13
OPCODE
;en este ejemplo, la tabla se encuentra en la página 1.
;carga el número de página en PCLATH
;en esta zona del programa, debe de inicializarse w con el desplazamiento.
EVOLUPIC Bootloader 16F88 Punto Flotante, S.A. 2011
22
7
OPCODE
d f (file register)
9 8 7
OPCODE
b (bit)
f (file register)
8
7
OPCODE
12 11
k (literal)
0
0
0
k (literal)
0

Publicidad

Tabla de contenido
loading

Tabla de contenido