Anda di halaman 1dari 35

Universidad Nacional de Ingeniera Facultad de Electrotecnia y Computacin Departamento de Sistemas Digitales y Telecomunicaciones

Guas de Laboratorios de Mquinas Computadoras I


Luis Alberto Vargas Tijerino

2011

Contenido
Laboratorio 1: 1.1 1.2 1.3 1.4 Introduccin a MPLAB y Proteus. .............................................................................................. 3 Objetivo. ................................................................................................................................................... 3 Introduccin. ............................................................................................................................................ 3 MPLAB. ..................................................................................................................................................... 3 Procedimiento. ......................................................................................................................................... 3 Crear un Nuevo Proyecto. ................................................................................................................. 3 Configurar las herramientas del Lenguaje. ....................................................................................... 4 Crear una capeta para el Proyecto ................................................................................................... 5 Agregar Archivos existentes al Proyecto. ......................................................................................... 5 Agregar un nuevo Archivo al Proyecto ............................................................................................. 6 Compilar el proyecto......................................................................................................................... 7 Crear el circuito en Proteus .............................................................................................................. 7 Cargar el Archivo fuente ................................................................................................................... 8 Realizar la simulacin ........................................................................................................................ 9

1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9

1.4.10 Abrir la ventana de observacin ..................................................................................................... 10 1.4.11 Agregar los Registros por Nombre.................................................................................................. 10 1.4.12 Agregar los Registros por Direccin ................................................................................................ 11 Laboratorio 2: 2.1 2.2 2.3 2.4 2.5 Introduccin al Lenguaje Ensamblador. .................................................................................. 13

Objetivo. ................................................................................................................................................. 13 Introduccin. .......................................................................................................................................... 13 Instrucciones a utilizar. .......................................................................................................................... 13 Constantes Numricas y Alfanumricas................................................................................................. 14 Procedimiento ........................................................................................................................................ 14 Programacin Elemental. ........................................................................................................ 17

Laboratorio 3: 3.1 3.2 3.3 3.4 3.5

Objetivo .................................................................................................................................................. 17 Introduccin ........................................................................................................................................... 17 Instrucciones Aritmticas y Lgicas. ...................................................................................................... 17 Procedimiento ........................................................................................................................................ 18 Trabajo Extra Clase. ................................................................................................................................ 20 Saltos Condicionales y Subrutinas de Retardo ........................................................................ 21 Pgina 1

Laboratorio 4:

Autor: Luis Alberto Vargas Tijerino

4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9

Objetivo .................................................................................................................................................. 21 Introduccin ........................................................................................................................................... 21 Subrutinas. ............................................................................................................................................. 21 Subrutinas Anidadas............................................................................................................................... 22 La Pila...................................................................................................................................................... 22 Ciclo Mquina ......................................................................................................................................... 23 Instrucciones a utilizar. .......................................................................................................................... 24 Procedimiento ........................................................................................................................................ 25 Trabajo Extra Clase. ................................................................................................................................ 27 Tablas ....................................................................................................................................... 28

Laboratorio 5: 5.1 5.2 5.3 5.4 5.5 5.6 5.7

Objetivo .................................................................................................................................................. 28 Introduccin ........................................................................................................................................... 28 Salto Indexado ........................................................................................................................................ 28 Tablas de datos en la memoria de Programa ........................................................................................ 28 Instrucciones a utilizar. .......................................................................................................................... 29 Procedimiento ........................................................................................................................................ 29 Trabajo Extra Clase. ................................................................................................................................ 30 Macros ..................................................................................................................................... 32

Laboratorio 6: 6.1 6.2 6.3 6.4 6.5

Objetivo .................................................................................................................................................. 32 Introduccin ........................................................................................................................................... 32 Macros .................................................................................................................................................... 32 Procedimiento ........................................................................................................................................ 33 Trabajo Extra clase ................................................................................................................................. 34

Autor: Luis Alberto Vargas Tijerino

Pgina 2

Laboratorio 1:
1.1 Objetivo.

Introduccin a MPLAB y Proteus.

Familiarizarse con el entorno de desarrollo MPLAB para crear nuevos proyectos.

1.2 Introduccin.
En este laboratorio el alumno aprender a crear nuevos proyectos utilizando el entorno de desarrollo MPLAB y luego aprender a crear y simular los circuitos utilizando el simulador ISIS-Proteus.

1.3 MPLAB.
MPLAB IDE es un software de Entordo de desarrollo integrado (Integrated Development Enviorement, IDE) que se ejecuta bajo Windows. Con este entorno se pueden desarrollar aplicaciones para microcontroladores en lenguajes Ensamblador y de alto Nivel (C y Basic). MPLAB incluye: Un editor de texto. Un ensamblador llamado MPASM. Un simulador llamado MPLAB SIM. Un organizador de proyectos.

El programa es gratuito y puede ser descargado en la pgina del fabricante www.microchip.com [mic16f84, p77]

1.4 Procedimiento.
1.4.1 Crear un Nuevo Proyecto.

1. Abrir el MPLAB-IDE 2. Dar clic en Project>Project wizard.

3. Dar clic en el Botn Siguiente del cuadro de Bienvenida. 4. Seleccionar en el cuadro desplegable el dispositivo PIC16F887 y luego presionar siguiente.

Autor: Luis Alberto Vargas Tijerino

Pgina 3

1.4.2 Configurar las herramientas del Lenguaje. 1. Seleccionar " MPASM Assambler" de la lista Active Toolsuite. 2. En el cuadro de Texto Location escribir C:\ Archivos de Programa \Microchip\MPASM Suite\mpasmwin.exe o buscarlo mediante el botn browse. 3. Seleccionar MPLINK Object Linker de la lista Active Toolsuite. 4. En el cuadro de Texto Location escribir C:\ Archivos de Programa \Microchip\MPASM Suite\mplink.exe o buscarlo mediante el botn browse. 5. Seleccionar MPLIB Librarian del cuadro de lista Active Toolsuite. 6. En el cuadro de Texto Location escribir C:\Archivos de Programa\Microchip\MPASM Suite\mplib.exe o buscarlo mediante el botn browse. 7. Finalmente presionar Siguiente.

Autor: Luis Alberto Vargas Tijerino

Pgina 4

1.4.3 1. 2. 3.

Crear una capeta para el Proyecto En el cuadro de Texto Create New Project escribir C:\laboratorios\lab1. Presionar el botn Next. Presionar ok en el cuadro de dialogo que aparecer.

