Agregando código a nuestro proyecto
En la parte 1 quedamos con la siguiente pantalla que muestra nuestro proyecto vacío recién creado:
Figura 1 |
Header Files:
- system.h : Macros y funciones para configurar el sistema.
- user.h: Macros y funciones específicas de la aplicación.
Source Files:
- configuration_bits.c: Programación de los bits de configuración del sistema.
- system.c: Funciones que configuran el sistema (Por ejemplo el Oscilador)
- main.c: Programa principal
- user.c: Algoritmos de la aplicación.
Para agregar un archivo ".h" hacemos click derecho en Header Files y seleccionamos "New/ C Header File...". En la siguiente pantalla escribimos el nombre del archivo y luego finalizar:
Ej.: system.h:
Figura 2 |
Figura 3 |
Para agregar un archivo ".c" hacemos click derecho en Source Files y seleccionamos "New/ C Source File...". En la siguiente pantalla escribimos el nombre del archivo y luego finalizar:
Figura 4 |
Figura 5 |
/* * File: system.h * Author: Julián Quiroga */ /*******************************************************/ /* System Level #define Macros */ /*******************************************************/ /** * Indica que el pic funcionará a 8MHz. * Este macro es necesario para las funciones de delay. */ #define _XTAL_FREQ 8000000 /*******************************************************/ /* System Function Prototypes */ /*******************************************************/ /** * Función que debe configurar el Oscilador */ void ConfigureOscillator(void);
En user.h por ahora lo dejaremos vacío:
/* * File: user.h * Author: Julián Quiroga */ /*******************************************************/ /* System Level #define Macros */ /*******************************************************/ /*******************************************************/ /* System Function Prototypes */ /*******************************************************/
En "configuration_bits.c" agregaremos lo que hablé en esta entrada "Configuración básica del PIC en XC8":
/** * File: configuration_bits.c * PIC: PIC16F88 * Author: Julián Quiroga * * Descripción: Configura el pic para que utilice * el oscilador interno y el pin 4 * como Reset */ #include <xc.h> __CONFIG(MCLRE_ON & CP_OFF & CPD_OFF & LVP_OFF & BOREN_OFF & WDTE_OFF & FOSC_INTOSCIO & PWRTE_OFF); __CONFIG(IESO_OFF & FCMEN_OFF);
En "system.c" escribiremos lo siguiente:
/** * File: system.c * PIC: PIC16F88 * Author: Julián Quiroga * * Descripción: Funciones base del sistema */ #include <xc.h> #include <stdint.h> /* For uint8_t definition */ #include <stdbool.h> /* For true/false definition */ #include "system.h" /** * Configurar todo lo necesario para que funcione el oscilador interno * a 8Mhz. */ void ConfigureOscillator(void) { // Configura el Oscilador interno a 8Mhz OSCCONbits.IRCF = 0b111; }
Ahora sólo nos queda crear main.c:
/* * File: main.c * PIC: PIC16F88 * Author: Julián Quiroga * * Descripción: Programa que enciende y apaga un LED de forma * intermitente en RB0. */ #include <xc.h> #include <stdio.h> #include <stdint.h> #include <stdbool.h> #include "system.h" #include "user.h" #define LED PORTBbits.RB0 // El Led se encuentra conectado en RB0 #define posLED 0 // Posición en la que se encuentra el Led /** * Programa principal */ void main(void) { // Configura el oscilador ConfigureOscillator(); // Configura un 0 en la posición que le corresponde al LED // y un 1 a todas las demás. // 0 = Salida, 1 = entrada TRISB = ~(1 << posLED); // La línea anterior es equivalente a // TRISB = 0b11111110; // Bucle principal while(true) { LED = 1; // Setea en estado alto (High) el LED __delay_ms(500); // Se queda esperando 500 milisegundos LED = 0; // Setea en estado bajo (Low) el LED __delay_ms(500); } }
El código anterior define 2 macros: LED y posLED. Estos macros permiten que podamos cambiar de lugar en led haciendo mínimos cambios en el código.
LED indica el lugar en el que se seteará un 1.
posLed indica la posición del LED en el puerto B.
La instrucción: "1 << posLED" hace que el "1" de la izquierda se mueva tantos lugares a la izquierda como los que indica posLED. En este caso, como es "0", el resultado es un "1" que no se movió de lugar.
Luego, la instrucción "~" hace que todo lo que esté dentro del paréntesis quede negado, es decir, en bits, con el valor opuesto. Entonces en lugar de quedar todos ceros y un uno, ahora quedan todos unos y un cero: "0b11111110".
Ahora sólo nos queda compilar nuestro proyecto y ver que no tenga errores. Para hacer eso, hacemos click en el ícono que muestra un martillo, llamado "Build Main Proyect".
Si no hubo errores, el resultado de la compilación nos dirá algo similar a esto:
BUILD SUCCESSFUL (total time: 5s)
Ahora que ya tenemos nuestro primer proyecto compilado correctamente tenemos 2 opciones para probarlo, ejecutarlo en modo simulador o grabarlo en el PIC y probarlo en nuestro circuito.
En la parte 3 (Primer proyecto en XC8 (Parte 3) - Probando el código) de este tutorial les enseñaré como hacer esto.
Saludos!
porfavor necesito que escribes bien porque algunos archivos me confunden como .c y .h
ResponderEliminarOlle puedes explicarme cómo funciona el archivo configuration_bits.c ?
ResponderEliminarEn qué momento es llamado dentro de la funcion principal ?
Por qué configuration_bits.c no es uno con extensión .h ?
Los archivos .h que creas son diferentes a los que crea el asistente de Mplab, son así: Cuál es la diferencia.
#ifndef USUARIO_H
#define USUARIO_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* USUARIO_H */
Gracias por el aporte