El Microcontrolador PIC16F877
El PIC16F877 es un microcontrolador con
memoria de programa tipo FLASH , lo que representa gran facilidad en el
desarrollo de prototipos y en su aprendizaje ya que no se requiere borrarlo con
luz ultravioleta como las versiones EPROM, sino que permite reprogramarlo
nuevamente sin ser borrado con anterioridad.
El PIC16F877 es un microcontrolador de
Microchip Technology fabricado en tec- nología CMOS, su consumo de potencia es
muy bajo y además es completamente estático, esto quiere decir que el reloj
puede detenerse y los datos de la memoria no se pierden.
El encapsulado más común para este
microcontrolador es el DIP (Dual In-line Pin) de 40 pines, propio para usarlo
en experimentación. La referencia completa es PIC16F877-04 para el dispositivo
que utiliza cristal oscilador de hasta 4 MHz, PIC16F877-20 para el dispositivo
que utiliza cristal oscilador de hasta 20 MHz o PIC16F877A-I para el
dispositivo tipo industrial que puede trabajar hasta a 20 MHz. Sin embargo, hay
otros tipos de encapsulado que se pueden utilizar según el diseño y la
aplicación que se quiere realizar. Por ejemplo, el encapsulado tipo surface
mount (montaje superficial) tiene un reducido tamaño y bajo costo, que lo hace
propio para producciones en serie o para utilizarlo en lugares de espacio muy
reducido.
Configuración de
Pines
Descripción de Pines del Microcontrolador
El
Oscilador Externo
Todo microcontrolador requiere un circuito
externo que le indique la velocidad a la que debe trabajar. Este circuito,
que se conoce como oscilador o reloj, es muy simple pero de vital importancia
para el buen funcionamiento del sistema. El PIC16F877 puede utilizar cuatro
tipos de oscilador diferentes. Estos tipos son:
- RC: Oscilador con resistencia y condensador.
- XT: Cristal (por ejemplo de 1 a 4
MHz).
- HS: Cristal de alta frecuencia (por ejemplo
10 a 20 MHz).
- LP: Cristal para baja frecuencia y bajo
consumo de potencia.
En el momento de programar o “quemar” el
microcontrolador se debe especificar qué tipo de oscilador se usa. Esto se
hace a través de unos fusibles llamados “fusibles de configuración”.
El tipo de oscilador que se sugiere para las
prácticas es el XT con un cristal de 4 MHz, porque garantiza precisión y es
muy comercial. Internamente esta frecuencia es dividida por cuatro, lo que
hace que la frecuencia efectiva de trabajo sea de 1 MHz en este caso, por lo
que cada instrucción se ejecuta en un microsegundo.
Reset
En los microcontroladores se requiere un pin de
reset para reiniciar el funcionamiento del sistema cuando sea necesario, ya
sea por una falla que se presente o porque así se haya diseñado el sistema.
El pin de reset en los PIC es llamado MCLR (master clear). Existen varias
formas de resetear o reiniciar el sistema:
• Al encendido (Power On Reset)
• Pulso en el pin MCLR durante operación normal
• Pulso en el pin MCLR durante el modo de bajo consumo (modosleep)
• Pulso en el pin MCLR durante el modo de bajo consumo (modosleep)
• El rebase del conteo del circuito de vigilancia
(watchdog) durante operación normal
• El rebase del conteo del circuito de vigilancia
(watchdog) durante el modo de bajo consumo (sleep).
El reset al encendido se consigue gracias a dos
temporizadores. El primero de ellos es el OST (Oscillator Start-Up Timer:
Temporizadorde encendido del oscilador), orientado a mantener el
microcontrolador en reset hasta que el oscilador del cristal es estable. El
segundo es el PWRT (Power-Up Timer: Temporizador de encendido), que provee un
retardo fijo de 72 ms (nominal) en el encendido únicamente, diseñado para
mantener el dispositivo en reset mientras la fuente se estabiliza. Para
utilizar estos temporizadores, sólo basta con conectar el pin MCLR a la
fuente de alimentación, evitándose utilizar las tradicionales redes de
resistencias externas en el pin de reset.
Arquitectura interna del microcontrolador
Este término se refiere a los bloques funcionales
internos que conforman el microcontrolador y la forma en que están
conectados, por ejemplo la memoria FLASH (de programa), la memoria RAM (de
datos), los puertos, la lógica de control que permite que todo el conjunto
funcione, etc.
Arquitectura del
PIC16F877.
La figura muestra la arquitectura general del
PIC16F877, en ella se pueden apreciar los diferentes bloques que lo componen
y la forma en que se conectan. Se muestra la conexión de los puertos, las
memorias de datos y de programa, los bloques especiales como el watchdog, los
temporizadores de arranque, el oscilador, etc.
Todos los elementos se conectan entre sí por
medio de buses. Un bus es un conjunto de líneas que transportan información
entre dos o más módulos. Vale la pena destacar que el PIC16F877 tiene un
bloque especial de memoria de datos de 256 bytes del tipo EEPROM, además de
los dos bloques de memoria principales que son el de programa y el de datos o
registros.
El PIC16F877 se basa en la arquitectura Harvard,
en la cual el programa y los datos se pueden trabajar con buses y memorias
separadas, lo que posibilita que las instrucciones y los datos posean
longitudes diferentes. Esta misma estructura es la que permite la
superposición de los ciclos de búsqueda y ejecución de las instrucciones, lo cual
se ve reflejado en una mayor velocidad del microcontrolador.
Memoria de programa (FLASH)
Es una memoria de 8K de longitud con datos de 14
bits en cada posición. Como es del tipo FLASH se puede programar y borrar
eléctricamente, lo que facilita el desarrollo de los programas y la
experimentación. En ella se graba o almacena el programa o códigos que el
microcontrolador debe ejecutar. En la figura 3.8 se muestra el mapa de la
memoria de programa. La memoria de programa está dividida en cuatro bancos o
páginas de 2K cada uno. El primero va de la posición de memoria 0000h a la
07FFh, el segundo va de la 0800h a la 0FFFh, el tercero de la 1000h a la
17FFh y el cuarto de la 1800h a la 1FFFh.
Vector de reset
Cuando ocurre un reset al microcontrolador, el
contador de programa se pone en ceros (0000H). Por esta razón, en la primera
dirección del programa se debe escribir todo lo relacionado con la iniciación
del mismo.
Vector de interrupción
Cuando el microcontrolador recibe una señal de
interrupción, el contador de programa apunta a la dirección 04H de la memoria
de programa, por eso, allí se debe escribir toda la programación necesaria
para atender dicha interrupción.
Pila (Stack)
Estos registros no forman parte de ningún banco
de memoria y no permiten el acceso por parte del usuario. Se usan para
guardar el valor del contador de programa cuando se hace un llamado a una
subrutina o cuando se atiende una interrupción; luego, cuando el micro
regresa a seguir ejecutando su tarea normal, el contador de programa recupera
su valor leyéndolo nuevamente desde la pila. El PIC16F877 tiene una pila de 8
niveles, esto significa que se pueden anidar 8 llamados a subrutina sin tener
problemas.
Memoria de datos (RAM)
El PIC16F877 posee cuatro bancos de memoria RAM,
cada banco posee 128 bytes. De estos 128 los primeros 32 (hasta el 1Fh) son
registros que cumplen un propósito especial en el control del
microcontrolador y en su configuración. Los 96 siguientes son registros de
uso general que se pueden usar para guardar los datos temporales de la tarea
que se está ejecutando.
Todas las posiciones o registros de memoria se
pueden acceder directa o indirectamente (esta última forma a través del
registro selector FSR). Para seleccionar que página o banco de memoria se
trabaja en un momento determinado se utilizan los bits RP0 y RP1 del
registro STATUS.
Comentarios
Publicar un comentario