1.4.4 Agregar Archivos existentes al Proyecto. 1. Agregar el archivo C:\Archivos de Programa\Microchip\MPASM Suite\Template\Code\ 18F887TEMP.ASM. Este es un archivo de ejemplo que puede ser utilizado para iniciar cualquier proyecto, este contiene las secciones esenciales para cualquier archivo fuente y tambin contiene informacin que ayudar para escribir y organizar el cdigo. 2. Presionar el Botn Add. 3. Dar clic en la letra A hasta que aparezca una C. 4. Presionar Siguiente. 5. Presionar Finalizar.

Autor: Luis Alberto Vargas Tijerino

Pgina 5

1.4.5 Agregar un nuevo Archivo al Proyecto 1. Presionar el men View>Project para ver la ventana de proyectos

2. En la ventana de proyectos dar clic derecho en lab1.mcp y seleccionar Add New File

3. Nombrar el archivo como Inst_Bas.asm 4. Copiar el Cdigo 1.1 Inst_Bas.asm


Cdigo 1.1 Inst_Bas.asm

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ORG main BANKSEL CLRF CLRF BANKSEL MOVLW MOVWF CLRF BANKSEL bucle MOVF MOVWF GOTO ANSEL ANSEL ANSELH TRISB B'11111111' TRISB TRISD PORTB PORTB,W PORTD bucle ;Seleccionamos el Banco al que pertenece ANSEL (Banco 3) ;Ponemos a 0 todos los bit del registro ANSEL y ANSELH ;para configurar todos los pines como digitales ;Seleccionamos el Banco al que pertenece TRISB (Banco 1) ;Movemos el literal B'11111111' al registro de trabajo ;Movemos el dato del registro de trabajo al registro TRISB ;Para configurar todos los pines de PORTB como entrada ;Ponemos a 0 todos los bit de TRISD para configurar como ;salida todos los pines de PORTD ;Seleccionamos el Banco al que pertenece PORTB (Banco 0) ;Movemos el dato del registro PORTB al registro de trabajo ;Movemos el dato del registro de trabajo al registro PORTD ;Salta hacia la siguiente linea despues de la etiqueta bucle. 0x000 ; Vector de Reset del procesador

Autor: Luis Alberto Vargas Tijerino

Pgina 6

END

;Fin del Programa

1.4.6 Compilar el proyecto 1. Presionar el men Project>Build All o presionar la combinacin de teclas ctrl+F10 para compilar el cdigo.

2. En el cuadro de dialogo que aparecer presionar el botn Absolute. 1.4.7 Crear el circuito en Proteus 1. Abrir el simulador ISIS-Proteus . 2. Presionar la tecla P del teclado. 3. Escribir PIC16F887 en la caja de bsqueda (ver Figura 1.1) y darle doble clic al dispositivo en la lista de resultados para que aparezca en la ventana de dispositivos seleccionados.
Figura 1.1. Ventana Pick Devices

Ventana de dispositivos seleccionados

Caja de Busqueda

Lista de Resultados

Autor: Luis Alberto Vargas Tijerino

Pgina 7

4. Escribir LOGICPROBE en la caja de bsqueda y darle doble clic al dispositivo en la lista de resultados para que aparezca en la ventana de dispositivos seleccionados. 5. Escribir LOGICSTATE en la caja de bsqueda y darle doble clic al dispositivo en la lista de resultados para que aparezca en la ventana de dispositivos seleccionados. 6. Cerrar la ventana de Pick Devices. 7. En la ventana de dispositivos seleccionados darle un clic al dispositivo y luego dar un clic en la ventana de trabajo para que aparezca el dispositivo y finalmente ubicar los dispositivos como aparece en la siguiente figura. a. Si se desea rotar el dispositivo en sentido horario se debe presionar la tecla + del teclado numrico. b. Si se desea rotar el dispositivo en sentido anti-horario presionar la tecla - del teclado numrico. c. Si se desea rotar el dispositivo en espejo se debe presionar la combinacin de teclas ctrl+m.

Ventana de Trabajo.

Ventana de dispositivos seleccionados Barra de Simulacin

LOGICPROBE

PIC16F887 LOGICSTATE

8. Para conectar cada Pin debes ubicar el cursor sobre el extremo del pin del primer dispositivo (debe aparecer un lpiz), luego dar clic, ubicarse en el extremo del otro pin y dar clic. 9. Conectar el Pin del LOGICPROBE con el pin RB0 del PIC16F887. 10. Guardar el esquema (men Archivo>Save Design) en la misma carpeta del Proyecto. 1.4.8 1. 2. 3. Cargar el Archivo fuente Darle doble clic al PIC16F887 ubicado en la ventana de trabajo Darle clic al botn de la caja de texto Program File y seleccionar el archivo fuente Inst_Bas.cof Cambiar la frecuencia de reloj a 8MHz. Pgina 8

Autor: Luis Alberto Vargas Tijerino

4. Luego presionar el botn Ok. 1.4.9 Realizar la simulacin 1. Dar clic en el botn Play de la barra de simulacin y observar la simulacin. 2. Dar clic en el botn stop de la barra de simulacin. 3. Dar clic en el botn step de la barra de simulacin para iniciar la simulacin paso a paso o presionar la combinacin de teclas Ctrl+F12. 4. A continuacin se mostraran la ventana del cdigo fuente y la ventana de variables.

Ventana de Cdigo Fuente

Ventana de Variables

Autor: Luis Alberto Vargas Tijerino

Pgina 9

5. En la ventana de Cdigo aparecen 4 botones

a. Step over o tecla F10: La simulacin se realiza paso a paso pero al encontrar la llamada a una funcin el depurador la realiza toda la funcin de una sola vez sin entrar a ella. b. Step into o tecla F11: La simulacin se realiza paso a paso y al encontrar la llamada a una funcin el depurador la realiza entra a la funcin realizndola paso a paso. c. Step out o combinacin Ctrl+F11: Si el depurador se encuentra en el cdigo interno de una funcin al presionar este botn saldr del cdigo interno de la funcin y se mostrar la lnea siguiente a la llamada a la funcin. d. Run to Source Line el usuario. o combinacin Ctrl+F10: Ubica al depurador en la lnea seleccionada por

Una vez que se presione uno de los botones anteriores se puede observar el cambio en la ventana de cdigo y en la ventana de variables. 1.4.10 Abrir la ventana de observacin 1. Dar clic en men debug>watch window.

1.4.11 Agregar los Registros por Nombre 1. Dar clic derecho en la ventana de observacin y seleccionar Add Items (By Name)

Autor: Luis Alberto Vargas Tijerino

Pgina 10

2. Luego dar doble clic a los registros TRISB y PORTB en la ventana Add Memory Item.

