Blinking leds

Anuncio
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
Descargar