You are on page 1of 48

Tema 3

LENGUAJE ENSAMBLADOR

Microcontroladores: Tema 3

Qu es el lenguaje Ensamblador?
Es un lenguaje de computadora que se encuentra en el
trmino medio de un lenguaje de alto nivel y el lenguaje de
mquina ejecutado por un microcontrolador.
LENGUAJE
ALTO NIVEL
Inicio:
For I = 1 to 10 do
begin
valor = valor + 2
end

LENGUAJE
ENSAMBLADOR
movlw
movwf
movff
movlw
movf

0x01
0x30
0x30,0x40
0x00
0x40,W

LENGUAJE
MAQUINA
0x0108
0x010A
0xC030
0xE000
0x5040

Microcontroladores: Tema 3

Crossasembler?
El ensamblador utilizado para programar un
microcontrolador es llamado
crossasembler o ensamblador cruzado ya
que el cdigo generado no es ejecutado
en la plataforma de desarrollo.

Microcontroladores: Tema 3

Ciclo de Desarrollo tradicional


Editor
de
Texto

Programa
Fuente

Ensamblador

*.asm

Programa
Objeto

*.O

Linker

Ejecutable

*.hex

Emulador
Simulador
*.cof

*.O
Programador

Microcontroladores: Tema 3

Elementos del lenguaje

Instrucciones de mquina
Directivos de ensamblador
Control del ensamblador
Comentarios

Cdigo
Fuente

Microcontroladores: Tema 3

Formato de una instruccin


[ETIQUETA:]

MNEMONICO [OPERANDO],[OPERANDO] ;COMENTARIO

INICIO: movf 0x020,W ;Lee registro

Microcontroladores: Tema 3

Etiqueta de Direccin
Representa con un nombre la direccin
donde se encuentra localizada la instruccin
que la precede

Se consideran solamente los primeros 32 chars


Siguiero terminar con dos puntos :
No puede contener espacios en su interior
No puede empezar con un nmero
Debe iniciar en columna 1

Microcontroladores: Tema 3

Comentario
INICIO: movf 0x020,W ;Lee registro

Comentarios:
Deben iniciar con punto y coma ;

Microcontroladores: Tema 3

Smbolos predefinidos
Nombres que el ensamblador maneja como
default y que representa los registros y
direcciones empleadas mnemnicamente
por el fabricante
Microchip los define en un archivo llamado
NO_PARTE.INC P18F45K22.INC

Instruccin

Equivalencia

addwf 0x40,WREG
bsf
LATA,0x00

addwf 0x40,0xFE8
bsf
0xF89,x00

Microcontroladores: Tema 3

Evaluacin de Expresiones
Las direcciones, constantes y operandos
pueden ser representadas de tres maneras
para facilitar la legibilidad del programa
movwf
Explcito
Predefinido movwf
movwf
Expresin

10

0xFB2
TMR3
0xFB1 + 1

Microcontroladores: Tema 3

Bases Numricas
Para facilitar la legibilidad, el ensamblador
permite expresar los nmeros en varias bases
numericas. La indicacin del tipo de base se
realiza por medio de un prefijo. La base o radix
default es hexadecimal pero se puede modificar

11

Microcontroladores: Tema 3

Directivas de ensamblador
Son instrucciones que le indica al ensamblador
a hacer cosas diferentes a la generacin de
cdigo de mquina.
Control
Condicionales
Datos
Listado
Macro
Objeto
12

Microcontroladores: Tema 3

Control
Controlan como ser ensamblado el programa

13

Microcontroladores: Tema 3

Condicional
Permiten que ciertas secciones del cdigo sean
ensambladas o no dependiendo de una condicin
lgica. NO son como las condicionales en lenguaje de
alto nivel

14

Microcontroladores: Tema 3

Datos
Controlan la alocacin de memoria y proveen un
medio para referirnos a estos elementos en forma
simblica

15

Microcontroladores: Tema 3

Listado
Controlan el formato de salida del archivo de listado
(*.LST). Permiten definir titulos, paginacin etc..

16

Microcontroladores: Tema 3

Macro
Permiten la creacin de macros que nos evitan tener
qu estar re-escribiendo grupos de instrucciones

17

Microcontroladores: Tema 3

Objeto
Usadas para la creacin de cdigo objeto.

18

Microcontroladores: Tema 3

Definicin de constantes
Directivo equ
CUATRO
ACC
OTRO_CUATRO
SON_DOS

19

equ
equ
equ
equ

4
WREG
CUATRO
CUATRO/2

;Asigna valor de 4 a simbolo CUATRO


;Asigna el valor de un predefinido.
;Otra asignacin
;Se permiten operaciones

Microcontroladores: Tema 3

Definicin de Variables
Directivo set
Define variables en ram interna.
MI_VARIABLE