1.4.12 Agregar los Registros por Direccin 1. Dar clic derecho en la ventana de observacin y seleccionar Add Items (By Addres)

Autor: Luis Alberto Vargas Tijerino

Pgina 11

2. En la ventana Add Memory Iten escribir en el cuadro de Texto Name PORTD y en el cuadro de Texto Address escribir la direccin 0x0008.

3. Presionar el botn Add y para finalizar presionar el botn Done

Autor: Luis Alberto Vargas Tijerino

Pgina 12

Laboratorio 2:
2.1 Objetivo.

Introduccin al Lenguaje Ensamblador.

Familiarizarse con las instrucciones bsicas mediante la implementacin del ejemplo prctico.

2.2 Introduccin.
El lenguaje mquina es difcil de utilizar por el hombre ya que se aleja de su forma natural de expresarse, por esto se utiliza el lenguaje ensamblador, que es la forma de expresar las instrucciones de forma ms natural al hombre y a su vez es el ms cercano al microcontrolador porque cada una de sus instrucciones corresponde a un cdigo mquina. Un dominio adecuado de las instrucciones del lenguaje ensamblador permite alcanzar un nivel elevado de aprovechamiento de las prestaciones hardware del microcontrolador. En esta gua de laboratorio estudiaremos las instrucciones bsicas para desarrollar cualquier programa utilizando lenguaje Ensamblador y tambin aprenderemos a configurar las lneas de los puertos.

2.3 Instrucciones a utilizar.


El lenguaje ensamblador utiliza nemnicos que son grupos de caracteres alfanumricos que simbolizan las rdenes o tareas a realizar con cada instruccin. Los nemnicos se corresponden con las iniciales del nombre de la instruccin en ingls, de forma que recuerdan la operacin que realiza la instruccin. [mic16f84, pag. 58] Por ejemplo: ADDLW d58 es igual a 11111000111010 La Tabla 2.1 muestra una lista de instrucciones que utilizaremos en este laboratorio. Estas instrucciones sern utilizadas en el Cdigo 2.1 Inst_Bas.asm
Tabla 2.1

Nemnico ORG k BANKSEL f CLRW CLRF f MOLW k MOVF f,d MOVWF f MOVFW f BCF f,b BSF f,b GOTO k

Significado

Descripcin Indica la direccin k en la que se iniciar el cdigo siguiente. Selecciona el Banco al que pertenece el registro f El contenido del registro w se borra asignndole b0000_0000. Borra el contenido del registro fuente asignndole b0000_0000. Mueve el valor de la constante k al registro w. Si d=0 d=w mueve el valor del registro f a w. Si d=1 d=f mueve el valor del registro f al mismo registro f. Mueve el valor del registro w al registro f Mueve el valor del registro f al registro w Pone a cero el bit b del registro f Pone a uno el bit b del registro f Salta hacia la direccin especificada por k, el cual puede ser una

Flags afectados RPx Z Z

Bank Select f Clear w Clear f Move w Move f Move w to f Move f to w Bit Clear f Bit Set f Go To k

Autor: Luis Alberto Vargas Tijerino

Pgina 13

END

End of Program

etiqueta o una constante. Indica el final de los programas, es decir, no se puede escribir cdigo despus de esta instruccin

2.4 Constantes Numricas y Alfanumricas


El ensamblador MPASM soporta los sistemas de numeracin decimal, hexadecimal, octal, binario y el cdigo alfanumrico ASCII. La representa la forma de especificar el sistema de numeracin o cdigos alfanumricos.
Tabla 2.2

Tipo Decimal

Hexadecimal

Octal Binario ASCII

String o Cadena

Sintaxis D<cantidad> d<cantidad> .<cantidad> H<cantidad> h<cantidad> 0x<cantidad> <cantidad>H <cantidad>h O<cantidad> o<cantidad> B<cantidad> b<cantidad> A<carcter> a<carcter> <carcter> <string>

Ejemplo MOVLW D109 MOVLW d109 MOVLW .109 MOVLW H6D MOVLW h6D MOVLW 0x6D MOVLW 6DH MOVLW 6Dh MOVLW O155 MOVLW o155 MOVLW B01101101 MOVLW b01101101 MOVLW AM MOVLW aM MOVLW M DT Hola

2.5 Procedimiento
1. 2. 3. 4. Crear un Nuevo Proyecto. Crear una capeta para el Proyecto llamada Lab2 Agregar un nuevo Archivo al Proyecto. Copiar el Cdigo 2.1 Inst_Bas.asm

Cdigo 2.1 Inst_Bas.asm

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ORG main BANKSEL ANSEL ;Seleccionamos el Banco al que pertenece ANSEL (Banco 3) 0x000 ; Vector de Reset del procesador

Autor: Luis Alberto Vargas Tijerino

Pgina 14

;Ponemos a uno el bit RP1 del registro STATUS ;Ponemos a uno el bit RP0 del registro STATUS ;Ponemos a 0 todos los bit del registro ANSEL y ANSELH ;para configurar todos los pines como digitales ;Seleccionamos el Banco al que pertenece TRISB (Banco 1) ;Ponemos a cero el bit RP0 del registro STATUS ;Movemos el literal B'11111111' al registro de trabajo ;Movemos el literal .255 al registro de trabajo ;Movemos el literal 0XFF al registro de trabajo ;Movemos el literal O'177' al registro de trabajo ;Movemos el dato del registro de trabajo al registro TRISB ;Para configurar todos los pines de PORTB como entrada CLRF TRISD ;Ponemos a 0 todos los bit de TRISD para configurar como ;salida todos los pines de PORTD BANKSEL PORTB ;Seleccionamos el Banco al que pertenece PORTB (Banco 0) ;BCF STATUS,RP0 ;Ponemos a cero el bit RP0 del registro STATUS bucle MOVF PORTB,W ;Movemos el dato del registro PORTB al registro de trabajo ;MOVFW PORTB MOVWF PORTD ;Movemos el dato del registro de trabajo al registro PORTD GOTO bucle ;Salta hacia la siguiente linea despues de etiqueta bucle. ;GOTO $-2 ;Salta 2 pocisiones hacia atras. END ;Fin del Programa

;BSF ;BSF CLRF CLRF BANKSEL ;BCF MOVLW MOVLW MOVLW MOVLW MOVWF

STATUS,RP1 STATUS,RP0 ANSEL ANSELH TRISB STATUS,RP0 B'11111111' .255 0XFF O'177' TRISB

5. Compilar el proyecto 6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887, el LOGICSTATE y el LOGICPROBE.

LOGICSTATE

PIC16F887

