viernes, 20 de agosto de 2010

Descripción del PIC 16F877

Descripción General del PIC16F877

La Familia del PIC16F877
El microcontrolador PIC16F877 de Microchip pertenece a una gran familia de microcontroladores de 8 bits (bus de datos) que tienen las siguientes características generales que los distinguen de otras familias:
- Arquitectura Harvard
 - Tecnología RISC
- Tecnología CMOS
Estas características se conjugan para lograr un dispositivo altamente eficiente en el uso de la memoria de datos y programa y por lo tanto en la velocidad de ejecución. Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al número de bits de su bus de instrucciones:

Subfamilia instrucciones nomenclatura
Base - Line 33 instrucciones de12 bits PIC12XXX y PIC14XXX
Mid – Range 35 instrucciones de 14 bits PIC16XXX
High - End 58 instrucciones de 16 bits PIC17XXX y PIC18XXX
• Existen algunas excepciones, como el PIC16C5X que maneja 33 instrucciones
 Algunos autores manejan una “gama enana” consistente en los PIC12C508 y PIC12C509 en empaque de 8 patitas y con un bus de instrucciones de 12 o de 14 bits.

Variantes principales
Los microcontroladores que produce Microchip cubren una amplio rango de dispositivos cuyas características pueden variar como sigue:
- Empaquetado (desde 8 patitas hasta 68 patitas)
- Tecnología de la memoria incluída (EPROM, ROM, Flash)
- Voltajes de operación (desde 2.5 v. Hasta 6v)
- Frecuencia de operación (Hasta 20 Mhz)

Empaquetados
Aunque cada empaquetado tiene variantes, especialmente en lo relativo a lasdimensiones del espesor del  paquete, en general se pueden encontrar paquetes tipo PDIP (Plastic Dual In Line Package), PLCC (Plastic Leaded Chip Carrier),





Nomenclatura

Además de lo mostrado en la tabla anterior, en el nombre específico del microcontrolador pueden aparecer algunas siglas que dependen del rango de voltaje manejado y del tipo de memoria ROM incluida, como se muestra en la siguiente tabla:

Oscilador

Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador. El usuario puede seleccionar alguno de estos 8 modos programando 2 bits de configuración del dispositivo denominados: FOSC1 y FOSC0, ubicados en un registro especial de configuración en la localidad 2007H de la memoria de programa:

 
Los tres modos LP, XT y HS usan un cristal o resonador externo, la diferencia sin  embargo es la ganancia de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y la potencia consumida. En la siguiente tabla se muestran los rangos de frecuencia así como los capacitores recomendados para un oscilador en base a cristal.

Cristal externo: En los tres modos mostrados en la tabla anterior se puede usar un cristal o resonador cerámico externo. En la siguiente figura se muestra la conexión de un cristal a las patitas OSC1 y OS2 del PIC.
 

Circuito RC externo: En los modos RC y EXTRC el PIC puede generar su señal oscilatoria basado en un arreglo RC externo conectado a la patita OSC1 como se muestra en la siguiente figura:

Este modo sólo se recomienda cuando la aplicación no requiera una gran precisión en la medición de tiempos.

Rangos.- La frecuencia de oscilación depende no sólo de los valores de Rext y Cext, sino también del voltaje de la fuente Vdd. Los rangos admisibles para resistencia y capacitor son:

Rext: de 3 a 100 Kohms

Cext: mayor de 20 pf

Oscilador externo.- También es posible conectar una señal de reloj generada mediante un oscilador externo a la patita OSC1 del PIC. Para ello el PIC deberá estar en uno de los tres modos que admiten cristal (LP, XT o HS). La conexión se  muestra en la siguiente figura:

Oscilador interno de 4Mhz.- En los PIC’s que poseen este modo de oscilación, (modo INTRC) el PIC usa un arreglo RC interno que genera una frecuencia de 4Mhz con un rango de error calibrable de ± 1.5%. Para calibrar el error de oscilación se usan los bits CAL3, CAL2 , CAL1 Y CAL0 del registro OSCCAL. Calibración del oscilador interno.- El fabricante ha colocado un valor de calibración para estos bits en la última dirección de la memoria de programa. Este dato ha sido guardado en la forma de una instrucción RETLW XX. Si no se quiere perder este valor al borrar el PIC (en versiones EPROM con ventana) primero se deberá leer y copiar. Es una buena idea escribirlo en el empaquetado antes de borrar la memoria).

 Características generales del PIC16F877

