Programacion PIC Programación de un PIC16F84

Código fuente (.asm)
En este primer paso, escribiremos nuestro codigo fuente. Un codigo fuente es definir una serie de comportamientos con palabras o codigos que son mas cercanos a nosotros, para ello usaremos El ensamblador, que es uno de esos lenguajes de programación para desarrollar código fuente en una aplicación con PIC. El archivo de código fuente puede crearse y editarse con cualquier editor de texto ASCII tipo NotePad de Windows, renombrando el fichero de [.txt] a [.asm]. No obstante un codigo fuente debe seguir las siguientes pautas básicas:

Cada línea del codigo fuente puede contener cuatro tipos de información: Etiquetas, Operación, Operandos y Comentarios. El orden y posición de éstos es importante, sobre todo y para facilitar la depuración, se recomienda que la etiqueta se coloque en la primera columna y que los mnemónicos se coloquen una o dos columnas más allá para que todo cuadre, de este modo sera mas facil su lectura. Los operandos siguen al código mnemotécnico. Por ultimo los comentarios pueden seguir a los operandos, mnemónicos o etiquetas, y pueden comenzar en cualquier columna. La anchura maxima de una columna es de 255 carácteres.

Orden linea codigo en ensamblador

Un espacio en blanco debe separar la etiqueta del código mnemotécnico, y también un espacio en blanco deba separar el código mnemotécnico y los operandos. Los operandos múltiples deben separarse por comas.

Nota:Se considera como un espacio en blanco uno o más espacios o tabulaciones

programacion PIC

La imagen de arriba muestra un fragmento de Codigo Fuente, poco a poco voy a ir mostrando las diferentes instrucciones que forman el repertorio del PIC16F84. Para ello primero voy a aclarar una serie de términos básicos que serán los que utilice de aqui en adelante.

Etiquetas
Una etiqueta se usa para representar una línea o grupo de código, o un valor constante. Se necesitan para las instrucciones de salto. Las etiquetas deben empezar en la columna 1. Pueden terminar en "dos puntos" (:), espacio, tabulación o fín de línea. Las etiquetas deben comenzar por un carácter alfabético o por un guión bajo (_) y pueden contener carácteres alfanuméricos como el guión bajo (_) y el signo de interrogación (?).

Mnemónicos, directivas y macros:
Es el nombre de la instrucción, el que nosotros podemos "ordenar" al microcontrolador que haga. Hay que escribirlo tal cual es, sin cambiarlo.
Por ejemplo, suma (add), ir a (goto) o movimientos (movwf). A diferencia de las etiquetas que creamos nosotros mismos, los mnemónicos los proporciona el lenguaje ensamblador que se utilice. Los mnemónicos no son en ningún caso sensibles a mayúsculas/minúsculas.

Las directivas son órdenes del ensamblador que aparecen en el código fuente pero que normalmente no son traducidas directamente a códigos de operación. Se utilizan para controlar al ensamblador: sus entradas, salidas y asignación de datos. Las directives no son en ningún caso sensibles a mayúsculas/minúsculas.

Las macros son conjuntos de instrucciones y directivas definidas por el usuario que se insertarán en el código fuente al realizar el ensamblado siempre que la macro se invoque (ver directiva macro).

Los mnemónicos de las instrucciones del ensamblador, las directivas y las llamadas a macros deben colocarse de la segunda columna en adelante. Si hay una etiqueta en la misma línea, las instrucciones deben separarse de esa etiqueta por "dos puntos", o por uno o más espacios o tabulaciones.

Operandos: son los parametros que necesita la instrucción para ejecutarse. Al estudiar una instrucción se dice el tipo Parámetros que admite, que habrá que sustituir por los valores reales.

Parámetro f: representa un registro de la memoria de datos, operando origen de una instrucción

Parámetro d: representa un registro, operando destino de una operación, con dos posibles valores. si se sustituye por un 0 significa que el registro de destino es el registro de trabajo W y si se sustituye por un 1 que es el mismo operando de origen de la instrucción

Parámetro b: representa un bit (valores de 0 a 7) de un registro.

Parámetro k: representa valor literal, es decir, un valor numérico que acompaña al Mnemónico de la instrucción.

RESUMEN DE TODAS LAS INSTRUCCIONES DEL PIC

Bueno, como tampoco quiero escribir un libro, voy a poner unas tablas en las que vienen todas las instrucciones del PIC16F84 para que mas o menos el que la necesite pueda ver las posibilidades de este lenguaje.