LOGICPROBE

7. Cargar el Archivo fuente, Realizar la simulacin (CTRL+F12 para iniciar y F10 para ir paso a paso), Abrir la ventana de observacin y Agregar los Registros por Nombre ANSEL, ANSELH, PORTB, PORTD, TRISB y TRISD. 8. Contestar las Siguientes Preguntas: Autor: Luis Alberto Vargas Tijerino Pgina 15

a. Cul es el valor de RPx despus de las lneas 10, 15 y 25? b. Cul es el valor de los registros ANSEL y ANSELH despus de la lena 15? c. Cul es el valor del registro W despus de la lnea 17, 18 y 19? d. Cul es el valor del registro TRISB despus de la lnea 21? e. Cul es el valor del registro TRISD despus de la lnea 23? f. Cul es el valor del registro PORTB despus de la lnea 28? g. Cul es el valor del registro W despus de la lnea 28? h. Cul es el valor del registro PORTD despus de la lnea 30? i. Qu ocurre despus de la lnea 31? j. Cambiar el valor de los LOGICSTATE y contestar de nuevo las preguntas f a la g. 9. Comentar las lneas 10, 15, 25 y 32 y descomentar las lneas 11, 12, 16, 26 y 32. 10. Compilar el proyecto y Realizar la simulacin de nuevo. a. Cul es el valor de RPx despus de las lneas 11, 12, 16 y 26? b. Qu ocurre despus de la lnea 31?

Autor: Luis Alberto Vargas Tijerino

Pgina 16

Laboratorio 3:
3.1 Objetivo

Programacin Elemental.

Familiarizarse con las instrucciones aritmticas y lgicas del lenguaje ensamblador.

3.2 Introduccin
En este laboratorio realizaremos los primeros programas elementales utilizando las instrucciones aritmticas y lgicas.

3.3 Instrucciones Aritmticas y Lgicas.


Los PIC de la gama media y baja pueden realizar las siguientes operaciones Aritmticas: sumar, restar, incrementar y decrementar un registro. Lgicas: AND, OR, XOR, NOT (o complemento), rotacin de bits y el intercambio de nibbles. Significado Add k to W Add w and f Descripcin Suma el contenido del registro w con el valor del literal k. Suma el registro w con el registro f. Si d=0 d=w el resultado se almacena en w. Si d=1 d=f el resultado se almacena en f. Resta el registro w menos el literal k. Suma el registro w con el registro f. Si d=w el resultado se almacena en w. Si d=f el resultado se almacena en f. Decrementa el valor de f en uno Si d=w el resultado se almacena en w. Si d=f el resultado se almacena en f. Incrementa el valor de f en uno Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Efecta la operacin AND entre w y k Efecta la operacin AND entre w y f Si d=0 o d=w el resultado se almacena en w. Operacin (w)=(w)+k (d)=(w)+(f) Flags afectados Z, C, DC Z, C, DC

Nemnico ADDLW k ADDWF f,d

SUBLW k SUBWF f,d

Subtract k to W Subtract w and f

(w)=(w)-k (d)=(w)-(f)

Z, C Z, C

DECF f,d

Decrement f

(d)=(f)-1

Z, C

INCF f,d

Increment f

(d)=(f)+1

Z, C, DC

ANDLW k ANDWF f,d

AND k with w AND w with f

(w)=(w) and k (d)=(w) and (f)

Z Z

Autor: Luis Alberto Vargas Tijerino

Pgina 17

IORLW k IORWF f,d

OR k with w OR w with f

XORLW k XORWF f,d

XOR k with w XOR w with f

COMF f,d

NOT f

RLF f,d

Shift Left f

RRF f,d

Shift Right f

SWAPF f,d

Swap Nibbles f

Si d=1 o d=f el resultado se almacena en f. Efecta la operacin OR entre w y k Efecta la operacin OR entre w y f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Efecta la operacin XOR entre w y k Efecta la operacin XOR entre w y f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Efecta la operacin NOT entre de f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Desplaza un bit hacia la izquierda a f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Desplaza un bit hacia la derecha a f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f. Intercambia los Nibbles de f Si d=0 o d=w el resultado se almacena en w. Si d=1 o d=f el resultado se almacena en f.

(w)=(w) or k (d)=(w) or (f)

Z Z

(w)=(w) xor k (d)=(w) xor (f)

Z Z

(d)=not (f)

(d)= (f)<<1

(d)= (f)>>1

(d)= swap(f)

Como se aprecia en la tabla anterior, los PIC10, PIC12 y PIC16 no poseen instrucciones de multiplicacin y divisin, para realizar estas operaciones es necesario sumar o restar el nmero de veces necesario. Por ejemplo, si se desea realizar una multiplicacin de un nmero por 5 este deber ser sumado 5 veces.
5 a a a a a a

3.4 Procedimiento
1. Crear un Nuevo Proyecto. Autor: Luis Alberto Vargas Tijerino Pgina 18

2. Crear una capeta para el Proyecto llamada Lab2 3. Agregar un nuevo Archivo al Proyecto. 4. Copiar el Cdigo 3.1 Inst_ari_log
Cdigo 3.1 Inst_ari_log

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V VAR1 EQU 0X20 VAR2 EQU 0X21 VAR3 EQU 0X23 ORG main BANKSEL CLRF CLRF CLRF MOVLW ADDLW ADDWF SUBLW SUBWF INCF DECF ANDLW ANDWF IORLW IORWF XORLW XORWF RLF RRF SWAPF VAR1 VAR1 VAR2 VAR3 23 45 VAR1,W 51 VAR1,F VAR1,F VAR2,W 0X0F VAR2,F 0XF0 VAR3,F B'01010101' VAR3,F VAR1,F VAR1,F VAR1,F ;Seleccionamos el Banco al que pertenece VAR1 ;VAR1 = 0 ;VAR2 = 0 ;VAR3 = 0 ;W = 0x23 ;W = W + 0x45 ;W = VAR1 + W ;W = 51 - W ;VAR1 = VAR1-W ;VAR1 = VAR1 + 1 ;W = VAR2 - 1 ;W =W and 0x0F (Ponemos el Nibble Alto de W en bajo) ;VAR2=VAR2 and W ;W = W or 0XF0 (Ponemos el Nible Alto de W en alto) ;VAR3 = W or VAR3 ;W = W xor B'01010101' ;VAR3 = VAR3 xor W ;Desplazamos un bit a la izquierda VAR1 ;Desplazamos un bit a la derecha VAR2 ;Intercambiamos los Nibbles 0x000 ; Vector de Reset del procesador

