Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.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
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:
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
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
Objetivo .................................................................................................................................................. 32 Introduccin ........................................................................................................................................... 32 Macros .................................................................................................................................................... 32 Procedimiento ........................................................................................................................................ 33 Trabajo Extra clase ................................................................................................................................. 34
Pgina 2
Laboratorio 1:
1.1 Objetivo.
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.
3. Dar clic en el Botn Siguiente del cuadro de Bienvenida. 4. Seleccionar en el cuadro desplegable el dispositivo PIC16F887 y luego presionar siguiente.
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.
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.
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
list #include
p=16f887 <p16f887.inc>
__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
Pgina 6
END
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
Caja de Busqueda
Lista de Resultados
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.
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
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 Variables
Pgina 9
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)
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)
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.
Pgina 12
Laboratorio 2:
2.1 Objetivo.
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.
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
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
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
Tipo Decimal
Hexadecimal
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
list #include
p=16f887 <p16f887.inc>
__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
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?
Pgina 16
Laboratorio 3:
3.1 Objetivo
Programacin Elemental.
3.2 Introduccin
En este laboratorio realizaremos los primeros programas elementales utilizando las instrucciones aritmticas y lgicas.
(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
Z Z
Pgina 17
OR k with w OR 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.
Z Z
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>
__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
Pgina 19
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?
Pgina 20
Laboratorio 4:
4.1 Objetivo
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
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.
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.
Pgina 22
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.
Pgina 23
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.
INCFSZ f,d
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
list #include
p=16f887 <p16f887.inc>
__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
Pgina 25
;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.
Pgina 26
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.
; 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".
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.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
list #include
p=16f887 <p16f887.inc>
__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
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".
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.
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.
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>
__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
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.
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.