Está en la página 1de 20

Hola Mundo, MPLAB y C18

Diego Chocobar
d.r.chocobar@gmail.com
26/11/2010

Hola mundo y simulacin en MPLAB con C18.

Este documento est dirigido para aquellos que deseen empezar con el MPLAB y el compilador C18, ambos totalmente gratuitos y por mucho, de las herramientas ms completas para trabajar con todas las familias de microcontroladores PIC, ya que este es creado y actualizado constantemente por Microchip. El compilador C18 utiliza el ANSI C (ANSI 89), por lo que para aquellos con conocimientos incluso de los ms bsicos sobre el lenguaje C, programar en MPLAB utilizando este compilador ser un proceso de lo ms fcil y ameno. Esto no pretende ser una gua de uso de estas herramientas, si no que busca ser un punto de partida para aquellos entusiastas o profesionales inmiscuidos en el mundo de la electrnica, debido a la falta de explicaciones de principios bsicos, es indispensable contar con conocimientos previos sobre microcontroladores y el manejo de sus registros, ya que se emplearan explicaciones simples, pero suponiendo el conocimiento previo de ciertos temas relacionados. Se propondrn pasos muy simples para estar en cuestin de minutos creando e implementando nuestras aplicaciones. Entonces teniendo un punto de referencia se espera que con este documento se despierte el inters y se profundice ms en el tema. Las herramientas usadas para este documento son: MPLAB IDE v8.60 Compilador C18 v3.36 LITE Programador PicKit2 PIC18F2550 y XTAL de 4MHz.

Todos estos softwares se pueden descargar desde www.microchip.com, en su seccin Development Tools, y como mencion previamente, su uso es gratuito, una de las grandes ventajas de estas herramientas. Sin ms prembulos, una vez descargadas e instaladas estas herramientas, vamos a empezar con la configuracin de las mismas.

Hola mundo, MPLAB y C18.

Pgina 2

1. Configuracin del MPLAB.

Ms que configurar, lo que haremos es percatarnos de que el instalador haya configurado de manera correcta el MPLAB y el compilador, ya que generalmente, este es el que se encarga de hacer todo por nosotros. Vamos entonces a cerciorarnos de que el MPLAB este enlazado con el compilador. En el IDE (MPLAB), abrimos la herramienta de configuracin de compiladores desde la barra de herramientas Project->Set Language Tool Locations.

Y en la ventana, vamos a tener un listado de las herramientas registradas por MPLAB. En el momento de la instalacin del C18 automticamente agrega las variables de entorno para que MPLAB pueda detectar este compilador, por lo que si seguimos las instrucciones del instalador, en esta ventada veremos listado el compilador C18: Microchip C18 Toolsuite.

Hola mundo, MPLAB y C18.

Pgina 3

Vamos a comprobar que todas las rutas estn correctas, para ello expandimos esta opcin de Microchip C18 Toolsuite para poder observar las rutas a los ejecutables correspondientes a cada herramienta del compilador.

Hola mundo, MPLAB y C18.

Pgina 4

Si por cualquier razn no se encuentra cada herramienta, ser nuestra tarea asignarla manualmente. Con las opciones predeterminadas el compilador C18 se instala en MCC18, y las herramientas se encuentran dentro del directorio BIN, y se asignan de la siguiente manera:

MPASM Assembler -> mpasmwin.exe MPLAB C18 C Compiler -> mcc18.exe MPLIB Librarian -> mplib.exe MPLINK Object Linker -> mplink.exe

Una vez comprobado que todo este correcto, hacemos click en ok, y estamos listos para empezar a trabajar en nuestro primer proyecto.

Hola mundo, MPLAB y C18.

Pgina 5

2.-Creando un nuevo proyecto. Vamos a crear un nuevo proyecto en el cual podremos agregar el o los cdigos fuentes, as como tener la posibilidad de personalizar el rea de trabajo, es decir la posicin de las herramientas de las que dispone el MPLAB en caso de usar alguna. Para esto utilizaremos el asistente de proyecto. Lo encontramos en la barra de herramientas Project->Project Wizard.

Es muy rpido y sencillo crear el proyecto, despus de la bienvenida, debemos indicar el microprocesador a usar, para este tutorial seleccionaremos el PIC18F2550.

Hola mundo, MPLAB y C18.

Pgina 6

En el siguiente paso vamos a indicar el Toolsuite a usar, en nuestro caso usaremos la suite configurada al principio de este tutorial. Seleccionamos Microchip C18 Toolsuite.

Para el paso tres vamos a ingresar la ruta y nombre del proyecto.

Hola mundo, MPLAB y C18.

Pgina 7