;VAR1=VAR1+33 MOVLW .33 ADDWF VAR1,F ;VAR2=VAR1+0X55 MOVLW 0X55 ADDWF VAR1,W MOVWF VAR2 ;VAR3=VAR1+VAR2 MOVFW VAR1 ADDWF VAR2,W MOVWF VAR3 ;VAR1=VAR1 x 2 BCF STATUS,C RLF VAR1 ;VAR1=VAR1 / 2 BCF STATUS,C RRF VAR1,F ;VAR1=VAR1 x 16 MOVLW 0x0F

Autor: Luis Alberto Vargas Tijerino

Pgina 19

ANDWF SWAPF GOTO END

VAR1,F VAR1,F main ;Fin del Programa

5. Compilar el proyecto 6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887. 7. Cargar el Archivo fuente, Realizar la simulacin (CTRL+F12 para iniciar y F10 para ir paso a paso), Abrir la ventana de observacin y Agregar los Registros por Direccin VAR1, VAR2 y VAR3 con las direcciones 0x20, 0x21 y 0x23 respectivamente. 8. Realizar una tabla con los valores de los registros W, VAR1, VAR2 y VAR3 en cada una de las lneas de cdigo. 9. Qu ocurre cuando el resultado de una suma o una multiplicacin es mayor a 255? 10. Qu ocurre cuando el resultado de una resta o una divisin es menor a 0?

3.5 Trabajo Extra Clase.


1. Contestar las siguientes preguntas: a. Cul es el algoritmo (Pseudocdigo o Diagrama de Flujo) para realizar operaciones de multiplicacin y divisin con los PIC10, PIC12 y PIC16 en lenguaje ensamblador? b. Cul es el algoritmo (Pseudocdigo o Diagrama de Flujo) para realizar operaciones de suma, resta multiplicacin y divisin con variables de 16 bits? c. Cmo funciona el mdulo de multiplicacin integrado que poseen los PIC18 en adelante? d. Qu otras operaciones aritmticas pueden realizar los dsPIC? e. Cules son las ventajas de que la ALU del MCU manipule ms bits? 2. Elaborar un programa en lenguaje ensamblador que realice las siguientes operaciones: a. PORTC = PORTA + Valor de los tres ltimos Nmeros de tu carn. b. PORTD = PORTB PORTA c. Almacenar el Nibbles altos de PORTB en VAR1, es decir, VAR1 = PORTD and 0x0F

Autor: Luis Alberto Vargas Tijerino

Pgina 20

Laboratorio 4:
4.1 Objetivo

Saltos Condicionales y Subrutinas de Retardo

Aprender a elaborar subrutinas de retardo en los PIC

4.2 Introduccin
Los programas no suelen ejecutar las instrucciones de una manera lineal una tras otras. Por lo general es necesario romper esta secuencia en puntos determinados debido a una toma de decisin o por cualquier otro motivo. Otra caracterstica importante de los programas es que tienden a disearse de una forma modular o estructurada, es decir, cada programa posee un conjunto de instrucciones que realizan una tarea especfica y que se repite un gran nmero de veces. Por ejemplo, en la mayora de proyectos es necesario controlar el tiempo que tardan en ejecutarse algunas acciones. Adems, es sumamente importante que las tareas se realicen en tiempos determinados por el diseador, para ello es necesario utilizar pausas o retardos, de lo contrario la ejecucin del programa sera demasiado rpida y controlar ciertos dispositivos sera imposible. En este laboratorio aprenderemos a utilizar las subrutinas de Retardo y la manera de elaborarlas. [mic16f84, p119]

4.3 Subrutinas.
Una subrutina es un conjunto de instrucciones al que se tiene acceso desde cualquier punto del programa principal. Es decir, una subrutina es un subprograma que se ejecuta cada vez que el programa principal lo necesita. La Figura 4.1 ilustra el procedimiento de ejecucin del programa con subrutinas. Las instrucciones del programa principal son ejecutadas sucesivamente hasta que se encuentra la primera instruccin call ProcesoX, despus de lo cual, la subrutina ProcesoX se ejecuta como cualquier otra seccin del programa. La ltima instruccin de la subrutina es return que causa el regreso de la secuencia de ejecucin al programa principal.
Figura 4.1 Utilizacin de las Subrutinas

Autor: Luis Alberto Vargas Tijerino

Pgina 21

La principal ventaja de las subrutinas es que la extensin de los programas se hace mucho ms corta, tal como se aprecia en la Figura 4.1. No obstante, las subrutinas presentan la desventaja que su uso provoca una ejecucin ms lenta debido que se tienen que ejecutar dos instrucciones extras call y return.

4.4 Subrutinas Anidadas.


Cuando una subrutina llama a otra subrutina se produce la situacin conocida como anidamiento de subrutinas. Cada call sucesivo sin que intervenga un return crea un nivel de anidamiento adicional. Esto se ilustra en la Figura 4.2.
Figura 4.2 Subrutinas Anidadas

El nivel de anidamiento est limitado para cada microcontrolador y en el PIC16F887 es de 32 niveles. Es decir, no pueden haber ms de 32 subrutinas anidadas.

4.5 La Pila
La pila (stack en ingls) es una zona de memoria que se encuentra separada tanto de la memoria de programa como de la de datos dentro del microcontrolador. Su estructura es del tipo LIFO (Last In First Out) por lo que el ltimo dato que se guarda es el primero que sale.

Autor: Luis Alberto Vargas Tijerino

Pgina 22

Figura 4.3 Estructura de la pila y memoria de programa del PIC16F887.

El PIC16F887 dispone de una pila con 32 niveles o registros de una longitud de 13 bits cada uno de ellos (Figura 4.3). La manera de cargar la pila es a travs de la llamada a subrutina con la instruccin call, que almacena el contenido del contador de programa (PC) en la posicin superior de la pila. Para recuperar el contenido de la pila en el PC, hay que ejecutar la instruccin de retorno de subrutina.

4.6 Ciclo Mquina


El tiempo que tarda en ejecutarse un programa depende de la frecuencia del oscilador conectado al microcontrolador y el nmero de ciclos mquinas ejecutados. Un ciclo mquina es la unidad bsica de tiempo que utiliza el microcontrolador. Para los PIC10, PIC12, PIC16 y PIC18 el ciclo mquina equivale a 4 ciclos de reloj, por lo tanto, el tiempo que tarda en producirse un ciclo mquina es igual a cuatro veces el perodo del oscilador. (Figura 4.4)

Autor: Luis Alberto Vargas Tijerino

Pgina 23

Figura 4.4 Ciclo mquina

