Mplab xc8 blink


En este post vamos a dar los primeros inicios con el mplab y xc8 para trabajar con los microcontroladores pic, crearemos el proyecto del clásico blink, el cual consiste en encender y apagar un led.

Mplab xc8 blink
oscar Escrito por oscar 20 May 2019 6651 1

En este post vamos a dar los primeros inicios con el MPLAB X IDE y el compilador XC8 para trabajar con los microcontroladores pic, crearemos un proyecto para encender un LED, el clásico blink.

Instalación de MPLAB X IDE y XC8

Antes de empezar a trabajar necesitamos los entornos de trabajo los cuales son el MPLAB X IDE y el compilador xc8, para ello se ha preparado un par de post en donde se realiza la explicación de como instalar los programas en Windows e Linux.

Entradas y salidas microcontrolador pic

Trabajaremos con los pines GPIO del PIC, se necesita entender el ejercicio que vamos a realizar.

Instrucción Qué hace Ejemplo
TRISB Configura la dirección de todo PORTB TRISB = 0x00;
PORTB Lee/escribe todo PORTB PORTB = 0xFF;
TRISBbits.TRISB0 Configura la dirección de RB0 TRISBbits.TRISB0 = 0;
PORTBbits.RB0 Lee/escribe el estado de RB0 PORTBbits.RB0 = 1;

Configuración bits

Tenemos el post Mplab X IDE XC8 configuración bits donde explicamos a detalle, como configurar los segun el PIC seleccionado.

Conexión del PIC

Materiales

Los materiales a usar los describimos en la siguiente tabla.

Material Cantidad Descripción
PIC16F877A 1 Microcontrolador de la marca microchip
Cristal de 4Mhz 1 Reloj externo del microcontrolador
Resistencias de 1K 2 Resistencia de proteccion del led y de MCLR
Led 1 Indicador visual
Pulsador tipo botton 1 Se usa para el reset de MCLR

Circuito

Para trabajar con un microcontrolador pic hay que tener en cuenta dos cosas importantes, la conexión a positivo del pin MCLR con una resistencia de protección y la conexión del cristal externo en este caso de 4Mhz con un par de condensadores de 22uf. A continuación encontrara los planos y el circuito.

Blink circuito
Blink circuito
Blink imagen
Blink imagen

Código

Configuración de los fuses

Realizamos una configuración que podemos usa casi en cualquier microcontrolador PIC:

#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF
Configuración Valor ¿Qué hace? Recomendación para aprender
FOSC XT Selecciona el tipo de oscilador. XT se utiliza normalmente con un cristal/resonador de frecuencia baja/mediana. XT con cristal de 4 MHz
WDTE OFF Desactiva el Watchdog Timer (WDT). Si está activado, puede reiniciar el PIC automáticamente. OFF
PWRTE OFF Controla el Power-up Timer. Si está ON, introduce un pequeño retardo después de encender el PIC para estabilizar la alimentación. ON suele ser conveniente en hardware real
BOREN ON Activa el Brown-out Reset. Reinicia el PIC si la tensión de alimentación cae por debajo del nivel establecido. ON
LVP OFF Desactiva la programación en bajo voltaje. Permite utilizar RB3 como GPIO normalmente. OFF
CPD OFF Protección contra lectura del código almacenado en la memoria EEPROM de datos. OFF durante desarrollo
WRT OFF Protección contra escritura de determinadas áreas de la memoria de programa. OFF durante desarrollo
CP OFF Protección contra lectura/copia del código de programa. OFF durante desarrollo

Vamos a explicar el código paso por paso, aunque como se puede observar no es tan complicado este ejemplo.

También se ha dejado en el repositorio de la pagina el código por si desea clonarlo, lo encontraras como ejemplo led.

//Paso 1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config BOREN = ON
#pragma config LVP = ON
#pragma config CPD = OFF
#pragma config WRT = OFF
#pragma config CP = OFF 

//Paso 2
#include <xc.h>
#include <PIC16f877A.h>

//Paso 3
#define _XTAL_FREQ 4000000

//Paso 4
void main(void) {
    
    //Paso 5
    TRISB = 0;
    
    //Paso 6
    while(1){
        //Paso 7
        PORTBbits.RB0 = 1;
        __delay_ms(1000);
        PORTBbits.RB0 = 0;
        __delay_ms(1000);
    }
}
  1. Declaramos la configuración de los fuses que necesita el pic para su funcionamiento, el mas importante por el momento es el FOSC en XT, donde le indicamos que usamos un cristal externo.
  2. Incluimos las librerías de xc y del pic, que contienen las configuraciones de los pines e instrucciones básicas de funcionamiento.
  3. Definimos la frecuencia del cristal a 4Mh, el cual estamos trabajando, para ello usamos _XTAL_FREQ.
  4. Inicializamos la función principal que el main donde correrá el programa.
  5. Colocamos todo el puerto B como salida usando la función TRISB.
  6. Creamos un ciclo while para que el programa corra indeterminadamente.
  7. Por ultimo encendemos y apagamos el led asignando el bit correspondiente con PORTBbits.RB0, damos un tipo de espera de 1s 0 1000ms con la función __delay_ms.

Referencias

[1] Microchip http://ww1.microchip.com/downloads/en/devicedoc/50002053g.pdf, Consultado mayo 2019


Comentario

Debe aceptar antes de enviar
surcanito
surcanito

06 June 2020 21:46

Bueno el ejemplo