Lenguaje Ensamblador
para uC ‐ PIC
José Faginas 1
Lenguaje Ensamblador (Assembler)
• El lenguaje assembler o ensamblador utiliza mnemónicos, que son grupos de
caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar en
cada instrucción.
• Los mnemónicos normalmente son las iniciales de la instrucción expresada en
inglés que nos hace “recordar” lo que realiza esa instrucción.
José Faginas 2
Programa Ensamblador
• El programa ensamblador (MPASM) es un software que se encarga de traducir los
mnemónicos y símbolos alfanuméricos escritos en lenguaje ensamblador por el
usuario a código de máquina para que pueda ser interpretado y ejecutado por el
microcontrolador.
• El programa escrito en lenguaje ensamblador o assembler recibe la denominación de
código fuente y tiene la extensión *.asm.
• El programa ensamblador “lee” el código fuente y, si no contiene errores, genera
otro archivo con extensión *.hex denominado ejecutable.
• El archivo *.hex es utilizado por otro programa (MPLAB ‐ PICKIT2) encargado de
grabar la memoria del µC, valiéndose para ello de un hardware específico.
José Faginas 3
Código Fuente (*.asm)
• Está compuesto por una sucesión de líneas de programa.
• Se puede escribir en cualquier editor de texto que genere un archivo ASCII puro como por
ejemplo el bloc de notas o más especializado como el Notepad++.
• Un programa escrito en lenguaje ensamblador tiene:
o Instrucciones: es el programa que va a ejecutar el µC
o Directivas: son órdenes que se le dan al ensamblador
• Cada línea de programa suele estar compuesta por cuatro campos:
o Etiquetas
o Código de operación
o Operandos
o Comentarios
José Faginas 4
Estructura general de un programa
escrito en assembler
Área de encabezado
Área de declaraciones generales sobre el uC
Área de Equivalencias & Definiciones & Macros
Área de Declaración de Variables
Área de Vectores y Rutina de Interrupción
Área del Programa Principal
Área de Subrutinas
END
José Faginas 5
Área del Encabezado
José Faginas 6
Área de declaraciones generales
sobre la plataforma
José Faginas 7
Área de Equivalencias ‐ Definiciones ‐ Macros
José Faginas 8
Área de Declaración de Variables
2 formas para hacerlo:
¿Porque no?
Esta es la preferida!
José Faginas 9
Área de Declaración de Vectores y Rutina de
Interrupción
José Faginas 10
Área del Programa
Principal ‐ Subrutinas ‐
END
José Faginas
11
Resumen de Directivas usadas
LIST p=PIC16F84A: indica el uC utilizado.
INCLUDE <include_file.inc> : el archivo especificado se “pega” en el lugar donde está la
directiva.
__CONFIG <expr> : define los bits de la palabra de configuración
ERRORLEVEL <‐expr> : tiene el efecto de poder silenciar el mensaje enumerado en <expr>
emitido por el ensamblador.
ORG <expr> el origen del programa comienza en lo que se especifique en <expr>
#DEFINE <nombre> <string> : define una cadena de sustitución de texto.
<etiqueta> EQU <expr> : permite asignar el valor de <expr> a la etiqueta.
CBLOCK <expr> : asigna direcciones (en RAM) a muchas etiquetas a partir de <expr>.
Se auto ‐ incrementa
ENDC : se escribe siempre al final de una lista de etiquetas definidas en el CBLOCK
END : directiva obligatoria que indica el fin del programa
José Faginas 12
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
; xxxxxxx.asm
; Descripción:
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
; Hardware: Breve descripción de conexiones al uC
; Clock @ 4MHz XT
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
; Autor:‐‐‐‐‐‐‐‐‐‐ Versión:‐‐‐‐‐‐ Fecha:‐‐‐‐‐‐‐‐
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
LIST p=PIC16F84A
PLANTILLA (Template)
INCLUDE <p16F84A.inc>
__CONFIG _WDT_OFF & _CP_OFF & _XT_OSC & _PWRTE_ON
ERRORLEVEL ‐302
;‐ Definiciones y Constantes ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
CONSTANTE EQU .27
;‐ Variables ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
CBLOCK 0x0C
;acá van las variables
ENDC
;‐ Vectores ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
ORG 0x000
goto Main
ORG 0x004
retfie
;‐ Programa Principal ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
Main
; Configuro los ports de entrada salida
bsf STATUS,RP0
clrf TRISB
movlw 0xFF
movwf TRISA
bcf STATUS,RP0
Aca
;TO DO colocá aquí tu código
goto Aca
;‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
END
José Faginas 13