20

set

0x00

;Asigna el nombre a direccin 0x00

Microcontroladores: Tema 3

Definicin de Constantes en ROM


Directivo db
Define una constante en memoria de programa.
COPYRG_MSG:
CONSTANTES:
MEZCLA_LO:

db
db
db

Copyright 2012
0x01,0x03
'A',Hola,04h

;Ascii literal
;Tabla de ctes
;Mezclado

Cuando se usa en la generacin de cdigo relocalizable se puede usar para definir espacio de

RAM

21

Microcontroladores: Tema 3

Directivo org
Asigna el operando al que precede un valor
absoluto de direccin de modo que todas las
instrucciones estaran localizadas a partir de
esa direccin.
org 0x0000
bra inicio
inicio:

22

;Inicio de memoria programa


;En reset ejecutar principal

org 0x0100
;Direccion de codigo 0100
addwf 0x40,WREG

Microcontroladores: Tema 3

Ms sobre Directivos
El lenguaje ensamblador, tiene la capacidad
de manejar mdulos independientes. Los
directivos asociados a este esquema de
programacin quedan fuera del alcance del
curso.

23

Microcontroladores: Tema 3

Sobre el Linker
El Linker es un programa utilizado para
unir varios archivos objeto relocalizable
en un archivo objeto ms grande.

24

Microcontroladores: Tema 3

Sobre el Linker
La herramienta
MPLAB realiza el
proceso en forma
automtica, sin
embargo esta
definicin puede
requerir cambios en
ciertas aplicaciones.

25

Microcontroladores: Tema 3

Programacin

26

Microcontroladores: Tema 3

Programas

27

Entender el problema
Definir la estrategia de solucin
Definir el algoritmo
Codificacin
Pruebas y depuracion (debug)
Liberacin
Mantenimiento

Microcontroladores: Tema 3

Banda Transportadora
TORRETA
SENSOR

CONTENEDOR

MOTOR

BOTON DE
ARRANQUE
CONTROLADOR
BASADO EN PIC18
28

Microcontroladores: Tema 3

29

Microcontroladores: Tema 3

Banda Transportadora
El programa de control deber de realizar lo
siguiente:
Esperar el botn de arranque
Contar el nmero de cajas
Si el nmero llega a un MAXIMO
Parar la banda transportadora
Encender una torreta
Esperar de nuevo el botn de arranque.

30

Microcontroladores: Tema 3

Banda Transportadora
Seales en sensores y actuadores:
RB4

BOTON
PRESIONADO

RD0
MOTOR
ENCENDIDO

1
0
RB5

0
RD1

SENSOR
CAJA PRESENTE

TORRETA
ENCENDIDA

1
0
31

Microcontroladores: Tema 3

INCIO

INICIALIZAR

NO

BO TO N
PRESIONADO

ENCENDER MO TO R
APAGAR TO RRETA
NO

CAJA
PRESENTE

CUENTA =
CUENTA + 1

INICIALIZAR
CUENTA
NO

CAJA
AUSENTE

32

CUENTA
= MAXIMO ?

ENCENDER
TO RRETA

SI

APAG AR
MO TO R

Microcontroladores: Tema 3

33

Microcontroladores: Tema 3

;****************************************************************************
;*
Programa principal
;****************************************************************************

inicia:

org
bra

0x0000
inicia

;Direccion de memoria en reset


;Brinca a inicio del programa

org
call

0x0100
inicializa_p

;Queremos que empiece el programa en 0x100


;Subrutina de inicializacion de puertos

;Apagar de entrada los puertos del motor y la sirena


bcf
bsf
clrf

34

PORTA,MOTOR
PORTA,TORRETA
CUENTA

;Apagar el motor (activo alto)


;Apagar torreta (activo bajo)
;Hacemos la cuenta = 0

Microcontroladores: Tema 3

;* ESPERAMOS A QUE PRESIONEN EL BOTON, ESTO SUCEDE CUANDO BOTON = 0


espera_boton:

btfsc
bra

PORTA,BOTON
espera_boton

;Test bit and skip if clear (0)


;Si es 1 continua preguntando

;* YA PRESNIONO EL BOTON ENTONCES ENCENDEMOS EL MOTOR


bsf
PORTA,MOTOR
;Encender el motor (activo alto)
bsf
PORTA,TORRETA
;Apagar torreta (activo bajo)
;* ESPERAMOS LA PRESENCIA DE UNA CAJA ESTO SUCEDE CUANDO SENSOR = 1
espera_caja1:

btfss
bra

PORTA,SENSOR
espera_caja1

;Test bit and skip if set (1)


;Si es 0 continua preguntando

;* ESTA PASANDO UNA CAJA, LA CONTAMOS


movlw
addwf

