¿Qué es un microcontrolador?
Es un “chip” o un circuito integrado programable, en el cual permite ejecutar un conjunto de instrucciones predefinidas.
Elementos básicos de un microcontrolador.
CPU(Unidad de procesamiento Central): Se encarga de ejecutar cada instrucción y controlar que dicha ejecución sea la adecuada.
Memorias: Son aquellas que guardan las instrucciones y los diferentes datos.
tipos de memoria.
Persistentes: Son aquellas, donde el contenido se almacena de forma permanente cuando no hay alimentación.
Volátiles: Son aquellas, donde el contenido se pierde al dejar de recibir alimentación.
Las pastillas de entrada y salida: Se encarga de comunicar el microcontrolador con el exterior.
El PIC16F887: Es un microcontrolador de Microchip. Su consumo de potencia es muy bajo. Tiene cinco puertos llamados A,B,C,D y E; pueden ser utilizados como entrada digital, salida digital, salida de PWM, entrada para conversión análoga a digital, transmisión o recepción datos.
Características del PIC16F7887
- Número de pines: 40 pines.
- Voltaje de alimentación:0v a 5.5v.
- Tres temporizadores/contadores independientes.
- Frecuencia de operación 0-20MHZ.
- Tiene 256 bytes de memoria EEPROM.
- Tiene memoria ROM de 8k.
- Tiene 368 bytes de memoria RAM.

FUNCIONES UTILIZADAS PARA LA PROGRAMACIÓN DEL PIC.
PORTA, PORTB, PORTC, PORTD y PORTE: Los puertos del microcontrolador, son la manera como se comunica con el mundo exterior.
SET_TRIS_A(valor), SET_TRIS_B(valor), SET_TRIS_C(valor), SET_TRIS_D(valor), SET_TRIS_E(valor): Son registros de configuración, que indican si los pines del puerto son de entrada o salida.
Hay que tener en cuenta que en los PIC de MICROCHIP, las entradas se configuran con unos y las salidas con ceros.
BIT_TEST(valor, bit): Prueba el estado del bit del valor. Devuelve uno.
BIT_SET(valor,bit): Pone en uno el bit especificado del valor.
#INCLUDE <16F887.h>: Es la librería del microcontrolador que se va a utilizar, en este caso se utiliza el pic16F887.
#USE DELAY(CLOCK=4000000): Configuración de la frecuencia del reloj del sistema a 4MHZ.
#FUSES XT, NOPROTECT,NOWDT: Son fusibles de configuración que se pueden habilitar o deshabilitar, de acuerdo a lo que se necesite en el programa.
#FUSES XT: Oscilador a cristal estándar.
#FUSES NOPROTECT:Protección contra lectura de la FLASH desactivada.
#FUSES NOWDT: Watch Dog Timer desactivado.
EJERCICIO INTRODUCTORIO: SECUENCIA DE LEDS CON DOS PULSADORES.

PROGRAMA EN PIC C COMPILER.
//Secuencia leds con pulsadores
#INCLUDE <16F887.h>
#USE DELAY (CLOCK=4000000)
#FUSES XT,NOPROTECT,NOWDT
//Definición de registros
#BYTE PORTA=5
#BYTE PORTB=6
//Definición de entradas
#DEFINE SW1 PORTA,0
#DEFINE SW2 PORTA,1
main(){
//Definición de salidas y etradas digitales
SET_TRIS_B(0B00000000); //Salidas digitales
SET_TRIS_A(255); //Entradas digitales
SET_TRIS_C(255); //También puedo poner 0B11111111 Como entrada digital
PORTA=0X00;
PORTB=0X00;
WHILE(1){
IF((BIT_TEST(SW1)==0) && (BIT_TEST(SW2)==0))
{
BIT_SET(PORTB,0);
DELAY_MS(100);
BIT_SET(PORTB,1);
DELAY_MS(100);
BIT_SET(PORTB,2);
DELAY_MS(100);
BIT_SET(PORTB,3);
DELAY_MS(100);
BIT_SET(PORTB,4);
DELAY_MS(100);
BIT_SET(PORTB,5);
DELAY_MS(100);
BIT_SET(PORTB,6);
DELAY_MS(100);
BIT_SET(PORTB,7);
DELAY_MS(100);
}
IF((BIT_TEST(SW1)==0) && (BIT_TEST(SW2)==1))
{
PORTB=0B00011000;
DELAY_MS(100);
PORTB=0B00100100;
DELAY_MS(100);
PORTB=0B01000010;
DELAY_MS(100);
PORTB=0B10000001;
DELAY_MS(100);
}
IF((BIT_TEST(SW1)==1 ) && (BIT_TEST(SW2)==0)) {
PORTB=0B01010101;
DELAY_MS(100);
PORTB=0B10101010;
DELAY_MS(100);
IF(BIT_TEST(SW1)==1)
{
PORTB=0X00;
}
}
IF((BIT_TEST(SW1)==1) && (BIT_TEST(SW2)==1))
{
PORTB=0B11000011;
DELAY_MS(100);
PORTB=0B00111100;
DELAY_MS(100);
}
PORTB=0X00;
}
}
Explicación del circuito:
Con el pic16f887 se controla el encendido y apagado de la secuencia de los leds. Con los cuatro estados lógicos para cada pulsador se genera una secuencia diferente.
| Pulsador Uno | Pulsador Dos | Secuencia |
| Cero | Cero | Prenden cada led en dirección izquierda. Cuando todos los leds están prendidos, se apagan. |
| Cero | Uno | Pares e impares |
| Uno | Cero | Se prenden cada led del nibble alto hacia la izquierda y se prenden cada led del nibble bajo hacia la derecha. |
| Uno | Uno | Se prenden de a dos leds del nibble alto hacia la izquierda y se prenden de a dos leds del nibble bajo hacia la derecha. |
Materiales:
- Dos resistencias de 10 KΩ
- Nueve resistencias de 220Ω
- Ocho leds rojos.
- Un pic16F887.
- Dos pulsadores.
VÍDEO DE LA SIMULACIÓN DEL CIRCUITO.
VÍDEO DE LA PRUEBA DEL CIRCUITO
CONTENIDOS MÁS RELEVANTES.











