lunes, 17 de septiembre de 2012

Configuración básica del PIC en XC8

Para que un pic funcione correctamente el mismo debe tener configuradas 1 o más "palabras" de configuración. Los bits de estas palabras permiten seleccionar, por ej.:, el tipo de oscilador a utilizar o si una patita del pic se usará como Reset.

En XC8 la configuración se setea mediante un Macro en el archivo "pic.h" y se escribe así "__CONFIG( bitsDeConfiguración )".

Cada línea "__CONFIG" representa una palabra de configuración. Para que funcione correctamente se deben escribir en el orden en el que aparecen en el PIC.

Ejemplo para el PIC16F88:


__CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF & 
         WDTE_OFF & FOSC_INTOSCIO & PWRTE_OFF);
__CONFIG(IESO_OFF & FCMEN_OFF);



Las distintos bytes de configuración se concatenan mediante el caracter "&". Estos van a ser propios de cada pic. Por ejemplo, en la configuración anterior estamos indicando que el pin 4 actuará de Reset cuando no reciba corriente (MCLRE_ON) y utilizará el oscilador interno (FOSC_INTOSCIO).

Si en lugar de querer utilizar el oscilador interno se quisiera utilizar uno externo de 20Mhz la configuración cambiaría a:


__CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF & 
         WDTE_OFF & FOSC_HS & PWRTE_OFF);
__CONFIG(IESO_OFF & FCMEN_OFF);


Como recomendación, estas configuraciones las coloco en un archivo de código separado. Esto me permite poder cambiar las diferentes configuraciones o generar archivos Template para crear nuevos proyectos. Ej.:

       "configuration_bits.c".

Aparte de la configuración hay 2 librerías extra que siempre agrego a mis proyectos:
- stdint.h: define los distintos tipos de datos de forma precisa y sin importar la arquitectura del procesador/controlador: Ej.: uint8_t : este tipo define que la variable es un entero de 8 bits sin signo

-stdbool.h: define tipos de datos boolean, por ej.:bool


ej.: bool inputValid = true;

Con la sintaxis anterior, el siguiente código queda más fácil de seguir:

bool inputValid = false;

while(!inputValid) {

     // Leer un valor desde el pin 0 del puerto B
     if (PORTBbits.RB0) {
          inputValid = true;
     }
}

Si no utilizamos stdbool.h quedaría así, por ejemplo:

uint8_t inputValid = 0;

while(!inputValid) {

     // Leer un valor desde el pin 0 del puerto B
     if (PORTBbits.RB0) {
          inputValid = 1;
     }
}




Saludos,

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...