La siguiente es una lista de las características que comparte el PIC16F877 con los dispositivos más cercanos de su familia:
 

 CPU:

- Tecnología RISC

- Sólo 35 instrucciones que aprender

- Todas las instrucciones se ejecutan en un ciclo de reloj, excepto los saltos que requieren dos

- Frecuencia de operación de 0 a 20 MHz (200 nseg de ciclo de instrucción)

- Opciones de selección del oscilador  Memoria:

- Hasta 8k x 14 bits de memoria Flash de programa

- Hasta 368 bytes de memoria de datos (RAM)

- Hasta 256 bytes de memoria de datos EEPROM

- Lectura/escritura de la CPU a la memoria flash de programa

- Protección programable de código

- Stack de hardware de 8 niveles

Reset e interrupciones:

- Hasta 14 fuentes de interrupción

- Reset de encendido (POR)

- Timer de encendido (PWRT)

- Timer de arranque del oscilador (OST)

- Sistema de vigilancia Watchdog timer.

Otros:

- Modo SLEEP de bajo consumo de energía

- Programación y depuración serie “In-Circuit” (ICSP) a través de dos patitas

- Rango de voltaje de operación de 2.0 a 5.5 volts

- Alta disipación de corriente de la fuente: 25mA

- Rangos de temperatura: Comercial, Industrial y Extendido

- Bajo consumo de potencia: o Menos de 0.6mA a 3V, 4 Mhz o 20 μA a 3V, 32 Khz o menos de 1μA corriente de standby (modo SLEEP).
Diagrama de Bloques del PIC16F877

En la siguiente figura se muestra a manera de bloques la organización interna del PIC16F877, Se muestra también junto a este diagrama su diagrama de patitas, para tener una visión conjunta del interior y exterior del Chip.
 Descripción de la CPU

La CPU es la responsable de la interpretación y ejecución de la información (instrucciones) guardada en la memoria de programa. Muchas de estas instrucciones operan sobre la memoria de datos. Para operar sobre la memoria de datos además, si se van a realizar operaciones lógicas o aritméticas, requieren usar la Unidad de Lógica y Aritmética (ALU). La ALU controla los bits de estado (Registro STATUS), los bits de este registro se alteran dependiendo del resultado de algunas instrucciones.

Ciclo de instrucción

El registro Program Counter (PC) es gobernado por el ciclo de instrucción como se muestra en la siguiente figura. Cada ciclo de instrucción la CPU lee (ciclo Fetch) la instrucción guardada en la memoria de programa apuntada por PC y al mismo tiempo ejecuta la instrucción anterior, esto debido a una cola de instrucciones que le permite ejecutar una instrucción mientras lee la próxima:
 

Como puede verse, cada ciclo de instrucción (Tcy = 4Tosc) se compone a su vez de cuatro ciclos del oscilador (Tosc= 1/Fosc)). Cada ciclo Q provee la sincronización para los siguientes eventos:

Q1: Decodificación de la instrucción

Q2: Lectura del dato (si lo hay)

Q3: Procesa el dato

Q4: Escribe el dato

Debido a esto cada ciclo de instrucción consume 4 ciclos de reloj, de manera que si la frecuencia de oscilación es Fosc, Tcy será 4/Fosc.Registros de la CPU. Registro PC.

Registro de 13 bits que siempre apunta a la siguiente instrucción aRegistro de Instrucción.

 Registro de 14 bits. Todas las instrucciones se colocan en él para ser decodificadas por la CPU antes de ejecutarlas.

Registro W.- Registro de 8 bits que guarda resultados temporales de las operaciones realizadas por la ALU

Registro STATUS.- Registro de 8 bits, cada uno de sus bits (denominados Banderas) es un indicador de estado de la CPU o del resultado de la última operación como se indica en la siguiente figura:

Z.- Este bit se pone (=1) para indicar que el resultado de la última operación fue cero, de lo contrario se limpia (=0)

C.- Bit de acarreo/préstamo’ de la última operación aritmética (en el caso de préstamo (resta), el bit se invierte antes de guardarse)

DC.- Acarreo/

prestamo proveniente del cuarto bit menos significativo. Funciona igual que el bit C, pero para operaciones de 4 bits.

Las restas se realizan sumando el complemento a dos del segundo operando, por ejemplo, para los datos 4FH y 25H: ejecutarse. En la siguiente sección se dan mayores detalles en el manejo de este registro.

