Ir al contenido

PIC16F84

De Wikipedia, la enciclopedia libre
Esta es una versión antigua de esta página, editada a las 15:48 29 jun 2014 por JoaquinFerrero (discusión · contribs.). La dirección URL es un enlace permanente a esta versión, que puede ser diferente de la versión actual.

El PIC16F84 es un microcontrolador a 8 bits de la familia PIC perteneciente a la Gama Media (según la clasificación dada a los microcontroladores por la misma empresa fabricante) Microchip.

PIC16F84

Estructura

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 conjunto de instrucciones RISC muy amigable para memorizar y fácil de entender, internamente consta de:

  • Memoria Flash de programa (1K x 14 bits).
  • Memoria EEPROM de datos (64 x 8 bits).
  • Memoria RAM (68 registros x 8 bits).
  • 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.

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. .l.

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

Datos curiosos sobre este PIC

  • El PIC16F84 posee una ULA (Unidad Lógica Aritmética) limitada que impide hacer cálculos matemáticos básicos, como por ejemplo, una multiplicación de dos números a 8 bits en una única instrucción, o una división en una única instrucción. Por lo que el programador debe valerse de otras técnicas matemáticas que se apoyan en el juego de instrucciones aritméticas disponibles en este PIC para realizar este cálculo matemático básico.
  • Los datos almacenados en la memoria EEPROM pueden durar almacenados por más de 40 años.
  • La memoria de datos no se puede acceder completamente en un único registro sino que se debe acceder por bancos, por lo que se debe estar atento al momento de escribir el programa de no sobrescribir algún registro en el banco 0 queriendo escribir sobre el banco 1.
  • Muchos estudiantes de electrónica, por no decir la mayoría, eligen este PIC para iniciarse en la programación de microcontroladores cuando en el mercado existen otros PIC con una arquitectura interna mucho más simple que la que posee este microntrolador.

Véase también


Enlaces externos