Las instrucciones en el microcontrolador necesitan 1 ciclo mquina para ejecutarse, excepto las de salto (goto, call, btfss, btfsc, return, etc) que necesitan dos ciclos mquina. El tiempo que tarda el microcontrolador en ejecutar una tare viene fijado por la frmula siguiente:

Siendo: f la frecuencia del oscilador. cm, el nmero de ciclos mquina que tarda en ejecutar la tarea.

4.7 Instrucciones a utilizar.


En la tabla siguiente se muestran estas instrucciones. Nemnico BTFSC f,b BTFSS f,b DECFSZ f,d Significado Bit Test f, Skip if Clear Bit Test f, Skip if Set Decrement f, Skip if Zero Descripcin Ignora y salta la instruccin que sigue a esta si el bit b es cero. Ignora y salta la instruccin que sigue a esta si el bit b es uno. Decrementa en uno el contenido del registro f, ignora y salta la instruccin siguiente si el resultado es Cero. Si d=w el resultado se almacena en w. Si d=f el resultado se almacena en f. Increment f, Skip if Incrementa en uno el contenido del registro f, ignora y salta la Zero instruccin siguiente si el resultado es Cero. Si d=w el resultado se almacena en w. Si d=f el resultado se almacena en f. No Operation No realiza operacin alguna. Se utiliza para consumir un ciclo mquina sin hacer nada. Call address k Provoca que la ejecucin del programa se transfiera a la subrutina. Return Provoca el retorno a la direccin que sigue al CALL que realiz la ltima llamada. Constant Block Define un bloque de variables que se almacenaran en la memoria RAM comenzando desde la direccin k End Constant Block Indica el fin del bloque de variables Pgina 24

INCFSZ f,d

NOP CALL k RETURN CBLOCK k ENDC

Autor: Luis Alberto Vargas Tijerino

4.8 Procedimiento
1. 2. 3. 4. Crear un Nuevo Proyecto. Crear una capeta para el Proyecto llamada Lab2 Agregar un nuevo Archivo al Proyecto. Copiar el Cdigo 4.1 Led_blink

Cdigo 4.1 Led_blink

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V CBLOCK 0X20 VAR1 VAR2 VAR3 ENDC ORG main BANKSEL TRISD CLRF TRISD BANKSEL PORTD bucle MOVLW CALL movlw CALL BTFSS GOTO Led_of BCF GOTO Led_on BSF GOTO .5 Retardo_us .250 Retardo_ms PORTD,0 Led_on PORTD,0 bucle PORTD,0 bucle ;Seleccionamos el Banco al ;Ponemos a 0 todos los bit ;salida todos los pines de ;Seleccionamos el Banco al que pertenece TRISB (Banco 1) de TRISD para configurar como PORTD que pertenece PORTB (Banco 0) 0x000 ;Inicio del bloque de variables en la direccion 0x20 ;VAR1 se declara en la direccion 0x20 ;VAR2 se declara en la direccion 0x21 ;VAR3 se declara en la direccion 0x22 ; Vector de Reset del procesador

;Mover al registro W el valor 5 decimal ;Llamar a la rutina Retardo_us (tardara 4 + 4x5=24 ciclos) ;Mover al registro W el valor 250 decimal ;Llamar a la rutina Retardo_ms (tardara 4 + 2003 x 250 ciclos) ;Probar si el bit 0 de PORTD es 1 ;si es 0 saltar a Led_ond ;Poner a 0 el bit 0 de PORTD (Apagar LED) ;Saltar a bucle ;Poner a 1 el bit 0 del PORTD (Encender Led) ;Saltar a bucle

;*************************************************************************************** ;Libreria de Retardos ;*************************************************************************************** CBLOCK R_Cont1 ;R_cont1 se declara en la direccion 0x23 R_Cont2 ;R_cont2 se declara en la direccion 0x24 ENDC ;El proximo Bloque "Retardo_ms" tarda: ;5+2003M ciclos maquinas Retardo_ms ;2 movwf R_Cont2 ;1 movlw .249 ;1 Ciclo_ms call Retardo_us ;1000M

Autor: Luis Alberto Vargas Tijerino

Pgina 25

call decfsz goto return

Retardo_us ;1000M R_Cont2,F ;M+1 Ciclo_ms ;2M-2 ;2

;El proximo Bloque "Retardo_us" tarda: ;4+4k ciclos maquinas Retardo_us ;2 movwf R_Cont1 ;1 Ciclo_us nop ;k decfsz R_Cont1,F ;k+1 goto Ciclo_us ;2k-2 return ;2 END

5. Compilar el proyecto 6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887 y LOGICPROBE. PIC16F887

LOGICPROBE

7. Cargar el Archivo fuente, cambiar frecuencia de reloj a 8MHz, Realizar la simulacin (CTRL+F12 para iniciar y F10 para ir paso a paso), Abrir la ventana de observacin y Agregar los Registros por Direccin R_cont1, R_cont2 y R_cont3 con las direcciones 0x23 y 0x24 respectivamente. 8. Qu ocurre en la lnea 22 s se presiona F10 o F11? 9. Cunto tiempo tarda y cuantos ciclos se utilizan para realizar la lnea 22? Explique por qu. 10. Cunto tiempo tarda y cuantos ciclos se utilizan para realizar la lnea 24? Explique por qu. 11. Cambie la frecuencia de reloj a 8MHz y conteste de nuevo las preguntas 9 y 10. 12. Explique qu ocurre en la lnea 25.

Autor: Luis Alberto Vargas Tijerino

Pgina 26

4.9 Trabajo Extra Clase.


1. Conteste las siguientes preguntas: a. A qu equivale una subrutina en los lenguajes de alto nivel (C y BASIC)? b. Cuantos ciclos se necesitan para un retardo de 3 segundos si el PIC tiene un cristal de 20MHz? 2. Elaborar un programa en lenguaje ensamblador que realice lo siguiente: a. Si el dato ingresado a PORTB es 0 que RD0 sea 1. b. Si el dato ingresado a PORTB es igual a 123 que RD1 sea 1. c. Si el dato ingresado a PORTB es mayor a 123 que RD2 sea 1. d. Si el dato ingresado a PORTB es menor a 123 que RD3 sea 1. e. Si el dato ingresado a PORTB es igual al dato ingresado a PORTC que RD4 sea 1. f. Si el dato ingresado a PORTB es mayor al dato ingresado a PORTC que RD5 sea 1. g. Si el dato ingresado a PORTB es menor al dato ingresado a PORTC que RD6 sea 1. h. Si RA0 es 1 entonces que se realice un led_blink en RA1 cada 2 segundos.

