PIC16F88
# PIC16F88

El PIC16F88 es un microcontrolador de la familia PIC, fabricada por la empresa Microchip.

## Estructura

Se trata de uno de los microcontroladores que puede reemplazar al más popular del mercado PIC16F84, ideal para principiantes, debido a su arquitectura de 8 bits, 18 pines, y un set de instrucciones RISC muy amigable para memorizar y fácil de entender, internamente consta de:

* Memoria Flash de programa (4K x 14).
* Memoria EEPROM de datos (256 x 8).
* Memoria RAM (368 registros x 8).
* Oscilador interno de 8MHz.
* Modulación por ancho de pulso (PWM) de 10Bits,
* Comunicación asíncrona mediante su módulo AUSART
* Cominicación síncrona SPI 3 Hilos o I2C en 2 hilos, con el módulo SSP
* Conversor de Analógico a Digital de 7 canales
* Un temporizador/contador (timer de 8 bits).
* Un divisor de frecuencia.
* Varios puertos de entrada-salida (16 pines en dos puertos, 8 pines el puerto A y 8 pines el puerto B).

Otras características son:

* Manejo de interrupciones (de 4 fuentes).
* Perro guardián (watchdog).
* Bajo consumo.
* Frecuencia de reloj externa máxima 20MHz. La frecuencia de reloj interna es un cuarto de la externa, lo que significa que con un reloj de 20Mhz, el reloj interno sería de 5Mhz y así pues se ejecutan 5 Millones de Instrucciones por Segundo (5 MIPS)
* Pipe-line de 2 etapas, 1 para búsqueda de instrucción y otra para la ejecución de la instrucción (los saltos ocupan un ciclo más).
* Repertorio de instrucciones reducido (RISC), con tan solo 35 instrucciones distintas.
* 4 tipos distintos de instrucciones, orientadas a byte, orientadas a bit, operación entre registros, de salto.

## Usos

En los últimos años se ha popularizado el uso de este microcontrolador debido a su bajo costo y tamaño. Se ha usado en numerosas aplicaciones, que van desde los automóviles a decodificadores de televisión. Es muy popular su uso por los aficionados a la robótica y electrónica.

Puede ser programado tanto en lenguaje ensamblador como en Basic y principalmente en C, para el que existen numerosos compiladores.

## Programa de ejemplo

A continuación hay un pequeño programa en ensamblador (MPASM) que pone a 0 las posiciones de memoria 20 y 21 (en hexadecimal) usando un direccionamiento indirecto:

MOVLW k: (Move Literal to W) Es una instrucción que carga en el registro de trabajo W, un literal (constante) k, que en este caso es 20h.

MOVWF f: (Move W to File), Copia el contenido del registro W a la posición de memoria f. En este caso, FSR representa una dirección de memoria. FSR es el registro usado para direccionamiento indirecto. En FSR se carga la dirección de memoria que se va a direccionar con INDF (otro registro).

CLRF f: (Clear File), Pone en 0 el registro en la posición de memoria f.

INCF f: (Increment File), Incrementa en uno el valor almacenado en la posición de memoria f.