Conjunto de Instrucciones de Rango Medio En la siguiente tabla se resumen las 35 instrucciones que reconoce la CPU de los PIC de medio rango, incluyendo su mnemónico, tiempo de ejecución, código de máquina y afectación de banderas:
Descripción de algunas instrucciones.

Para obtener la descripción detallada de cada instrucción de la tabla anterior se deberá consultar la sección 29 del manual del fabricante (PICmicro Mid-Range MCU Reference Manual). A continuación sólo se ejemplificarán algunas instrucciones con el propósito de clarificar la operación que realizan.
 
En el siguiente ejemplo se ejemplifica el efecto de algunas instrucciones sobre el registro W, sobre el registro de propósito general 20h de memoria RAM.
Formato General de las Instrucciones.
Cada instrucción en lenguaje de máquina (binario) del PIC contiene un código de operación (opcode) el cual puede ser de 3 a 4 o 6 bits, dependiendo del tipo de instrucción.

A continuación se describe el formato para cada tipo de instrucción de los PIC de rango medio:


El bit d especifica el destino del resultado de la operación:

d = 0: destino W

d = 1: destino f

f = dirección de 7 bits del archivo de registros.Operaciones con el archivo de registros orientadas a bytes
Operaciones con el archivo de registros orientadas a bits
b : Especificación en tres bits del bit sobre el que se va a operar

f = dirección de 7 bits del archivo de registros.

Operaciones con literales y de control

Formato general:

k : Literal = Valor de un operando de 8 bits

Formato para CALL y GOTO:

k : Literal = Valor de un operando de 8 bits

 Organización de la memoria del PIC

Los PIC tienen dos tipos de memoria: Memoria de Datos y Memoria de programa, cada bloque con su propio bus: Bus de datos y Bus de programa; por lo cual cada bloque puede ser accesado durante un mismo ciclo de oscilación.

La Memoria de datos a su vez se divide en

- Memoria RAM de propósito general

- Archivo de Registros (Special Function Registers (SFR))

.- La Memoria de Programa

Los PIC de rango medio poseen un registro Contador del Programa (PC) de 13 bits, capaz de direccionar un espacio de 8K x 14, como todas la instrucciones son de 14 bits, esto significa un bloque de 8k instrucciones. El bloque total de 8K x 14 de memoria de programa está subdividido en 4 páginas de 2K x 14. En la siguiente figura se muestra esta organización.
 

Observación1: No todos los PIC tienen implementado todo el espacio de 8K de memoria de programa (Consultar las hojas de datos del PIC específico).
Observación2: El fabricante puede grabar datos de calibración en localidades de memoria de programa por lo que se deberán anotar en papel antes de borrar los dispositivos con ventana transparente.

Vector de Reset.- Cuando ocurre un reset el contenido del PC es forzado a cero, ésta es la dirección donde la ejecución del programa continuará después del reset, por ello se le llama “dirección del vector de reset”.

Vector de interrupción.- Cuando la CPU acepta una solicitud de interrupción ejecuta un salto a la dirección 0004h, por lo cual a ésta se le conoce como “dirección del vector de interrupción”. El programador deberá colocar en esta dirección la Rutina de Atención a la Interrupción (Interrupt Service Routine (ISR))., o bien un salto al inicio de ella.

El registro PCLATH no es modificado en esta circunstancia, por lo cual habrá que tener cuidado al manipular el registro PC (saltos y llamadas a subrutina) dentro de la Rutina de Atención a la Interrupción Manejo del Contador del Programa (PC)

El registro contador del programa (PC) especifica la dirección de la instrucción que la CPU buscará (fetch) para ejecutarla. El PC consta de 13 bits, separados en dos partes: como se muestra en la figura siguiente
alto es llamado registro PCH. Este último contiene los bits PC<12:8> y no se puede leer o escribir directamente Todas las actualizaciones al registro PCH deben ser hechas a través del registro PCLATH.

En la siguiente figura se ilustran las cuatro situaciones y las maneras correspondientes en que el PC puede ser actualizado.
Paginación

Para saltar entre una página y otra, los bits más significativos del PC deberán ser modificados. Debido a que las instrucciones GOTO y CALL sólo pueden direccionar un bloque de 2K (pues usan una dirección de 11 bits) deben existir otros dos bits que acompleten los 13 bits del PC para moverse sobre los 8K de memoria de programa.