Autor: Luis Alberto Vargas Tijerino

Pgina 27

Laboratorio 5:
5.1 Objetivo

Tablas

Comprender como almacenan y manipulan los valores constantes los PIC10, PIC12 y PIC16 mediante la implementacin de Tablas.

5.2 Introduccin
En la mayora de proyectos es necesario utilizar una gran cantidad de datos almacenados en tablas o arreglos de constantes. Este laboratorio trata de su manejo para los PIC de la gama media y baja aplicndolas en el manejo de un display de 7 segmentos.

5.3 Salto Indexado


El salto indexado es una tcnica que permite resolver problemas que puedan ser representados mediante una tabla de verdad. En los PIC10, 12 y 16 se basa en la utilizacin de la instruccin ADDWF PCL,F, de este modo, la direccin del salto se consigue sumando al contador de programa (PCL) un valor de desplazamiento almacenado en el registro de trabajo W.

5.4 Tablas de datos en la memoria de Programa


Una tabla de datos en la memoria ROM de programa es una lista de constantes que el programa puede recoger mediante la instruccin retlw. Una de las mayores aplicaciones del manejo de la tabla de datos, es la resolucin de tablas de verdad grabadas en ROM. El Cdigo 5.1 muestra la subrutina que contiene la tabla de verdad formada por una serie de datos ordenados secuencialmente para convertir un cdigo binario a su equivalente en display de 7 segmentos.
Cdigo 5.1 Subrutina Binario_7Segmentos

; Subrutina "Binario_7Segmentos" -------------------------------------------------------; Binario_a_7Segmentos ; Tabla para display de 7 segmentos. addwf PCL,F Tabla retlw 3Fh ; El cdigo 7 segmentos para el "0". retlw 06h ; El cdigo 7 segmentos para el "1". retlw 5Bh ; El cdigo 7 segmentos para el "2". retlw 4Fh ; El cdigo 7 segmentos para el "3". retlw 66h ; El cdigo 7 segmentos para el "4". retlw 6Dh ; El cdigo 7 segmentos para el "5". retlw 7Dh ; El cdigo 7 segmentos para el "6". retlw 07h ; El cdigo 7 segmentos para el "7". retlw 7Fh ; El cdigo 7 segmentos para el "8". retlw 67h ; El cdigo 7 segmentos para el "9". retlw 77h ; El cdigo 7 segmentos para la "A". retlw 7Ch ; El cdigo 7 segmentos para la "B". retlw 39h ; El cdigo 7 segmentos para la "C". retlw 5Eh ; El cdigo 7 segmentos para la "D". retlw 79h ; El cdigo 7 segmentos para la "E". retlw 71h ; El cdigo 7 segmentos para la "F".

Autor: Luis Alberto Vargas Tijerino

Pgina 28

Los valores de las constantes estn grabados y no se pueden alterar. La nica manera de alterar una tabla ROM es volver a grabar el PIC. Las tablas en ROM difieren de las tablas en la memoria RAM, ya que sus datos pueden ser alterados.

5.5 Instrucciones a utilizar.


Nemnico RETLW k DT k,k,k. Significado Descripcin Return with Literal in Produce el retorno de una subrutina pero con un valor k en el W registro W. Define Table Sustituye el empleo repetitivo de muchas instrucciones RETLW para facilitar su uso en el ensamblador MPASM. Genera durante la fase de ensamblado una instruccin RETLW por cada literal k.

5.6 Procedimiento
1. 2. 3. 4. Crear un Nuevo Proyecto. Crear una capeta para el Proyecto llamada Lab2 Agregar un nuevo Archivo al Proyecto. Copiar el Cdigo 5.2 Disp_7seg

Cdigo 5.2 Disp_7seg

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ORG main BANKSEL CLRF CLRF BANKSEL MOVLW MOVWF CLRF ANSEL ANSEL ANSELH TRISB b'11111111' TRISB TRISD ;Seleccionamos el Banco al que pertenece ANSEL (Banco 3) ;Ponemos a 0 todos los bit del registro ANSEL y ANSELH ;para configurar todos los pines como digitales ;Seleccionamos el Banco al que pertenece TRISB (Banco 1) ;Ponemos a 1 todos los bit de TRISB para configurar como ;entrada todos los pines de PORTB ;Ponemos a 0 todos los bit de TRISD para configurar como ;salida todos los pines de PORTD ;Seleccionamos el Banco al que pertenece PORTB (Banco 0) 0x000 ; Vector de Reset del procesador

BANKSEL PORTB Principal MOVF PORTB,W ;Lee la entrada ANDLW b'00001111' ;Mscara para quedarse con el valor de las ;entradas correspondientes al nibble bajo. CALL Bin_7Seg ;Convierte cdigo binario a 7 segmentos del display. MOVWF PORTD ;Resultado se visualiza por el puerto de salida. GOTO Principal

; Subrutina "Binario_7Segmentos" -------------------------------------------------------; Bin_7Seg ;Tabla para display de 7 segmentos. ADDWF PCL,F Tabla

Autor: Luis Alberto Vargas Tijerino

Pgina 29

; ;

RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW RETLW DT DT END

3Fh ;El cdigo 7 06h ;El cdigo 5Bh ;El cdigo 4Fh ;El cdigo 66h ;El cdigo 6Dh ;El cdigo 7Dh ;El cdigo 07h ;El cdigo 7Fh ;El cdigo 67h ;El cdigo 77h ;El cdigo 7Ch ;El cdigo 39h ;El cdigo 5Eh ;El cdigo 79h ;El cdigo 71h ;El cdigo 3Fh, 06h, 5Bh, 4Fh, 66h, 77h, 7Ch, 39h, 5Eh, 79h,

segmentos para el "0". 7 segmentos para el "1". 7 segmentos para el "2". 7 segmentos para el "3". 7 segmentos para el "4". 7 segmentos para el "5". 7 segmentos para el "6". 7 segmentos para el "7". 7 segmentos para el "8". 7 segmentos para el "9". 7 segmentos para la "A". 7 segmentos para la "B". 7 segmentos para la "C". 7 segmentos para la "D". 7 segmentos para la "E". 7 segmentos para la "F". 6Dh, 7Dh, 07h, 7Fh, 6Fh ;Del "0" al "9" 71h ;"A", "B", "C", "D", "E" y "F".

;Fin del programa.

5. Compilar el proyecto 6. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887, LOGICSTATE y 7SEG-COM-CATHODE. PIC16F887 PIC16F887 PIC16F887