0x01
CUENTA,F

;Vamos a sumoar 1 W = 1
;Sumamos CUENTA = CUENTA + W

;* ESPERAMOS QUE TERMINE DE PASAR LA CAJA, SUCEDE CUANDO SENSOR = 0


espera_caja2:

btfsc
bra

PORTA,SENSOR
espera_caja2

;Test bit and skip if clear (0)


;Si es 1 continua preguntando

;* VAMOS AHORA A CHECAR SI YA SE LLEGO A LA CUENTA MXIMA

movlw
cpfseq
bra

MAXIM0
CUENTA
espera_caja1

;Compare f with WREG, skip =


;Si no fue igua, espera la siguiente caja

;* cuenta = MAXIMO, encender sirena....

35

bcf
clrf
bra

PORTA,TORRETA
CUENTA
espera_boton

;Encender torreta (activo bajo)


;Hacemos la cuenta = 0
;Esperar boton

Microcontroladores: Tema 3

Principales archivos generados


*.O
Cdigo objeto

*.LST
Listado del programa

*.COF
Archivo para la herramienta de debug

*.HEX
Archivo ejecutable (formato INTEL HEX)
36

Microcontroladores: Tema 3

Archivo Ejecutable
El archivo que va a ser ejecutado por el microcontrolador
puede ser generado en varios formatos, entre los
principales formatos se encuentran:

37

Intel extendido (texto)


Intel corto (texto)
Motorola S records (texto)
Tektronix (texto)
Binario (binario secuencial)

Microcontroladores: Tema 3

Archivo Intel Hex.


Empleado por muchos programadores como
el archivo estandar.
Cada lnea equivale a un registro
Existen 4 tipos de registros

38

Registro de datos
Registro de fin
Registro segmentado
Registro lineal

0x00
0x01
0x02
0x04

Microcontroladores: Tema 3

Archivo Intel Hex.


:020000040000FA
:0400000080EF00F09D
:1001000095EC00F080928086006A80B0FED78082F5
:10011000808680A4FED7010E002680B4FED7030E91
:100120000062F7D78096006AF0D70F01806A896A6B
:0A013000E00E386FF50E926E12001B
:00000001FF
Direccin
De
Memoria

Check
Sum

:0400000080EF00F09D
Inicio

39

Cantidad
de
Bytes

Tipo

4 Bytes
80,EF,00,F0

Microcontroladores: Tema 3

Documentacin.
Los programa en lenguaje ensamblador como en
cualquiere lenguaje deben de ser adecuadamente
documentados para facilitar el mantenimiento.
El lenguaje ensamblador es muy criptico si lo
comparamos con otros lenguajes por lo que la
documentacin se vuelve un factor muy importante.
Un programa sin documentacin es un programa que no
puede ser mantenido, un programa que no puede ser
mantenido acaba en la basura ......y......
Firmware is the most expensive thing in the universe, yet
we do little to control its costs (Jack Ganssle dixit)
40

Microcontroladores: Tema 3

Documetacin.
Se recomienda que todo programa deber de iniciar con un
encabezado con mnimo la siguiente informacin:

Autor
Fecha de creacin
Archivo
Versin/Revisin y fecha
Layout de los puertos y dispositivos destino
Abstract de como funciona
Herramientas empleadas para su desarrollo
Ensamblador/Linker/versiones etc.

Modulos adicionales requeridos


Instrucciones especiales
41

Microcontroladores: Tema 3

Documetacin.
Se recomienda tener una seccin a manera de bitcora
donde se indica:

42

Versin anterior
Archivo anterior
Versin actual
Archivo actual
Fecha de la revisin
Abstract de los cambios realizados.

Microcontroladores: Tema 3

Documetacin.
Se recomienda que cada procedimiento y subrutina lleve
un encabezado donde se describe su funcin.
Se recomienda el uso exahustivo de comentarios para
indicar en forma textual lo que las intrucciones estan
realizando.
Se recomienda que las variables tengan nombres
coherentes con su funcin y sean lo ms descriptivas
posibles.
Existen muchos estilos para el nombramiento de variables
y tipos, se debe de probar con varios para encontrar el que
mejor se adapte a la organizacin.

43

Microcontroladores: Tema 3

Instrucciones de rotacin

44

Microcontroladores: Tema 3

Resumen

45

Lenguaje ensamblador
Elementos del lenguaje
Ejemplos de programas
Archivos
Documentacin.

Microcontroladores: Tema 3

Rotacin izquierda
7

rlcf f,d,a

rlncf f,d,a

46

Microcontroladores: Tema 3

Rotacin derecha
C

rrcf f,d,a

rrncf f,d,a

47

Microcontroladores: Tema 3

Ejemplos usando MPLAB


(TEMA_03_1.ASM)

48