2 EL PRIMER PROGRAMA

2. El Primer Programa
2 EL PRIMER PROGRAMA
En este capítulo se explicará como realizar un proyecto en MPLAB usando lenguaje
C32 para el PIC32MX534F064H existente en la MINI-32.
Primeramente necesita descargar el software MPLAB y el compilador C32 de la
página de Microchip. Ambos se encuentran de manera gratuita.
Instale el MPLAB y luego instale el C32 en las rutas predeterminadas.
Creación del Proyecto
1. Abra el MPLAB.
2. Haga clic Project->Project Wizard para abrir el asistente de creación
de proyecto (Figura 2-1). De clic en Siguiente.
Figura 2-1. Asistente de creación de Proyecto
3. En el Step One seleccione el PIC32MX534F064H de la lista. De clic en
Siguiente.
4. En Step Two seleccione Microchip PIC32 C-Compiler Toolsuite
de la lista Active Toolsuite. De clic en Siguiente.
Ing. Juan Ramon Terven Salinas
16
2. El Primer Programa
5. En Step Three debe crear un archivo de proyecto. Se recomienda guardar cada
proyecto en un directorio diferente, ya que cada proyecto está formado por
varios archivos. Este archivo de proyecto es un archivo con extensión .mcp el
cual englobará todos los archivos que componen el proyecto.
Haga clic en el botón Browse y navegue hasta el directorio donde se desea
guardar el archivo de proyecto. Una vez en el directorio proporcione un nombre
al archivo de proyecto y de clic en Guardar. En la Figura 2-2 se creó un
archivo de proyecto llamado PrimerPrograma en la ruta mostrada.
Figura 2-2. Creación de archivo de proyecto
6. En Step Four se agregan archivos existentes a nuestro proyecto. En este primer
proyecto no agregaremos ningún archivo existente. Haga clic en Siguiente.
7. Listo! El proyecto ha sido creado, se muestra una ventana de Summary donde
se muestran las características de nuestro proyecto. Haga clic en Finalizar.
Una vez terminado el asistente se muestra la ventana principal del MPLAB con el
proyecto vacío (Figura 2-3). La ventana que se muestra a la izquierda es la ventana del
proyecto. En esta se muestran todos los archivos que componen nuestro proyecto.
Ing. Juan Ramon Terven Salinas
17
2. El Primer Programa
Todos los archivos fuente (con extensión .c) que componen nuestro proyecto deben
agregarse a la carpetita llamada Source Files. Los archivos de cabecera de librerías
ajenas a las contenidas en el lenguaje C32 deben ser agregados en la carpetita Header
Files.
Figura 2-3. Proyecto Vacío
Creación del archivo fuente
El siguiente paso es crear el archivo fuente en el cual escribiremos el código de nuestro
primer programa.
1. Haga clic en File->New. Aparecerá un documento en blanco.
Escriba el siguiente código. Si usted ha programado PICs antes observará que el
código anterior es muy similar al de un PIC de 16 bits en lenguaje C30 e incluso a
un PIC de 8 bits en C18.
Programa 2-1. Primer Programa
#include <p32xxxx.h>
//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD
// Prototipo de función
Ing. Juan Ramon Terven Salinas
18
2. El Primer Programa
void retardoms(short x);
int main(void)
{
AD1PCFG = 0xFFFF;
_TRISD6=0;
_TRISG6=0;
while(1)
{
_LATD6 = 0;
_LATG6 = 0;
retardoms(100);
_LATD6 = 1;
_LATG6 = 1;
retardoms(100);
}
return 0;
// configura AN pins como digitales
// pin RD6 como salida
// pin RG6 como salida
//
//
//
//
//
//
Apaga LED amarillo de MINI-32
Apaga LED rojo de MINI-32
retardo de aproximadamente 100ms
Prende LED amarillo de MINI-32
Prende LED rojo de MINI-32
retardo de aproximadamente 100ms
}
//Función para generar un retardo
void retardoms(short x)
{
int i, j;
for(i=0; i<9000; i++)
for(j=x; j>0; j--);
}
2. Guarde el documento (File->Save) con el nombre codigo.c Debe
especificar la extensión, ya que un proyecto puede tener muchos tipos de
archivos.
Figura 2-4. Código fuente listo
3. Ahora agregue el archivo fuente al proyecto en la carpetita de Source Files
y seleccione Release. Vea la Figura 2-4.
Ing. Juan Ramon Terven Salinas
19
2. El Primer Programa
4. Una vez hecho esto compile el proyecto haciendo clic en el botón Build All
mostrado en la Figura 2-4.
5. Al compilar el proyecto debe mostrar BUILD SUCCEEDED. Esto indica que
compiló sin errores y se generó el archivo .hex que será grabado en el PIC32.
Grabación del PIC32 usando el Bootloader
El siguiente paso es grabar el archivo hex en el PIC32 usando el software
mikroBootloader. Este programa lo puede descargar de la siguiente página:
http://www.mikroe.com/eng/products/view/711/mini-32-board/
El mikroBootloader es un programa desarrollado por MikroElectronika
utilizado para comunicarse con el bootloader del PIC32 que contiene la tarjeta MINI-32
y grabar el código hexadecimal generado al compilar con MPLAB.
Esta comunicación y grabación se realiza por medio de un cable USB con conector
Mini-B de 5 pines en un extremo y conector tipo A en el otro extremo como el mostrado
en la Figura 2-5.
Figura 2-5. Cable USB requerido
Ing. Juan Ramon Terven Salinas
20
2. El Primer Programa
El procedimiento para grabar usando mikroBootloader es el siguiente:
1. Abra el mikroBootloader (vea la Figura 2-6).
2. Conecte el cable USB al PIC32 y a la computadora. Al hacer esto, el software
del mikroBootloader reconocerá la MINI-32.
3. Siempre que se alimenta la MINI-32 o se resetea con el push-button entra a
modo bootloader y dura 5 segundos esperando a que el usuario pulse el botón
Connect del mikroBootloader. Si no se pulsa el botón Connect el
PIC32 iniciará el programa que tiene grabado.
Figura 2-6. mikroBootloader
4. Una vez que pulsa el botón Connect, debe indicar Connected en la
History Window del mikroBootloader, ahora pulse el botón Browse
for Hex y busque el archivo .hex generado cuando se compilo el proyecto.
Por default, este archivo se encuentra en el mismo directorio del proyecto.
5. Pulse el botón Begin uploading. Al hacer esto, se grabará el programa en
el PIC32, luego se reseteará el PIC32 y 5 segundos después iniciará la ejecución
del programa grabado. ¡Listo! ¡Ya grabó su primer programa en un PIC32!
Ing. Juan Ramon Terven Salinas
21
2. El Primer Programa
Creación de librerías
En el ejemplo anterior se creó una función de retardo llamada retardoms, la cual
nos genera un retardo haciendo que el microcontrolador pierda tiempo. Esta función de
retardos puede ser útil en muchos programas y para esto, tendríamos que copiar el
código de la función en cada programa que la utilice.
Para no tener que duplicar el código en cada programa que hagamos, la mejor
solución es crear una librería que contenga la función retardoms y simplemente
agregar la librería en cada programa que haga uso de esta función, de esta forma
fomentamos la “reutilización de código”.
Entonces crearemos una librería llamada retardos.h. Cada librería está formada
por un archivo con extensión .h y uno o más archivos con extensión .c.
En el archivo .h se escriben los prototipos de las funciones, variables globales
usadas por la función y definiciones de constantes.
En el archivo .c se escribe el cuerpo de las funciones cuyos prototipos se
encuentran en el archivo .h.
Los siguientes programas muestran el contenido de los archivos retardos.h y
retardos.c respectivamente.
Programa 2-2. Archivo retardos.h
#ifndef _RETARDOS_H
#define _RETARDOS_H
void retardoms(short);
#endif
Programa 2-3. Archivo retardos.c
#include "retardos.h"
void retardoms(short x)
{
int i, j;
for(i=0; i<9000; i++)
for(j=x; j>0; j--);
}
Ing. Juan Ramon Terven Salinas
22
2. El Primer Programa
Estos 2 archivos los guardaremos en un directorio llamado retardos el cual
estará dentro de un directorio llamado librerias como se muestra en la Figura 2-7.
El Primer programa se encuentra dentro del directorio Cap2 Primer Programa
que se muestra en la figura.
Figura 2-7. Estructura de directorios
Ahora modificaremos el primer programa para incluir la librería retardos y quitar la
función de retardo del archivo principal. A continuación se muestra el primer programa
modificado con la librería retardos.h mostrada con azul.
Programa 2-4. Primer Programa con librería de retardos
#include <p32xxxx.h>
#include "../librerias/retardos/retardos.h"
//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD
int main(void)
{
AD1PCFG = 0xFFFF;
_TRISD6=0;
_TRISG6=0;
while(1)
{
_LATD6 = 0;
_LATG6 = 0;
retardoms(100);
_LATD6 = 1;
_LATG6 = 1;
retardoms(100);
}
return 0;
// configura AN pins como digitales
// pin RD6 como salida
// pin RG6 como salida
//
//
//
//
//
//
Apaga LED amarillo de MINI-32
Apaga LED rojo de MINI-32
retardo de aproximadamente 100ms
Prende LED amarillo de MINI-32
Prende LED rojo de MINI-32
retardo de aproximadamente 100ms
}
Ing. Juan Ramon Terven Salinas
23
2. El Primer Programa
Observe en la línea que agrega la librería:
#include "../librerias/retardos/retardos.h"
El uso de “../”, se refiere a que se regrese un directorio arriba de la posición actual
(directorio Cap2 Primer Programa) . Es decir, esta forma de especificar la
dirección de la librería es relativa a la ubicación del archivo fuente del programa.
Para que el código compile sin errores, se deben agregar al proyecto los archivos
retardos.c y retardos.h, de tal forma que la ventana de proyecto se vea como
la Figura 2-8.
Figura 2-8. Proyecto con librería incluida
Ing. Juan Ramon Terven Salinas
24
2. El Primer Programa
Bits Configuración
Los bits de configuración proveen la configuración inicial del dispositivo. Estos bits
están almacenados en memoria Flash en los llamados “Registros Fusible”.
Los bits de configuración pueden ser configurados en el código como en el
Programa 2-1. A continuación se repite el código de los bits de configuración:
//Bits de configuracion
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPLLMUL = MUL_20
#pragma config FPLLIDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FPBDIV = DIV_1, FWDTEN = OFF, UPLLEN = ON
#pragma config UPLLIDIV = DIV_2, FVBUSONIO = ON, FUSBIDIO = ON
#pragma config FSOSCEN = OFF, CP = OFF, FCKSM = CSECMD
También pueden ser configurados en el entorno MPLAB en Configure>Configuration Bits…
Se recomienda especificar los bits de configuración en el código por rapidez, ya que
si se configuran en la opción de Configuration Bits, esto se debe hacer con cada
proyecto nuevo; pero si se usa código solamente copia y pega el código de los Bits de
Configuración.
Para saber que bits de configuración tiene nuestro PIC y que valores podemos
asignarles vamos a Help->Topics…->PIC32MX Config Settings (Vea la
Figura 2-9). Aquí aparece la ayuda con la lista de todos los dispositivos que componen
la familia PIC32.
Figura 2-9. Ayuda de Config Settings
El porque de estos bits de configuración se explicará a lo largo del curso cuando se
explique el tema correspondiente.
Ing. Juan Ramon Terven Salinas
25