Está en la página 1de 41

Clase 3

Archivos de audio: Clase 3-1

Universidad Rafael Urdaneta


Profesor Claudio Bustos
claudio.bustos@uru.edu
Recordando el esquema básico de un programa
en Ensamblador para PIC 16F84A
 Conservamos los pasos iniciales y la configuración
 Directivas iniciales: list, include
 Declaración de variables (direcciones de RAM): directiva
EQU
 Definición de origen en memoria de programa: directiva
ORG
 Configuración de puertos (entradas/salidas): TRISA y
TRISB
 Revisamos los bits o palabras de entrada
 Si son entradas externas revisamos el puerto
correspondiente
 Si son condiciones internas revisamos los registros
adecuados
Archivo audio: Clase 3-1, 0:00
Recordando el esquema básico de un programa
en Ensamblador para PIC 16F84A (cont.)
 Estructuramos el programa principal
 Seleccionamos las acciones a tomar, según las entradas
 Organizamos en forma modular: cada acción con
subrutina
 Al finalizar no olvidemos:
 Reiniciar el programa
 Finalizar con directiva END (administrativo)
 Verificar los comentarios de línea más pertinentes:
iniciar con (;)

Archivo audio: Clase 3-1, 0:00


Revisando las entradas del programa
 Para revisar los bits de entrada (externos o internos)
 Verificamos si el bit es uno o cero, según nos convenga:
 Usamos BTFSS para verificar si es uno y saltar una instrucción
 Si el bit revisado es cero, no salta; continúa la ejecución
 En cambio, usaremos BTFSC si nos interesa saltar una
instrucción cuando el bit revisado es cero
 En este caso, si en bit revisado es uno, no salta
 Cada instrucción a la que llegamos desde la revisión será
una llamada a subrutina (instrucción CALL)
 Al final de la subrutina podemos regresar de dos formas:
 Con RETURN para continuar la ejecución desde donde
llamamos esa subrutina
 Con GOTO para reiniciar el programa
Archivo audio: Clase 3-1, 0:00
Revisando las entradas del programa
 Para revisar palabras completas de entrada
 Verificamos la palabra binaria del puerto (externa) o del
registro RAM (interna), de dos maneras posibles:
 Forma 1: LÓGICA. Colocamos la palabra de entrada en
el registro W y la comparamos con una palabra de
referencia fijada en el programa, mediante la instrucción
XORLW
 Si las palabras son iguales, el resultado de la operación XOR
para todos los bits será cero y se encenderá la bandera Z del
registro STATUS
 Usaremos BTFSS STATUS, Z si nos interesa saltar una
instrucción cuando las palabras sean iguales (bit Z revisado
será uno)
 En caso de que queramos saltar cuando Z sea cero, usamos
BTFSC Archivo audio: Clase 3-1, 0:00
Revisando las entradas del programa
 Para revisar palabras completas de entrada
 Forma 2: ARITMÉTICA. Podemos también comparar las
palabras de entrada (en W) y de referencia (en el
programa) a través de una resta aritmética, mediante la
instrucción SUBLW
 Si las dos palabras son iguales el resultado de la resta será cero
 La revisión de la bandera Z es exactamente igual que para
XORWF
 También es posible colocar la palabra de referencia en el
registro W y comparar su contenido con el registro de
entrada, mediante XORWF o SUBWF
 Organizamos las llamadas a subrutina (CALL) en forma
idéntica a la utilizada para bits de entrada
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 de Programación - PIC 16F84A
 Problema a resolver
 Se requiere utilizar un PIC 16F84A para encender en forma
intermitente un led conectado al pin 0 del puerto B (RB0)
(terminal 6 del circuito integrado) mediante una entrada
(pulsador) conectada al pin 4 del puerto A (RA4) (terminal 3
del circuito integrado). Cuando RA4 esté apagado, RB0 será 1
 Condiciones del ejemplo
 Codifique el programa en Ensamblador para que el bit RB0 se
utilice como salida y fije cada uno de sus valores (1 y 0)
durante un tiempo adecuado. La intermitencia se ejecutará
permanentemente siempre que el bit RA4 (entrada) sea 1
 Se supone que todo el circuito (hardware) ya está preparado
