MPASM programacion pic
description
Transcript of MPASM programacion pic
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 1 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
MPASM, el ensamblador de Microchip
Debido a la flexibilidad del IDE de Microchip, MPLAB, tenemos la posibilidad de programar en
lenguajes como "C" o "Basic". Pero lo cierto es que con el ensamblador tenemos un codigo puro y
compacto. El ensamblador de Microchip que viene con MPLAB es el MPASM.
Generación de código absoluto
La generación de código absoluto es el modo definido por defecto del ensamblador MPASM. Este proceso se muestra a continuación:
Cuando un archivo fuente se ensambla de esta manera, todas las variables y rutinas utilizadas en el
el archivo fuente deben definirse dentro de este, o en archivos explícitamente incluidos por el archivo
fuente. Si el ensamblado se realiza sin errores, se generará un archivo hexadecimal .HEX que contiene
el código máquina ejecutable para el dispositivo designado. Este archivo puede utilizarse con un
simulador para probar la ejecución del código o cargarse en el microcontrolador mediante un programador.
Archivos de entrada/salida
Éstas son las extensiones de archivo predefinidas utilizadas por el ensamblador y su función.
Archivos de entrada:
o Código fuente (.asm): Archivo fuente de entrada al ensamblador.
o Archivo include (.inc): Archivo de inclusión o cabecera.
Archivos de salida:
o Archivo de listado (.lst): Archivo del listado generado por el ensamblador.
o Archivo de error (.err): Archivo de errores de ensamblado.
o Archivo hexadecimal (.hex, .hxl, .hxh): Archivo hexadecimal con código ejecutable.
o Archivo de referencias cruzadas (.xrf): Archivo para las referencia cruzadas de los
archivos ensamblados.
o Archivo de símbolos y depuración (.cod). o Archivo objeto (.o).
Código fuente (.asm)
El ensamblador es un lenguaje 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.
El código fuente debe seguir las siguientes pautas básicas:
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 2 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
Cada línea del archivo fuente puede contener cuatro tipos de información:
Etiquetas
Operación, Mnemónicos (intrucciones), Directivas y Macros
Operandos
Comentarios
El orden y posición de éstos es importantes. 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á. Los operandos siguen al código mnemotécnico. Los comentarios pueden seguir a los operandos,
mnemónicos o etiquetas, y pueden comenzar en cualquier columna. La anchura de columna máxima es de 255 carácteres.
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.
Se considera como un espacio en blanco uno o más espacios o tabulaciones. El espacio en blanco se
utiliza para separar las partes de una línea del código fuente. El espacio en blanco debe utilizarse para
hacer el código más fácil de leer. Cualquier número de espacios en blanco o tabulaciones son exactamente igual que uno.
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 3 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
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 puede contener carácteres alfanuméricos, guión bajo (_) y el signo de interrogación (?).
Las etiquetas no deben:
Comenzar por dos guiones bajos, ejem., __config.
Comenzar por un guión bajo y un número, ejem., _2NDLOOP.
Ser palabras reservadas del ensamblador (ver Section 3.3 “Reserved Words and Section Names” de MPASM, MPLINK, MPLIB User's Guide).
Las etiquetas pueden tener como mucho 32 carácteres. Por defecto se distinguen mayúsculas y
minúsculas, pero esto puede anularse con la opción en línea de comandos (/c). Si se utiliza "dos
puntos" (:) al definir una etiqueta, se le trata como un operador de la etiqueta y no como parte de la
propia etiqueta.
Mnemónicos, directivas y macros
Los mnemónicos le dicen al ensamblador qué instrucciones de código máquina (códigos de
operación) deben utilizarse. 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 directivas no son en ningún caso sensibles a mayúsculas/minúsculas.
Algunas de las directivas más utilizadas son:
Directiva EQU
El nombre viene de la palabra "equal", (igual)". La directiva EQU permite al programador "igualar"
nombres personalizados a datos o direcciones. Los nombres utilizados se refieren generalmente a
direcciones de dispositivos, datos numéricos, direcciones de comienzo, direcciones fijas, posiciones de
bits, etc. Un nombre es más descriptivo que una simple dirección y la tarea de programar se hará
mucho más sencilla. También podemos asignar un nombre a una instrucción que repitamos varias
veces a lo largo de un algoritmo, de manera que sea mucho más sencilla la programación. A estos
nombre que asignamos mediante esta directiva se les denomina constantes, ya que el registro al que apuntan no variará durante el programa. Ejemplos:
temp equ 12
DATO EQU 22
PORT_A EQU 5
Bank_1 EQU BSF STATUS,RP0
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 4 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
Directiva ORG
Esta directiva dice al ensamblador a partir de que posición de memoria de programa se situarán las
siguientes instrucciones. Rutinas de comienzo, subrutinas de interrupción y otros programas deben
comenzar en locaciones de memoria fijados por la estructura del microcontrolador. Recordemos que el
16F84 sólo tiene 1024 posiciones de memoria flash para código.
La directiva ORG hace al compilador colocar el código que le sigue en una nueva dirección de
memoria (la salida del compilador no solo coloca los códigos de operación sino también las direcciones
de cada instrucción del programa). Usualmente se la utiliza para: reset, programas de servicios de interrupción, programa principal, subrutinas.
Ejemplos:
1) Inicia el programa en la posición cero:
ORG 0x00
2) Inicia el programa en la posición 0000h y luego pasa a la 0005h para no utilizar la posición del
vector de interrupción (0004 h)
ORG 0x00 ; El programa comienza en la dirección 0 y
GOTO inicio ; salta a la dirección 5 para sobrepasar
ORG 0x05 ; el vector de interrupción, situado en la posición 4
Inicio xxx...
Directiva #INCLUDE
Esta directiva indica que archivos deberán tomarse en cuenta a la hora de compilar el código.
Normalmente se usa para incluir el archivo de PIC que el ensamblador tiene entre sus archivos, con el
cual el compilador será capaz de reconocer todos los registros especiales y sus bits. Su uso nos recordará al #include del lenguaje C. Esta línea debe colocarse al principio, y tiene la siguiente sintaxis:
#INCLUDE ; Lista de etiquetas de microchip
En ciertas ocasiones gran cantidad errores son debidos a que el nombre del archivo puesto entre
comillas no se escribe correctamente.
Directiva LIST
Este comando sirve para que el compilador tenga en cuenta sobre qué procesador se está
trabajando. Este comando debe estar en todo proyecto, situado debajo del "include", con la siguiente sintaxis.
LIST P=PIC16F877A
Directiva END
Al igual que las dos anteriores, esta debe ir incluida una sola vez en todo el programa. En concreto,
esta debe situarse al final, para indicar al ensamblador que el programa ha finalizado. Esta siempre
debe estar presente, aunque el flujo de nuestro programa acabe en un bucle.
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 5 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
Macros
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.
Mnemónicos
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
Los operandos dan información a la instrucción sobre los datos que deben utilizarse y donde se
encuentran. Los operandos debe separarse de los mnemónicos por uno o más espacios, o tabulaciones. Los operandos múltiples deben separarse por comas.
Comentarios
Los comentarios son texto que explica el funcionamiento de una línea o líneas de código. El
ensamblador MPASM trata lo que esté después de un punto y coma como un comentario. Todos los
caracteres que siguen al punto y coma se ignoran hasta el final de la línea. Las constantes del cadena que contienen un punto y coma se permiten y no se confunden con comentarios.
Archivo include (.inc)
Un archivo "include" o cabecera (header) es cualquier archivo que contenga código ensamblador
válido. Normalmente, el archivo contiene equivalencias sobre registros específicos del dispositivo a
utilizar y asignaciones de bits. Este archivo puede ser “incluido” en el código para que pueda ser
reutilizado por muchos programas.
Como ejemplo, para añadir el archivo de cabecera para el dispositivo PIC16F877A en el código ensamblador de nuestro programa, pondremos:
#INCLUDE P16F877A.inc
O #INCLUDE<P16F877A.INC>
Los archivos de cabecera se encuentran en el directorio de instalación de MPASM o de MPLAB.
Archivo hexadecimal (.hex, .hxl, .hxh)
El archivo hexadecimal es, por así decirlo, el archivo que contiene el ejecutable para el microcontrolador.
MPASM, el ensamblador de Microchip
Modificado de http://perso.wanadoo.es/pictob/mpasm.htm Página 6 de 6 Y http://perso.wanadoo.es/pictob/ensamblador.htm
Sistemas de numeración
La convención utilizada por MPASM es la siguiente:
Hexadecimal: es la numeración por defecto. Para mayor claridad para el programador se utiliza una letra H al final del número. Por ejemplo: 0100H, 0A0H, 5H, 66h.
Importante: Como ésta es la numeración por defecto hay que tener mucho cuidado al colocar
números en decimal. Por ejemplo la instrucción MOVLW 64 no utilizará el número 64 decimal sino el 100 decimal (64 hex = 100 dec)
Binario: Para escribir números en binario utilizar B'xxxxxxxx' (utilizar comillas simples). Por ejemplo: B'10011001' , b'01110000'.
Decimal: podemos utilizar la forma D'120' (también con comillas simples) o la forma corta
anteponiendo un punto al número decimal. Esta es la forma utilizada en todos los programas realizados
por Microchip. Por ejemplo: D'112' d'10' .200 .100
Tener en cuenta siempre el tamaño de datos con el que se está trabajando. En la mayoría de los
casos, se utilizará un número para almacenarlo en el acumulador y éste es de 8 bits. Por lo tanto el número utilizado no debe exeder de 255 decimal o FF hexadecimal.
Tipo Sintaxis Ejemplo Comentario
Decimal D'' D'100' D puede ser minúscula
. .100
Hexadecimal
H'' H'64' H puede ser minúscula
0x 0x64
64 Por defecto
Octal O'' O'144' O puede ser minúscula
Binario B'' B'01100100' B puede ser minúscula
ASCII A'' A'C' A puede ser minúscula
'' 'C'
Este artículo es una modificación a dos artículos de Emilio Toboso en
http://perso.wanadoo.es/pictob/mpasm.htm y http://perso.wanadoo.es/pictob/ensamblador.htm
Para mayores referencias, revisar los artículos completos o acudir directamente a la documentación de Microchip:
MPASM™ Assembler, MPLINK™ Object Linker, MPLIB™ Object Librarian User’s Guide http://ww1.microchip.com/downloads/en/devicedoc/33014j.pdf