11. Cargar el Archivo fuente, Realizar la simulacin (CTRL+F12 para iniciar y F10 para ir paso a paso), Abrir la ventana de observacin y Agregar los Registros por Nombre ANSEL, ANSELH, PORTB, PORTD, TRISB y TRISD. 7. Conteste las siguientes preguntas: a. Qu ocurre en la lnea 22 s se presiona F10 o F11? b. Cul es el valor de PORTD s el valor de PORTB es b00010110? c. Comente las lneas 31 a la 46 y descomente las lneas 47 y 48 y conteste las preguntas 8 y 9 de nuevo.

5.7 Trabajo Extra Clase.


1. Contesta las siguientes preguntas: Autor: Luis Alberto Vargas Tijerino Pgina 30

a. Qu es Salto Indexado Descontrolado? b. A qu equivale una tabla en los lenguajes de alto nivel (C y Basic)? 2. Elaborar un programa en lenguaje ensamblador que realice un contador ascendente de 0 a 9 que se incrementa si se activa el PIN RB0 y que lo muestre en un display de 7 segmentos nodo comn.

Autor: Luis Alberto Vargas Tijerino

Pgina 31

Laboratorio 6:
6.1 Objetivo

Macros

Comprender el proceso que realizan los lenguajes de alto nivel mediante la implementacin de macros en el lenguaje ensamblador.

6.2 Introduccin
Como se ha observado en los laboratorios anteriores, se requiere de varias instrucciones de cdigo en lenguaje ensamblador para realizar una simple operacin aritmtica, lgica, iteraciones o bucles. La mayora de los compiladores de alto nivel utilizan instrucciones que nos facilitan el trabajo, todas estas instrucciones nacen a partir de Macros del lenguaje ensamblador. Este laboratorio muestra una forma elemental de utilizar macros para reducir la cantidad de cdigo en lenguaje ensamblador necesario en un programa.

6.3 Macros
Las macros son una potente herramienta del ensamblador que facilita la elaboracin de programas. Una macro consiste en una serie de instrucciones y directivas que se agrupan en una sola orden mayor de forma que se comporta como una nica instruccin cuando es invocada. Suele utilizarse para automatizar la utilizacin de grupos de instrucciones usadas con frecuencia. Las macros pueden aceptar argumentos lo que las hace muy flexibles. Ates de que una macro pueda ser invocada en una lnea del programa fuente como si se tratase de una instruccin, debe ser definida por el diseador de acuerdo a la siguiente sintaxis: <label> MACRO [<arg>,<arg>,...,<arg>] . . . ENDM

Donde <label> es una etiqueta que define a la macro y <arg> es cualquier nmero de argumentos opcionales que se le proporciona a la macro. Los valores asignados a estos argumentos cuando se invoca la macro sern posteriormente sustituidos por los nombres de los argumentos que se encuentran dentro de la macro. El cuerpo de la macro puede contener instrucciones o directivas. El ensamblador ejecuta el procesado de la macro hasta que encuentra alguna directiva de fin de la macro, generalmente ENDM. Una vez que la macro ha sido definida puede ser invocada en cualquier punto del programa utilizando una llamada a la macro con el siguiente formato: <macro_name> [<arg>,, <arg> Donde <macro_name> es el nombre de la macro previamente definida. Hay que proporcionarle los argumentos <arg> solicitados en la definicin de la macro. Autor: Luis Alberto Vargas Tijerino Pgina 32

La macro no ocupa cdigo mquina alguno mientras no sea invocada, cuando esto ocurre la macro se expandir en el lugar del programa en que se encuentre.

6.4 Procedimiento
8. Crear un Nuevo Proyecto. 9. Crear una capeta para el Proyecto llamada Lab2 10. Agregar un nuevo Archivo al Proyecto. 11. Copiar el Cdigo 6.1
Cdigo 6.1 Macros

list #include

p=16f887 <p16f887.inc>

; list directive to define processor ; processor specific variable definitions

__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ;-------------------------------------------------------------------------------;Macro Suma_var_lit suma una variable mas un literal y lo almacena en un registro ;-------------------------------------------------------------------------------Suma_var_lit MACRO OUT_VAR,IN_VAR,IN_LIT MOVLW IN_LIT ADDWF IN_VAR,W MOVWF OUT_VAR ENDM ;-------------------------------------------------------------------------------ORG main BANKSEL CLRF CLRF BANKSEL MOVLW MOVWF CLRF ANSEL ANSEL ANSELH TRISB b'11111111' TRISB TRISD ;Seleccionamos el Banco al que pertenece ANSEL (Banco 3) ;Ponemos a 0 todos los bit del registro ANSEL y ANSELH ;para configurar todos los pines como digitales ;Seleccionamos el Banco al que pertenece TRISB (Banco 1) ;Ponemos a 1 todos los bit de TRISB para configurar como ;entrada todos los pines de PORTB ;Ponemos a 0 todos los bit de TRISD para configurar como ;salida todos los pines de PORTD ;Seleccionamos el Banco al que pertenece PORTB (Banco 0) 0x000 ; Vector de Reset del procesador

BANKSEL PORTB bucle Suma_var_lit PORTD,PORTB,D'123' ;PORTD=PORTB+D'123' GOTO bucle END

12. Compilar el proyecto 13. Crear el circuito en Proteus. Para ello ser necesario buscar mediante la caja de bsqueda en la ventana PICK DEVICE el PIC16F887, LOGICSTATE y LOGICPROBE.

Autor: Luis Alberto Vargas Tijerino

Pgina 33

LOGICSTATE

PIC16F887

LOGICPROBE

12. Cargar el Archivo fuente, Realizar la simulacin (CTRL+F12 para iniciar y F10 para ir paso a paso), Abrir la ventana de observacin y Agregar los Registros por Nombre ANSEL, ANSELH, PORTB, PORTD, TRISB y TRISD. 13. Conteste las siguientes preguntas: a. Qu ocurre en la lnea 30 al presionar F10 o F11? b. En la ventana PIC CPU Source Code de clic derecho y seleccione Dissambly y conteste cuantas lneas de cdigo equivalen las lneas 10-13 y 30.

c. Comente la lnea 30 y descomente las lneas 31 a 33 y conteste nuevamente las preguntas a y b.

6.5 Trabajo Extra clase


1. Contestar las siguientes preguntas: a. Cundo es recomendable utilizar un MACRO en vez de una Subrutina? b. Es posible que un Macro sirva para llamar una Subrutina? 2. Elabore un programa en lenguaje ensamblador utilizando Macros que realice lo siguiente: a. PORTD = PORTB + PORTA b. PORTC = PORTB PORTA Autor: Luis Alberto Vargas Tijerino Pgina 34