8 ¡Hola Mundo! - Borxo/Programming-PIC-Microcontrollers-Tutorial GitHub Wiki

¡Hola Mundo!

El circuito mas simple que se puede realizar con un microcontrolador PIC, es conectar un led a uno de sus pines. Haciendo que cuando este a “1” se encienda el led y cuando esta a “0” se apague.

Circuito

Esquema del circuito

Material

  • El microcontrolador PIC (en este caso PIC16F1936).
  • Resistencia 330 Ohm (Resistencia típica para los leds).
  • Led verde.

Explicación del circuito

Se conectará el led al Pin “RB2” por medio de la resistencia de 330 Ohm. Como se ha explicado anteriormente, cuando el pin este a nivel alto, el led deberá estar encendido por lo que se conectará la patilla del ánodo a la resistencia y la del cátodo se llevará a GND.

Código

/*
 * Programa: Hola Mundo. 
 * Microcontrolador: PIC16F1936.
 * Autor: Borxo García.
 */

//Palabras de configuración
// CONFIG1
#pragma config FOSC = INTOSC    
#pragma config WDTE = OFF       
#pragma config PWRTE = OFF      
#pragma config MCLRE = OFF      
#pragma config CP = OFF         
#pragma config CPD = OFF        
#pragma config BOREN = OFF      
#pragma config CLKOUTEN = OFF   
#pragma config IESO = OFF      
#pragma config FCMEN = OFF      

// CONFIG2
#pragma config WRT = OFF        
#pragma config PLLEN = OFF       
#pragma config STVREN = OFF     
#pragma config BORV = LO        
#pragma config LVP = OFF        

//Velocidad del oscilador interno//
#define _XTAL_FREQ 4000000

//Librerias//
#include <xc.h>

void main (void)
{
    //Configuración de los Puertos//
    TRISA=0x00;
    
    //Oscilador//
    OSCCON=0b01101000; //4Mhz
    
    while(1)
    {
        RA2=0;  //Led apagado
        __delay_ms(500);
        RA2=1;  //Led encendido
        __delay_ms(500);
    }
}

Explicación del código

En primer lugar, se incluirá la cabecera del programa, donde se especificará los datos importantes del programa, como son el nombre, el autor y el microcontrolador que se utiliza. A continuación, se escribirán las directivas que va ha leer el preprocesador y según esas directivas modificara el código. En primer lugar, se escribirán las palabras de configuración, la opción mas importante es “FOSC”, (información en wiki), que es donde se configurara el oscilador que se va a utilizar, en este caso se utilizara el oscilador interno (INTOSC). Las demás opciones se encontrarán desactivadas, ya que es un código muy simple y no se necesita características especiales.

//Palabras de configuración
#pragma config FOSC = INTOSC 

Seguidamente se especificará la velocidad en la que va a trabajar el oscilador. Se ajustará la velocidad a 4Mhz, ya que cada ciclo de instrucción es de un 1us, esta velocidad se debe escribir en Hz.

//Velocidad del oscilador interno//
#define _XTAL_FREQ 4000000

Por último, de este bloque se incluirá la libreríaEsta librería es necesaria para que el programa reconozca el lenguaje propio del PIC. Esta librería contiene todo el comando de casi todos los microcontroladores PIC.

//Librerias//
#include <xc.h>

En la función “void main” es donde se encuentra propiamente dicho el programa, como recordaran las líneas que están fuera del bucle “while(1)”, se ejecutan una sola vez y suelen ser la configuración de los registros especiales.

El led esta conectado al pin RB2, por lo que ese pin debe ser configurado como salida. Para configurar un puerto como salida se debe realizar por medio del registro “TRISX”, dependiendo del puerto que se vaya a elegir entra una letra distinta, en este caso será el “TRISA”, como debe ser salidas se configurara los bits a “0”. Se ha escrito de manera hexadecimal, ya que cuando un registro tiene todos sus bits la misma configuración, se escribir lo valores en hexadecimal, es mucho más rápido y legible en el código.

//Configuración de los Puertos//
TRISA=0x00;

A través del registro OSCCON, se configura el oscilador interno, se utilizará el oscilador interno HFINTOSC, configurado en la palabra de configuración, a 4Mhz y se mantendrá desactivado el PLL, ya que no se va a utilizar.

//Oscilador//
OSCCON=0b01101000; //4Mhz

Por último el bucle “while(1)”, que contiene la parte del código que se va ejecutar continuamente, como lo que se quiere es encender y apagar un led, se debe configurar el pin a nivel bajo y alto. A través del registro “PORTX”, se consigue tal propósito, al solo utilizar un solo bit del registro, se utilizará el nombre del bit del registro siendo “RA2”. El cambio de estado de un pin esta estrechamente ligado con el reloj de instrucciones, si el cambio de estado es menor o igual al reloj de instrucciones, lo mas seguro que no se procese la instrucción o cree errores no deseados.

while(1)
    {
        RA2=0;
        __delay_ms(500);
        RA2=1;
        __delay_ms(500);
    }

Para evitar tal cosa, se añade entre el cambio de estado del Pin un retardo (delay), de un tiempo determinado. Los delay se pueden encontrar de dos tipos:

__delay_ms(500); //Delay en MiliSegundos.
__delay_us(500); //Delay en MicroSegundos.

Descargas

Circuito Simulado: Hola_Mundo

Codigo: Hola_Mundo.C

⚠️ **GitHub.com Fallback** ⚠️