Estos dos bits extra se encuentran en un SFR denominado PCLATH (Program Counter Latch High) en sus bits PCLATH<4:3>. Por esto antes de un GOTO o un CALL el usuario deberá asegurarse que estos bits apunten a la página deseada.

Si las instrucciones se ejecutan secuencialmente el PC cruza libremente los límites de página sin necesidad de que el usuario escriba en el PCLATH

Memoria de Stack

La memoria de stack es una area de memoria completamente separada de la memoria de datos y la memoria de programa. El stack consta de 8 niveles de 13 bits cada uno. Esta memoria es usada por la CPU para almacenar las direcciones de retorno de subrutinas. El apuntador de stack no es ni leíble ni escribible.

Cuando se ejecuta una instrucción CALL o es reconocida una interrupción el PC es guardado en el stack y el apuntador de stack es incrementado en 1 para apuntar a la siguiente posición vacía. A la inversa, cuando se ejecuta una instrucción RETURN, RETLW o RETFIE el contenido de la posición actual del stack es colocado en el PC y el apuntador de stack es decrementado en 1.

􀂾 Nota 1: PCLATH no se modifica en ninguna de estas operaciones

􀂾 Nota 2: Cuando el apuntador de stack ya está en la posición 8 y se ejecuta otro CALL se reinicia a la posición 1 sobrescribiendo en dicha posición. No existe ningún indicador que avise de esta situación. Así que el usuario deberá llevar el control para que esto no ocurra.

 La Memoria de Datos

La memoria de datos consta de dos áreas mezcladas y destinadas a funciones distintas:

• Registros de Propósito Especial (SFR)

• Registro de Propósito General (GPR)

Los SFR son localidades asociadas específicamente a los diferentes periféricos y funciones de configuración del PIC y tienen un nombre específico asociado con su función. Mientras que los GPR son memoria RAM de uso general. Bancos de memoria

Toda la memoria de datos está organizada en 4 bancos numerados 0, 1, 2 y 3.

Para seleccionar un banco se debe hacer uso de los bits del registro STATUS<7:5> denominados IRP, RP1 y RP0. Hay dos maneras de acceder a la memoria de datos: Direccionamiento directo e indirecto. La selección de bancos se basa en la siguiente tabla
Cada banco consta de 128 bytes (de 00h a 7Fh). En las posiciones más bajas de cada banco se encuentran los SFR, y arriba de éstos se encuentran los GPR. Toda la memoria de datos está implementada en Ram estática.

Direccionamiento Directo

Para acceder una posición de memoria mediante direccionamiento directo, la CPU simplemente usa la dirección indicada en los 7 bits menos significativos del código de operación y la selección de banco de los bits RP1:RP0 como se ilustra en la siguiente figura.
Direccionamiento indirecto

Este modo de direccionamiento permite acceder una localidad de memoria de datos usando una dirección de memoria variable a diferencia del direccionamiento directo, en que la dirección es fija. Esto puede ser útil para el manejo de tablas de datos.

El registro INDF.- En la figura anterior se muestra la manera en que esto se realiza. Para hacer posible el direccionamiento indirecto se debe usar el registro

INDF. Cualquier instrucción que haga un acceso al registro INDF en realidad accesa a la dirección apuntada por el registro FSR (File Select Register).

La selección de banco en el caso de direccionamiento indirecto se realiza mediante los bits IRP (STATUS<7>) y el bit 7 del registro FSR, como se muestra en la figura.

El registro INDF mismo al leerse de manera indirecta (con FSR=0) producirá un cero. Y al escribirse de manera indirecta no es afectado.

A continuación se muestra un ejemplo del uso de este direccionamiento para limpiar las localidades RAM 20h a 2Fh.
En el siguiente ejemplo se muestra la manera como se switchea mediante instrucciones dentro del programa de un banco a otro
El Archivo de Registros

Aunque el archivo de registros en RAM puede variar de un PIC a otro, la familia del PIC16F87x coincide casi en su totalidad. En la siguiente figura se muestra a detalle el mapa de este archivo de registros y su organización en los cuatro bancos que ya se describieron.
 
Cada uno de los registros de propósito especial, está asociado a un dispositivo interno del μcc. En el siguiente capítulo se tratará con detalle el uso de cada uno de estos dispositivos y de los registros asociados a él.
 
Informacion obtenida de : http://www.bairesrobotics.com.ar/data/pic16f877-guia%20detallada%20parte2.pdf

No hay comentarios:

Publicar un comentario