Programación de Microcontroladores – Parte II / TEN. Noguera Guillermo Sebastián
“Nuestros primeros programas en Assembler para PICs”
Con el objetivo de adquirir una metodología clara en la programación de microcontroladores,
que nos permita desarrollar proyectos con ellos es que abordamos esta nueva sección de nuestro
curso. A continuación podemos ver representada la secuencia básica de los pasos a seguir para
grabar un programa en los microcontroladores.
figura 1
Escritura del código fuente:
El código fuente del lenguaje ensamblador está estructurado en columnas, las cuales designaremos
como campos. Así analizando el ejemplo de la figura 2 podemos identificar los siguientes:
1. Campo de etiquetas: son nombres de subrutinas o secciones de código fuente identificadas
por un nombre. Así es posible “saltar” a determinadas partes del programa identificadas con su
correspondiente etiqueta, sin recordar las direcciones físicas donde están ubicadas. Una
etiqueta puede ir seguida de dos puntos, espacios o RETURN. Debe empezar con un carácter
alfanumerico o de subrayado ( _).
2. Campo de instrucciones: puede ser una instrucción del juego de instrucciones del uC o una
directiva del ensamblador.
3. Campo de datos: contiene los datos u operandos de las instrucciones. Los datos pueden ser
un registro, un bit de un registro, una etiqueta, o un número constante llamado literal. Aquellas
instrucciones que llevan multiples datos, utilizan la ( ,) para separarlos. La especificación de la
base en la que se expresan los operandos es opcional: B’10011’ , 0’777’ ,D’255’ , .255 ,H’9F’,
0x9F, A’c’ o ‘C’
4. Campo de comentarios: es precedido por un punto y coma ( ;) y puede colocarse en cualquier
parte del código fuente. Los comentarios es uno de los trabajos más importantes que debe
desarrollar el programador a la hora de escribir el código. Si comentarios es muy difícil descifrar
días despues el código fuente que uno mismo ha escrito, de allí su importancia.
Mencionamos a continuación algunas convenciones a tener en cuenta para facilitar la tarea de
programar:
figura 2
Es importante mencionar además una buena práctica que consiste en incorporar al comienzo de
todo programa en ASM, una serie de comentarios que indiquen el nombre del programa y una
breve descripción del trabajo que realiza.
Directivas: es un comando escrito en el código fuente para efectuar un control directo o ahorrar
tiempo a la hora de ensamblar. El resultado de incorporar directivas se puede ver en el archivo
*.LST, después de ensamblar un programa.
( http://perso.wanadoo.es/pictob/directivas_mpasm.htm )
En el MPASM existen basicamente seis tipos de directivas:
1. Directivas de control: controlan cómo es ensamblado el código.
2. Directivas de ensamblado condicional: permiten ensamblar secciones de codigo de
acuerdo a determinadas condiciones.
3. Directivas de datos: controlan asignación de memoria y proveen una forma de referirse a
datos de manera simbolica.
4. Directivas de Lista: controlan el formato del archivo *.LST
5. Directivas Macro: controlan la ejecución y asignación de datos por medio de definición de
macros.
Un estudio detallado de cada una de las directivas del MPASM de acuerdo a las seis categorías
mencionadas, escapan al objetivo del presente curso. Así analizaremos tan solo las más importantes,
para mayor información pueden remitirse al MPASM Assembler Help del MPLAB IDE v7.40.
LIST P=16F84 ; Selecciona el tipo de microcontrolador
LIST C=132 ; Fichero de listado a 132 caracteres
La directiva LIST dispone de diferentes opciones que permiten elegir, entre otras cosas, el tipo de
procesador a emplear (P), número de caracteres por línea (C), tamaño de los tabuladores (B), base de
la numeración por defecto (R), etc…
PORTB
EQU 6
; Dirección de la puerta B
TRISB
EQU 86
; Dirección del registro TRISB
STATUS
EQU 3
; Dirección del registro de estado
La directiva EQU asigna un valor a las etiquetas deseadas, definiendo así una constante en
assembler.
ORG 0
; Posición del vector de RESET
La directiva ORG indica al ensamblador dónde debe empezar a colocar las instrucciones en la
memoria de programa. Es decir el ORiGen o dirección de comienzo para todo el código que sigue.
END
; Final del código fuente
Esta directiva indica al ensamblador el final del código fuente, donde ha de terminar el proceso de
ensamblado.
Ensamblado del programa
Las instrucciones del código fuente, representadas por nemónicos, son comprensibles para el
programador, luego de codificar el programa fuente en un editor de texto y guardarlo con extensión
.asm es necesario “traducirlo” al lenguaje máquina que entiende el microcontrolador. El MPASM es el
encargado de ensamblar el código fuente y convertirlo en código ejecutable por el PIC. Este proceso lo
realiza en dos pasos, en el primero comprueba la correcta sintaxis de las instrucciones, los nombres
de las etiquetas duplicados y asigna valores a los símbolos. En el segundo paso el MPASM convierte
todos los nemónicos en sus respectivos códigos máquina numéricos.
El proceso de ensamblado genera el archivo .HEX al igual que los archivos .LST y .ERR, los cuales
nos proporcionan la siguiente información.
El fichero de listado .LIST contiene una copia del fichero del código fuente pero con tres columnas
añadidos a su izquierda, donde se detallan las posiciones de memoria de programa que ocupa cada
instrucción (columna de la izquierda), la siguiente indica el código hexadecimal de cada una de las
instucciones. La tercera columna indica el número de línea del código fuente, finalmente tras esta
columna aparece el código fuente en su formato original.
figura 3
Al final del listado encontramos la siguiente información de etiquetas y errores, avisos y mensajes.
¿Qué sucedió con las directivas?
Código ejecutable
El fichero con extensión .HEX es el otro fichero creado por ensamblador. El formato que maneja el
MPLAB es el Intel Hex de 8bits ( INHXM8 ). Tanto el MPSIM (simulador) como el programador hacen
uso de este archivo. Este fichero se puede editar con un editor de texto y su formato es como se
representa en la siguiente figura:
figura 4