para funcionar: el PIC estará alimentado, el led está
conectado en el terminal 6, el pulsador en el terminal 3 y un
oscilador de 1 MHz está conectado en los terminales 15 y 16.
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – usando una entrada
 Directivas iniciales (list, include)
 Declaración de variables (direcciones de RAM)
 Usamos dos contadores como el ejemplo 1 (cont1 y cont2)
 Origen en memoria de programa en 0: ORG 0
 Configuración del puerto B como salidas (al menos RB0)
 Definición de todos los bits en TRISB como ceros
 Configuración del puerto A como entradas (al menos RA4)
 Definición de todos los bits en TRISA como unos
 Estructuración del programa principal
 Re revisará el bit RA4
 Si RA4 es 1, se encenderá el bit RB0 y luego se apagará
 Si RA4 es 0, se encenderá permanentemente el bit RB0
 Se usarán 3 subrutinas: interm, encend y retardo
 Reinicio del programa (goto al inicio)
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – usando una entrada
list p=16F84A ;directivas iniciales
include <PIC16F84A.INC>
cont1 EQU 0x0C ;dirección variable cont1
cont2 EQU 0x0D ;dirección variable cont2
ORG 0
conf BSF STATUS,RP0 ;selección Banco 1
CLRF TRISB ;todo PORTB: salidas
MOVLW 0x1F
MOVWF TRISA ;todo PORTA: entradas
BCF STATUS,RP0 ;selección Banco 0
CLRF PORTB ;apagar todo Puerto B

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – usando una entrada (cont)
inicio BTFSS PORTA, RA4 ;revisar bit de entrada
CALL encend
CALL interm
GOTO inicio ;reinicio
encend BSF PORTB,RB0 ;encender led
CALL retardo
GOTO inicio ;no usamos RETURN
interm BSF PORTB,RB0 ;encender led
CALL retardo
BCF PORTB,RB0 ;apagar led
CALL retardo
RETURN ;o también GOTO inicio
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – usando una entrada (cont)
retardo MOVLW 0x7F ;cargar valor de cont1
MOVWF cont1
lazo1 MOVLW 0xFF ;cargar valor de cont2
MOVWF cont2
lazo2 DECFSZ cont2, F ;decrementar en lazo2 (interno)
GOTO lazo2 ;nueva iteración lazo2
DECFSZ cont1, F ;decrementar en lazo1 (externo)
GOTO lazo1 ;nueva iteración lazo1
RETURN ;regresar al principal
END

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Iniciamos el
MPLAB IDE, en
este ejemplo es la
v8.76
 Tenemos
disponibles la
ventana de
archivos y la de
salidas

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Creamos un nuevo
proyecto en
MPLAB mediante
el tutor de
proyectos (Project
Wizard)
 De esta manera
configuraremos
todo lo necesario
para editar y
probar nuestro
proyecto
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Seleccionamos el
modelo de PIC a
utilizar en el
proyecto
 En nuestro caso
será PIC16F84A

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Seleccionamos el
tipo de programa
ensamblador para
el proyecto
 En nuestro caso
será el que viene
preseleccionado:
MPASM de la
Microchip
MPASM Toolsuite

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Asignamos un
nombre al
proyecto
 Este nombre será
del archivo que
tendrá toda la
información de
configuración
 No corresponde a
los archivos fuente
ni librerías

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Ahora debemos
asignar un nombre
al archivo fuente
 La manera más
directa es tener ya
listo un archivo
.asm en blanco
 Lo podemos crear
en bloc de notas y
colocarle su nombre
entre comillas
dobles con la
respectiva
extensión .asm
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Ahora
seleccionamos el
archivo .asm en
blanco
previamente
creado y lo
agregamos al
proyecto (Add)

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Ahora nos aparece
el archivo .asm en
la carpeta Source
Files del proyecto
 Damos doble click
y estamos listos
para transcribir
nuestro ejemplo

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Antes de
transcribir el
ejemplo, vamos a
incluir el archivo
de librería en la
carpeta Header
Files
 Damos click
derecho en la
carpeta y luego
Add Files

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 El archivo lo
ubicamos en la
carpeta Microchip
de nuestro disco
duro, dentro de
Program files o
Datos de programa
 Dependiendo de la
versión de MPLAB
el archivo puede
llamarse distinto.
En mi caso encontré
el P16F84A.INC

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Durante la
transcripción del
programa es muy
conveniente que
respetemos las
columnas de
etiquetas (1),
instrucciones con
operandos (2) y
comentarios (3)
 Esto nos da mejor
visión del programa
y evita mensajes
innecesarios
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Transcribimos
nuestro programa y
ya podemos
ensamblarlo
(compilarlo)
 Si nos aparece el
mensaje Absolute o
Relocatable?
Seleccionamos
Relocatable para
permitir la
reubicación del
proyecto en
memoria del
computador, si es
necesario
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Cada vez que
modifiquemos el
archivo fuente o el
proyecto podemos
guardarlos en dos
sitios distintos
 Los archivos fuente
en el símbolo de
diskette amarillo
(izquierda)
 El archivo del