Y por ltimo, el Project wizard nos da la opcin de agregar archivos de cdigo fuente en caso de tener alguno ya listo, como este no es el caso, simplemente dejamos todo como esta, vamos a agregar el archivo que contiene el cdigo manualmente desde el espacio de trabajo. Nos vamos a la ltima pgina que es el sumario del proyecto y verificamos que todo este correcto.

Hola mundo, MPLAB y C18.

Pgina 8

Hay muchas formas de crear archivos, en este caso vamos a hacerlo desde el espacio de trabajo recin creado. Creamos un nuevo archivo en File->New y este mismo archivo lo guardamos en donde guardamos nuestro proyecto recin creado, con el nombre main.c.

Ahora vamos a agregar este archivo al proyecto. Haciendo click con el botn secundario del mouse sobre la carpeta Source Files que nos aparece en el rbol de archivos del proyecto.

En caso de no tener abierto el archivo de carpetas, lo podemos abrir desde el men View->Project.

Hola mundo, MPLAB y C18.

Pgina 9

3.-Includes y los fusibles (Config Words). Ahora que ya tenemos configurado todo, podemos empezar a escribir nuestro cdigo. Lo primero que vamos a hacer es establecer los valores de las palabras de configuracin del microcontrolador y agregar las directivas de preprocesador. Lo primero y mas importante es agregar las libreras adecuadas para el microcontrolador que estemos trabajando ya que estas contienen todas las estructuras de los registros del micro y que nos van a permitir accesar a ellos. En nuestro caso la librera es p18f2550.h. Tambin vamos a usar la librera delays.h, que nos permite crear retardos. Estas dos libreras se incluyen con el compilador c18.
#include <p18f2550.h> #include <delays.h>

Ahora para configurar los fusible, el compilador C18 utiliza la directive: #pragma config REGISTRO = VALOR Donde REGISTRO, son los registros de la palabra de configuracin y VALOR, las posibles configuraciones que este puede tomar. A continuacin se presenta un pequeo segmento de los valores de algunos registros de la palabra de configuracin.

PLLDIV PLLDIV PLLDIV PLLDIV PLLDIV PLLDIV PLLDIV

= = = = = = =

2 3 4 5 6 10 12

Divide Divide Divide Divide Divide Divide Divide

by by by by by by by

2 (8 MHz oscillator input) 3 (12 MHz oscillator input) 4 (16 MHz oscillator input) 5 (20 MHz oscillator input) 6 (24 MHz oscillator input) 10 (40 MHz oscillator input) 12 (48 MHz oscillator input)

CPU System Clock Postscaler: CPUDIV = OSC1_PLL2 [OSC1/OSC2 CPUDIV = OSC2_PLL3 [OSC1/OSC2 CPUDIV = OSC3_PLL4 [OSC1/OSC2 CPUDIV = OSC4_PLL6 [OSC1/OSC2

Src: Src: Src: Src:

/1][96 /2][96 /3][96 /4][96

MHz MHz MHz MHz

PLL PLL PLL PLL

Src: Src: Src: Src:

/2] /3] /4] /6]

Hola mundo, MPLAB y C18.

Pgina 10

Para ms detalles sobre la configuracin y la lista completa para este micro y otros modelos, consulta el archivo de ayuda incluido con el compilador C18. Si realizaste la instalacin estndar del C18, se instala en MCC18, y dentro de docs puedes encon trar el archivo hlpPIC18ConfigSet con todas las opciones disponibles.

Para nuestro cdigo usamos la siguiente configuracin de los fusibles.

#pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma

config config config config config config config config config

#pragma config #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config #pragma config

#pragma config

//Oscilador externo XT (4mhz) con PLL //Pll sin divisor, es decir, crystal de 4Mhz. //PLL/2 es decir, el cpu trabajara a 48Mhz. // Power-up timer desactivado. //Brownout reset desactivado. //Regulador de voltaje usb desactivado //Watchdog timer desactivado //Master Clear activado. //Timer 1 condigurada para operacion con //mxima potencia. PBADEN = OFF //Entradas A/D del puerto B <4:0> //condiguradas como digitales. STVREN = OFF //Desboradamiento del Stack no causar reset. LVP = OFF //Soporte para una sola fuente de voltaje para //programacion ICSP desactivada XINST = OFF //Set de instrucciones extendidas desactivado. DEBUG = OFF //Debug desactivado por lo tanto B7 y B6 sirven //para pines de proposito general. CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF //Proteccion de bloques //desactivada CPB = OFF //Proteccion del cdigo del boot desactivada CPD = OFF //Proteccin del cdigo de memoria EEPROM //desativada. WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF //Proteccion de //escritura de los bloques // de memoria desactivada WRTD = OFF //Proteccion de escritura de la memoria EEPROM //desactivada.

FOSC = XTPLL_XT PLLDIV = 1 CPUDIV = OSC1_PLL2 PWRT = OFF BOR = OFF VREGEN = OFF WDT = OFF MCLRE = ON LPT1OSC = OFF

