Las altas prestaciones de los microcontroladores PIC derivan de las características de su arquitectura. Están basados en una arquitectura tipo Harvard que posee buses y espacios de memoria por separado para el programa y los datos, lo que hace que sean más rápidos que los microcontroladores basados en la arquitectura tradicional de Von Neuman.
Otra característica es su juego de instrucciones reducido (35 instrucciones) RISC, donde la mayoría se ejecutan en un solo ciclo de reloj excepto las instrucciones de salto que necesitan dos.
Posee una ALU (Unidad Aritmético Lógica) de 8 bits capaz de realizar operaciones de desplazamientos, lógicas, sumas y restas. Posee un Registro de Trabajo (W) no direccionable que usa en operaciones con la ALU.
Dependiendo de la instrucción ejecutada, la ALU puede afectar a los bits de Acarreo , Acarreo Digital (DC) y Cero (Z) del Registro de Estado (STATUS).
La pila es de 8 niveles. No existe ninguna bandera que indique que esté llena, por lo que será el programador el que deberá controlar que no se produzca su desbordamiento.
Este microcontrolador posee caracterísitcas especiales para reducir componentes externos con lo que se reducen los costos y se disminuyen los consumos. Posee 4 diferentes modos de oscilador, desde el simple circuito oscilador RC con lo que se disminuyen los costos hasta la utilización de un oscilador a cristal.
En el modo SLEEP el consumo se reduce significativamente y puede ‘despertarse’ al microcontrolador utilizando tanto interrupciones internas como externas y señal de reset. Además posee la función Watchdog Timer (Perro Guardian) que protege al micro de ‘cuelgues’ debido a fallos software que produzcan bucles infinitos.
Construccion
Se trata de uno de los microcontroladores más populares del mercado actual, 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 (1K x 14).
- Memoria EEPROM de datos (64 x 8).
- Memoria RAM (68 registros x 8).
- Un temporizador/contador (timer de 8 bits).
- Un divisor de frecuencia.
- Varios puertos de entrada-salida (13 pines en dos puertos, 5 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 10MHz. (Hasta 20MHz en nuevas versiones). 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)
- No posee conversores analógicos-digital ni digital-analógicos.
- 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 30 instrucciones distintas.
- 4 tipos distintos de instrucciones, orientadas a byte, orientadas a bit, operación entre registros, de salto
Composicion
l Repertorio de 35 Instrucciones.
l Todas las instrucciones se ejecutan en un solo ciclo excepto las de salto que necesitan dos.
l Versiones de 4 MHz (PIC16F84-04) y 10 MHz (PIC16F84-10).
l Memoria de programa Flash de 1 K x 14 bits.
l Memoria de datos RAM de 68 bytes.
l Memoria de datos EEPROM de 64 bytes.
l Pila con 8 niveles de profundidad.
l Modos de direccionamiento directo, indirecto y relativo.
l 4 fuentes de interrupciones:
l A través del pin RB0/INT.
l Desbordamiento del temporizador TMR0.
l Interrupción por cambio de esto de los pins 4:7 del Puerto B.
l Completada la escritura de la memoria EEPROM.
l 1.000.000 de ciclos de borrado/escritura de la memoria EEPROM.
l 40 años de retención de la memoria EEPROM.
l 13 pins de E/S con control individual de dirección.
l Contador/Temporizador TMR0 de 8 bits con divisor programable.
l Power-on Reset (POR).
l Power-up Timer (PWRT).
l Oscillator Start-up Timer (OST).
l Watchdog Timer (WDT).
l Protección de código.
l Modo de bajo consumo SLEEP.
l Puede operar bajo 4 modos diferentes de oscilador.
l Programación en serie a través de dos pins.
l Tecnología de baja potencia y alta velocidad CMOS Flash/EEPROM.
l Rango de alimentación: 2.0 a 6.0 V.

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.Cuando se utilizan los compiladores Basic,es posible desarrollar ùtiles aplicaciones en tiempo récord,especialmente dirigidas al campo domèstico y educacional.
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 20h
MOVWF FSR
CLRF INDF
INCF FSR
CLRF INDF
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.
Otro Programa de ejemplo
Este otro programa permite poner a valor lógico uno la salida RB0 del microcontrolador cuando se detecta un valor lógico uno en la entrada RA0 mediante el uso de saltos incondicionales GOTO (ir a...):
SIGUE BTFSS PORTA,0 ; testea el pin RA0 del PORTA, si encuentra un "1" salta una instrucción, de lo contrario continua
GOTO APAGA ; salta a la subrutina APAGA
GOTO ENCIENDE ; salta a la subrutina ENCIENDE
APAGA BCF PORTB,0 ; pone en "0" el pin RB0 del PORTB
GOTO SIGUE ; vuelve al testeo
ENCIENDE BSF PORTB,0 ; pone en "1" el pin RB0 del PORTB
GOTO SIGUE ; todo de nuevo