instrucciones ensamblador
instrucciones ensamblador

La instrucción movlw
La instrucción"mov" es típica en todos los procesadores ya que siempre es necesario el movimiento de datos de un sitio a otro, bien sea valores de resultado, valores entre registros o valores inmediatos.
Consta de dos operandos donde el 1º es transferido o movido al 2º. se comporta igual que una copia de datos, ya que el dato no se borra de la fuente.
Hay tres tipos de instrucciones "mov", las cuales se diferencian en los operandos fuente y destino. En el caso de la movlw el origen es un valor literal y el destino es el registro de trabajo W.
Un ejemplo, se pretende mover el valor literal 5 al registro de trabajo W y continuación el valor literal 3 a ese mismo registro W, la figura adjunta representa el valor que toma W tras la ejecución de cada una de las instrucciones. Al principio el valor de W será indeterminado, lo cual se representa mediante "x". Tras la primera instrucción se habrá cargado en W el valor 5, que en código binario corresponde como "101". como el registro del PIC tiene 8 bits el resto se rellena con 0 a la izquierda. Tras la segunda instrucción el valor de W varia, borrando el primer valor y pasando a ser 00000011 que es 3 en decimal.

La instrucción movwf
La segunda variante de la instrucción"mov". En ella el dato contenido en el registro de trabajo W es transferido al registro f, que aparece como Parámetro, sin que por ello se borre de W. solo hay que indicar cual es el operando destino ya que el fuente, W viene implícito en el código de instrucción
Un ejemplo, esta vezble queremos cargar el valor del registro culla dirección es 0E, y que vamos a llamar OPERANDO, con el valor decimal 8. Para ello tenemos que emplear las dos instrucciones que ya conocemos movwf y movlw. En la figura se muestran los pasos a realizar, al comienzo los registros tienen valor indeterminado, X e Y. lo de d'8' es por que la ALU si no especificamos nada toma como defecto que los datos están en código hexadecimal de 0 a f si queremos especificar otro código tendremos k poner el valor entre comas simples y precedido de la letra que implique el código

La instrucción movf
Esta es la tercera y ultima variante de la instrucción"mov". En este caso en contenido del registro f, que es el operando fuente, puede transferirse al registro de trabajo W, o al mismo registro f, dependiendo del valor "d". Es necesario especificar tanto la fuente como el destino. Esta operación afecta al flag o señalizador Z. El flag Z es un bit del registro de estado que se pone a 1 si el resultado de la operación a sido 0.

La instrucción bsf
Esta instrucción pone a 1 un bit de un registro. El nombre o posición del registro dentro de la memoria de datos, será suministrado como primer Parámetro de la instrucción, y el numero de bit como segundo Parámetro Tanto uno como otro comienzan a contarse desde 0.

La instrucción bcf
Esta instrucción realiza justo la operación contraria a la "bsf"; pone a 0 un bit de un registro. La síntesis es la misma que la anterior instrucción

La instrucción addlw
Suma un valor literal al contenido del registro de trabajo W, y el resultado lo deja en este ultimo.

La instrucción INCF
Esta instrucción incrementa en una unidad el contenido de un registro. El resultado se puede llevar al registro de trabajo W en lugar de al registro de origen, con lo k este ultimo no se modificaría. Esto depende, como siempre del valor del Parámetro d.

La instrucción DECF
Con esta instrucción se decrementa el valor de un registro y llevar el resultado a ese mismo registro o al registro de trabajo W. Su flag asociado también es el Z, que se pondrá a 1 cuando el registro en cuestión llegue a 0.

La instrucción GOTO
Esta es la instrucción de salto incondicional, un salto a otra parte del programa (subrutinas).

La Instrucción BTFSC
Esta es una instrucción de salto condicional, en caso de que un bit señalado del registro tenga valor 0 la instrucción siguiente es ignorada y en caso contrario no.

La instrucción BTFSS
Es la análoga a la anterior. Siguiendo de nuevo sus siglas veremos que solo cambia la ultima letra, esta instrucción (t) testea un bit (b) de un registro (f) y salta (s) si es uno (s) set en ingles puesta a 1.

Ejem:
btfss ESTADO Z
goto ETIQUETA 1
goto ETIQUETA 2

La instrucción DECFSZ
Esta instrucción (dec) decrementa un registro (f) y salta (s) si el resultado es cero (z). El resultado del decremento puede ser guardado en el mismo registro que se toma de base para dicho decremento, o el registro de trabajo W, en cullo caso el registro no varia.