Una vez configurando el hardware bsico para la correcta operacin del micro, ya podemos empezar a escribir nuestro cdigo principal.

Hola mundo, MPLAB y C18.

Pgina 11

4.- El cdigo Para nuestro primer programa, el clsico hola mundo, vamos a hacer un ciclo infinito en el cul pongamos el puerto B a 11111111, un pequeo delay y poner el puerto a 00000000. Lo primero para lograr esto es configurar el puerto B. Es decir, configurarlo para funcionar como salida digital, recordemos que algunos pines del puerto b tiene la opcin de funcionar tanto como salidas/entradas digitales as como anagicas, por lo que es muy importante haber ajustado de manera correcta, para el puerto B configuramos las entradas que tienen opcin de ser analgicas para que sean digitales con la configuracin del fusible PBADEN = OFF (#pragma config PBADEN = OFF).Entonces el cdigo ser el siguiente:
void main(void) { TRISB = 0x00;

//Bits del puerto B configurado como salidas.

while(1) //Ciclo infinito { PORTB = 0x00; //Puerto B a ceros. Delay10KTCYx(255); //Delay PORTB = 0xFF; //Puerto B a unos. Delay10KTCYx(255); //Delay } }

Compilamos el cdigo.

Y si todo se sigui al pie de la letra, el compilador nos regresa un mensaje como el siguiente:

Hola mundo, MPLAB y C18.

Pgina 12

4. Simulando el cdigo. Podemos probar que nuestro cdigo funcione con el simulador MPLAB SIM, en vez de descargar el .hex al microcontrolador. Este simulador es muy bueno tambin para optimizar el cdigo o detectar errores, ya que podemos simular paso a paso el programa, observando el comportamiento de los registros internos del micro. Abrimos el simulador en la barra de herramientas Debugger->Select Tool->MPLAB SI.

Inmediatamente de activar el MPLAB SIM en la barra de herramientas debemos ver los siguientes conos, que son con lo que tendremos el control de la simulacin del programa.

El simulador posee muchas herramientas, vamos a usar la herramienta Watch Window para este ejemplo. La podemos abrir desde el men View->Watch.

Hola mundo, MPLAB y C18.

Pgina 13

Y nos aparecer la Watch Window. Esta herramienta, nos permite agregar una lista de registros de inters, en la cual en la simulacin nos mostrara los valores que esos registros vayan tomando. Tiene la propiedad de indicarnos con un cambio de color (rojo) un registro que haya sufrido algn cambio. Vamos a agregar los registros TRISB y PORTB, seleccionando cada registro en la lista y haciendo click sobre el botn ADD SFR.

Despus de agregar ambos registros, la Watch Window debe estar como la siguiente imagen.

Hola mundo, MPLAB y C18.

Pgina 14

Antes de empezar la simulacin, vamos a agregar un breakpoint en nuestro cdigo fuente. Los breakpoints nos sirven para detener la simulacin en la lnea de donde se encuentre este, esto es muy til para analizar partes especificas del cdigo, ya que podemos ejecutar el cdigo a velocidad normal hasta que se encuentre con un breakpoint, y de ah correr la simulacin paso a paso. Para agregar un breakpoint basta con hacer doble-click al lado izquierdo de la lnea donde queremos el breakppoint, pero fuera del rea de texto, y como resultado tendremos un punto rojo en nuestro cdigo, y esta lnea detendr la simulacin.

Una vez colocado el breakpoint, iniciamos la simulacin. Para esto hacer click sobre el botn Run.

Despues de iniciar la simulacin podemos observar una flecha verde encima del breakpoint:

Hola mundo, MPLAB y C18.

Pgina 15

Esto nos indica que la simulacin se encuentra detenida en ese punto del cdigo, a partir de este, vamos a simular lnea por lnea. Vamos a hacer click sobre el botn Step Into para simular una lnea de cdigo, la que corresponde a TRISB = 0x00;

Nos damos cuenta que despus de avanzar un paso en la simulacin, en la Watch Window, la lnea que contiene el registro TRISB cambio a color rojo, esto quiere decir que hubo un cambio en el valor de este registro, en este caso cambi a 0x00. Esto nos confirma que el programa esta funcionando correctamente.

Avancemos otro paso, para ejecutar la lnea que contiene el cdigo PORTB=0x00. En caso de que el registro haya iniciado con un valor diferente a 0x00, podremos observar cmo nos avisa del cambio a 0x00, marcando con rojo el nuevo valor. En caso de que el registro se haya inicializado con 0x00, no marcara con rojo puesto que no hubo cambio.

Vamos un paso delante de nuevo, para llegar la funcin de retardo. Esta funcin est contenida dentro de otro archivo el cual hemos incluido con la directiva #include <delays.h>. As pues, al llegar a esta lnea, se abrir una ventana donde esta contenido ese cdigo para mostrarnos la simulacin de este.
Hola mundo, MPLAB y C18. Pgina 16

Avancemos una cantidad considerables de pasos, y vamos a notar como entra en un bucle o loop la simulacin, que es la rutina que nos crea el retraso. Esta rutina tiene que alcanzar una cantidad muy grande de pasos para luego salir de ella. Simular esto sera un prdida de tiempo, por lo que el simulador cuenta con una funcin para salir de este tipo de loops. Para salir y regresar a nuestro cdigo usemos el botn Step Out.

Inmediatamente observamos como nos regresa a la siguiente lnea de cdigo.

Hola mundo, MPLAB y C18.

Pgina 17

Y podemos seguir avanzando paso a paso para analizar el comportamiento de este pequeo programa as como los cambios que van ocurriendo en los registros agregados a la watch window. A continuacin se presenta un cdigo un poco ms completo pero igual de simple para analizar con el simulador.
/***************************************************************************** * Hola mundo! C18. * Estructuras ***************************************************************************** * FileName: main.c * Dependencies: ninguna * Processor: PIC18F2550 * Compiler: Microchip C18 C Compiler v3.36 * * Comentario: Este programa usa las caractersticas mas bsicas del lenguaje C * compilado con C18 de Microchip. De igual manera se trabaja con * lo ms bsico del hardware del microcontrolador, como son * los fusibles y los registros TRIS y PORT. * * Licencia: * * Esta obra est bajo una licencia Attribution-NonCommercial-ShareAlike 3.0 Unported * de Creative Commons. Para ver una copia de esta licencia, * visite http://creativecommons.org/licenses/by-nc-sa/3.0/ o envie una carta a * Creative Commons, 171 Second Street, Suite 300, San Francisco, California * 94105, USA. * * * Autor Fecha Comentario. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * *Chocobar Diego 26/Nov/2010 Version 1.0 *****************************************************************************/ #include <p18f2550.h> #include <delays.h> #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma #pragma config config config config config config config config config FOSC = XTPLL_XT PLLDIV = 1 CPUDIV = OSC1_PLL2 PWRT = OFF BOR = OFF VREGEN = OFF WDT = OFF MCLRE = ON LPT1OSC = OFF //Oscilador externo XT (4mhz) con PLL //Pll sin divisor, es decir, crystal de 4Mhz. //PLL/2 es decir, el cpu trabajara a 48Mhz. // Power-up timer desactivado. //Brownout reset desactivado. //Regulador de voltaje usb desactivado //Watchdog timer desactivado //Master Clear activado. //Timer 1 condigurada para operacion con mxima //potencia. PBADEN = OFF //Entradas A/D del puerto B <4:0> condiguradas como //digitales. STVREN = OFF //Desboradamiento del Stack no causar reset. LVP = OFF //Soporte para una sola fuente de voltaje para //programacion ICSP desactivada XINST = OFF //Set de instrucciones extendidas desactivado. DEBUG = OFF //Debug desactivado por lo tanto B7 y B6 sirven para //pines de proposito general. CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF //Proteccion de bloques //desactivada

#pragma config #pragma config #pragma config #pragma config #pragma config #pragma config

Hola mundo, MPLAB y C18.

Pgina 18

#pragma config CPB = OFF #pragma config CPD = OFF

//Proteccion del cdigo del boot desactivada //Proteccin del cdigo de memoria EEPROM //desativada. #pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF //Proteccion de //escritura de los //bloques de memoria //desactivada #pragma config WRTD = OFF //Proteccion de escritura de la memoria EEPROM desactivada.

/**************************************************** P R O T O T I P O S *****************************************************/ int CfgPorts(void); /**************************************************** M A I N *****************************************************/ void main(void) { int k; CfgPorts(); //Llamada a la function de configuracin.

while(1) //Ciclo infinito { PORTB = 0x01; //Puerto B a 0x01 Delay10KTCYx(255); //Delay for(k=0;k<7;k++) //Ciclo for para multiplicacin (corrimiento) { PORTB*=2; //PORTB= PORTB * 2; Delay10KTCYx(255); //Delay } } }

/**************************************************** F U N C I O N E S *****************************************************/

int CfgPorts(void) { ADCON1 = 0x0F; TRISA = 0xFF; TRISB = 0x00; }

//Todas los pines disponibles para anagico/digital //condigurados como digitales. //Bits del puerto A configurado como entradas. //Bits del puerto B condigurado como salidas.

Hola mundo, MPLAB y C18.

Pgina 19

Esta obra est bajo una licencia Attribution-NonCommercial-ShareAlike 3.0 Unported de Creative Commons. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by-nc-sa/3.0/ o envie una carta a Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

Hola mundo, MPLAB y C18.

Pgina 20

También podría gustarte