Laboratorio de Microcomputadoras. Profesor: Sandro Caballero Rivas Facultad de Ingenieria, UNAM. Ejercicio 1: Blinking leds Objetivos: • Conocer el ambiente de desarrollo del IDE, MPLABX . • Realizar un programa en lenguaje ensamblador que parpade 1 vez por segundo un conjunto de 8 leds. • Programar en la memoria de programa del PIC16F877A el programa ejecutable creado, utilizando la aplicacion PICDOWNLOADER. Desarrollo: En este ejercicio se desarrollara un programa en lenguaje ensamblador que hara parpadear 8 leds cada segundo. Abrir el IDE, MPLABX para la edicion y ensamblado. • Ejecutar : Menu inicio -> todos los programas -> Microchip -> MPLABX IDE -> MPLABX IDE V1.30 Crear un proyecto nuevo. • Cerrar projectos anteriores que tenga aniertos el MPLABX. Click en la pestaña 'Projects'. Click File -> Close all projects • Click File -> New Project.. • Seleccionar tipo de proyecto: Microchip Embedded y Standalone project, click Next. • Seleccionar device(microcontrolador): Family: MidRange 8-bit MCUs(PIC12/16/MCP) Device: PIC16F877A click Next. • Seleccionar tool: Hardware tools -> Simulator . Click Next • Seleccionar compiler: Mpasm->mpasm(v.5.46)[C:\Program Files\Microchip\MPLABX\mpasmx] . Click Next • Selecionar nombre de projecto y carpeta de almacenamiento. No debe haber espacios en blanco en nombres de proyecto,archivos o carpeta porque ocurren bugs en la compilacion: Project Name: Blinkingleds Project Location: C:\users\labmicros\ejemplos Project folder: C:\users\labmicros\ejemplos\Blinkingleds.X Click Finish. Dentro de la pestaña 'Projects' se crea el proyecto 'BlinkingLeds' y una jerarquia de subfolders virtuales: • Header Files. Para agrupar todos los archivos cabecera del proyecto, extension Laboratorio de Microcomputadoras 1/6 blinking_leds .inc • Important Files. Contiene el 'Makefile' del projecto. Este indica los comandos a ejecutar para poder ensamblar, limpiar, debug ,etc al proyecto. • Linker Files • Source Files. Agrupa los archivos de codigo fuente que integran al proyecto, extension .asm • Libraries • Loadables Dentro de la pestaña Files se despliegan los folders 'reales' y su contenido . Estos folders y archivos se pueden ver tambien desde el explorador de windows. Crear un nuevo archivo y asignarlo al proyecto. • En la pestaña Projects seleccionar Source Files -> click der. -> New -> Empty File... • Dar nombre al archivo(sin espacios en blanco): Name: blinkled.asm . Click Finish El nombre del archivo puede ser diferente del nombre del projecto. Editar el programa blinkled.asm. • Abrir archivo. Doble click a archivo blinkled.asm • Introducir el siguiente codigo: LIST p=16F877A #include <p16f877a.inc> ;Palabra de configuracion. Indica que caracteristicas especiales del microcontrolador ;se activaran: tipo de Reloj, Watctdog timer,etc. ;Se obtiene dando click al menu 'Window' -> PIC memory views -> Configuration bits ;Se elige FOSC = HS(para usar un crystal de 20MHz) ;y todas las demas opciones se dejan en OFF. ;A continuacion dar click en 'Generate Source Code to output' ;Copiar las linea que estan descomentadas y que empiezan con __CONFIG y pegarlas en este ;punto. Para este PIC quitar la parte '_CONFIG1,' __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_ON & _CPD_OFF & _WRT_OFF & _CP_OFF ;variables utilizadas por la subrutina RETARDO valor1 equ H'22' CBLOCK 0x23 valor2 valor3 ENDC ;Constantes utilizadas por la subrutina retardo cte1 equ D'164' ;define el valor que tomaran la constante cte1(164 decimal) cte2 equ D'100' ;valor decimal 100 cte3 equ D'100' ;con estos valores se obtiene aprox 1 sec de retardo. org 0 Laboratorio de Microcomputadoras 2/6 blinking_leds goto INICIO org 5 INICIO: bsf STATUS,RP0 bcf STATUS,RP1 ;sel. BANK1 para accesar a registro TRISB MOVLW b'00000000' MOVWF TRISB ;configurar todos los pines del puerto B como output digital bcf STATUS,RP0 bcf STATUS,RP1 CLRF PORTB ;sel. BANK1 para accesar a registro PORTB BSF PORTB,0 CALL RETARDO BCF PORTB,0 CALL RETARDO ;enviar un '1' al pin 0 del puerto B ;retardo de 1 seg. ;enviar un '1' al pin 0 del puerto B ;retardo de 1 seg. ;enviar '0' a todos los pines del puerto B MAIN: goto MAIN END_MAIN: SLEEP ;zona donde se definen las subrutinas utilizadas ;subrutina que se tarda un segundo y regresa a la instruccion posterior a su llamada. RETARDO: movlw cte1 movwf valor1 TRES: movlw cte2 movwf valor2 DOS: movlw cte3 movwf valor3 UNO: decfsz valor3,f goto UNO decfsz valor2,f goto DOS decfsz valor1,f goto TRES return END ;le indica la ensamblador que aqui termina el codigo del programa Laboratorio de Microcomputadoras 3/6 blinking_leds • Salvar archivo. Click Ctrl-S o click icono 'Save all files' Ensamblar archivo blinkled.asm para generar programa ejecutable(.hex). • Seleccionar el nombre del proyecto 'Blinkingleds' de la pestaña projects. Click der. -> Properties • Seleccionar mpasm(Global Options) • Habilitar la opcion 'Build in absolute mode' con la palomita. • Click apply y OK. • Click en el icono con la figura del martillo,Build Project(blinkingleds) Si no hubo errores de sintaxis,etc. Se desplegara el mensaje 'BUILD SUCCESFUL' Si hubo errores se indicaran por la palabra 'ERROR'. Doble clik al mensaje de error para que el cursor se mueva a la linea causante. • El archivo ejecutable(.hex) se guarda dentro de la carpeta del proyecto 'Blinkingleds' en la ruta: Blinkingleds/dist/default/production/Blinkingleds.X.production.hex Se puede obervar en la pestaña Files. Programar el archivo ejecutable .hex en el microcontrolador. • Abrir la aplicacion PICDOWNLOADER • Click en Search(F2) y buscar el archivo 'Blinkingleds.X.production.hex' • Seleccionar opciones de comunicacion con tarjeta del lab: Port: COM1 38400 habilitar EEPROM • Conectar el cable serial al puerto serie 1 de la PC(usualmente el COM1 ) y al puerto serie de la tarjeta. • Conectar el conector del cable plano al puerto B del microcontrolador y al modulo leds. • Poner en la fuente de poder 9V y energizar la tarjeta. Se encendera el led rojo cercano a la alimentacion de la tarjeta para indicar que esta energizada. • Click en WRITE(F4). A continuacion la aplicacion espera a que el ususraio presione el boton de reset del microcontrolador. Este se encuentra localizado a un lado del micro. • Presionar el boton de reset de la tarjeta. Aparecera una barra azul solida y el mensaje 'ALL OK!' para indicar que el programa fue programado en el microcontrolador. Inmediatamente el microcontrolador ejecutara indefinidamente el programa cargado. El programa se ejecuta desde el inicio cada vez que se le da energia a la tarjeta, es decir, esta grabado de forma permanente en su memoria de programa. Modificar el programa para que realice las siguientes acciones(leer las notas primero): 1. Parpadeo de el segundo led(referencia de derecha a izquierda) una vez por segundo. 2. Parpadeo de los leds 1,3, 7 cada dos segundos. 3. Leds 2 y 6 ON 3 segundos, OFF 1 segundo. Comprimir el proyecto para posterior uso en otra PC. • Click en pestaña 'Projects' -> click en nombre de proyecto 'Blinkingleds' -> click der. -> Package Se crea el archivo con el nombre 'Blinkingleds.zip' dentro de la carpeta del proyecto 'Blinkingleds'. En otra PC se descomprime con el nombre 'Blinkingleds'(por default descomprime una carpeta Laboratorio de Microcomputadoras 4/6 blinking_leds con el nombre 'src'). Abrirlo con MPLAB dando click en menu 'File' -> Open project -> sel. Carpeta 'Blinkingleds' -> click Open project. Notas: • El led se enciende cuando se le aplica un voltaje de 5V y se apaga cuando se le conectan 0V. • El microcontrolador puede enviar un bit(0 o 1) a cada uno de sus pines que esten configurados como output digital. • El valor del bit enviado se mantiene en el pin permanentemente. Solo se puede cambiar su valor de forma explicita, es decir, enviando un nuevo valor. • El valor del bit se representa en el mundo exterior por dos niveles de voltaje: 1 -> 5V(Vdd), 0 -> 0V(gnd) • Para enviar un bit al mundo exterior se debe configurar al pin como output digital y despues enviar el valor del bit. • La configuracion como output digital de todos los pines del puerto B del micro se realiza solo una vez con las instrucciones: bsf STATUS,RP0 bcf STATUS,RP1 MOVLW MOVWF b'00000000' TRISB • • El puerto B tiene 8 pines. Cada pin se identifica con un numero 'X' del 0 al 7. Para poder utilizar el puerto B se debe ejecutar previamente las instrucciones: bcf STATUS,RP0 bcf STATUS,RP1 • El envio de un 1 al pin 'X' del puerto B se realiza con la instruccion: BSF PORTB,X El envio de un 0 al pin 'X' del puerto B se realiza con la instruccion: BCF PORTB,X • • Para obtener un retardo de 1 segundo se utilizara la funcion 'RETARDO' . Para ejecutarla se debe utilizar la instruccion: CALL RETARDO • La estructura general de un programa en lenguaje ensamblador para el PIC16F877A es: LIST p=16F877A #include <p16f877a.inc> __CONFIG _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF ;poner aqui las variables y constantes que utilizara el programa principal y sus subrutinas org 0 Laboratorio de Microcomputadoras 5/6 blinking_leds goto INICIO org 5 INICIO: ;poner aqui el codigo que inicializa el funcionamiento del microcontrolador MAIN: ;poner aqui el codigo del programa principal goto MAIN END_MAIN: SLEEP ;poner aqui codigo de las subrutinas END Laboratorio de Microcomputadoras 6/6 blinking_leds