proyecto en el
símbolo de diskette
verde (derecha)
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Seleccionamos el
icono Build All a la
derecha de la barra
o en el menú
Project -> Build All
 Verificamos en la
ventana Output que
sólo hayan
mensajes (Message)
o advertencias
(Warning) y que se
ensamble
correctamente
(BUILD
SUCCEEDED)
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Si se presentan
errores (BUILD
FAILED) damos
doble click en la
linea que indica el
error, lo cual nos
lleva a la línea de
programa donde
debemos hacer la
corrección

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 De esta manera
podemos ver la
línea con el error y
el tipo de error
que debemos
corregir
 Siempre debemos
corregir los
primeros errores,
que generalmente
producen muchos
de los siguientes
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Si queremos
mostrar las líneas
en el editor
seleccionamos
Edit -> Properties
-> Pestaña ‘ASM’
File Types -> Line
Numbers

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Ya ensamblado el
programa,
procedemos a abrir
la ventana de
Registros de
Funciones
Especiales (menú
View -> Special
Function Registers)
y allí observamos el
estado de los
registros más
importantes del PIC

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Sólo necesitamos
activar el
simulador en el
menú Debugger -
> Select Tool ->
MPLAB SIM y
veremos una
pequeña barra de
herramientas
nueva

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Aquí podemos
correr el programa
(RUN) a una
velocidad
considerable
(también en el
menú Debugger ->
Run) o animarlo
( ANIMATE o
en menú Debugger
-> Animate) a una
velocidad más lenta
para observar los
cambios
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Podremos observar
una flecha verde en el
código, indicando la
línea que se está
ejecutando
 En la ventana SFR
veremos en rojo los
registros que están
cambiando
 Si no está la columna
Binary podemos
agregarla usando
click derecho en SFR
Name o en Hex
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Para una mejor
animación debemos
cambiar los valores
del retardo a 0x02 o
0x02 para ejecutar
los lazos sólo 2 o 3
veces
 En cualquier
momento podemos
pausar la animación
o ejecutarla paso a
paso en la barra de
MPLAB SIM
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Ya aquí se aprecia
cómo están
cargados los
registros TRISA y
TRISB (config)
 También el bit RB0
se encendió fijo en
el puerto B
 Sólo nos falta fijar
el bit de entrada
RA4

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Para fijar el bit de
entrada RA4
debemos activar la
ventana de
estímulos externos
en el menú
Debugger ->
Stimulus -> New
Workbook

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 En esta ventana
Stimulus podemos
asignar distintas
acciones a nuestros
pines de entrada
 La simulación de
estas acciones las
activaremos en el
botón Fire a la
izquierda de cada
fila, cuando estén
asignadas
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 Para nuestro
ejemplo, vamos a
asignar un
interruptor (Toggle)
al bit RA4 del
puerto A
 Pulsamos Apply
para validar y
observamos que el
botón Fire está listo
para funcionar (>)

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Por último,
organizamos las
ventanas, ya que la
que contiene el
código siempre
estará al frente
 Pulsamos Fire (>) y
observamos el
comportamiento
del bit RB0 (si RA4
está en cero será fijo
encendido, si está
en 1 será
intermitente)
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 En todo momento
podemos observar:
 las llamadas a
subrutinas desde
el programa
principal y otras
subrutinas
 La ejecución de los
lazos anidados en
retardo
 El reinicio al
programa
principal
Archivo audio: Clase 3-1, 0:00
Ejemplo 2 – Simulación
 En caso de que la ejecución del programa no sea la
deseada o que sus condiciones varíen, podemos pausar
la simulación y editar directamente el código en la
ventana respectiva
 También podemos agregar más entradas como otra fila
en Stimulus (con su pin y su acción)
 Volvemos a ensamblar el código con Build All (de
todas maneras si tratamos de animar sin ensamblar el
IDE nos indicará que el ejecutable no está actualizado)
 De nuevo pulsamos animate y observamos los cambios
o ajustes realizados

Archivo audio: Clase 3-1, 0:00


Ejemplo 2 – Simulación
 Si deseamos observar la ejecución del programa en un
simulador de circuitos será necesaria otra herramienta
como PROTEUS
 En el esquemático armaremos el circuito respectivo
agregando el PIC correspondiente y tomando en
cuenta los pines de conexión según las condiciones del
problema
 Luego cargamos en el PIC el archivo ejecutable de
nuestro proyecto (.hex) que encontraremos en la
misma carpeta desde la que agregamos el .asm, para
poder simular la ejecución del programa

Archivo audio: Clase 3-1, 0:00

También podría gustarte