Está en la página 1de 5

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES <

Organizacin De La Memoria
Gutirrez Cceres, Edgar Andrs, edggutierre@uniboyaca.edu.co

I. INTRODUCCIN

AS practicas de los primeros laboratorios se realizan sobre sistemas bsicos en los que se utiliza como entrada unos interruptores y cuya salida se aplica a unos LED. Es posible que el estudiante desee adaptar estas prcticas para su proyecto utilizando otros tipos de perifricos como los explicados en este artculo. En este libro se ha procurado utilizar componentes fcilmente localizables en cualquier tienda de electrnica. Si el estudiante desea buscar las caractersticas tcnicas de versiones concretas, o adquirir componentes que en su tienda habitual no le es posible encontrar, puede intentarlo en las siguientes direcciones de Internet: www.amidata.es, www.telkron.es, www.datasheetcatalog.net, www.farnell.com II. ARQUITECTURA INTERNA DEL PIC16F877 La Fig.1. Representa el diagrama de bloques del PIC 16F877. Se destacan los siguientes componentes que sern explicados ms adelante: Memria de Programa tipo ROM Flash de 8k x 368 bytes. Memria de datos dividida en 2 reas: rea RAM constituda por 77 registros de propsito especifico (SFR) y 368 de propsito general. rea EEPROM de datos formada por 256 registros de 8 bits.

Fig. 1. Arquitectura interna del PIC16F877A

ALU (Arithmetic Logic Unit) de 8 bits y registro de trabajo W, del que normalmente recibe un operando que puede ser cualquier registro, memoria, puerto de entrada/salida o el propio cdigo de instruccin. Cinco puertos para a comunicacin con el mundo exterior: PORTA de 6 bits RA5:RA0, PORTB de 8 bits RB7:RB0, PORTC de 8 bits RC7:RC0, PORTD de 8 bits RD7:RD0, PORTE de 3 bits RE2:RE0. Contador de programa de 13 bits, lo que en teora permitira direccionar 8k de palabras de memoria. III. ORGANIZACIN DE LA MEMORIA

Dentro del PIC16F877 se distinguen tres bloques de memoria: A. Memoria de programa En sus 1024 posiciones contiene el programa con las instrucciones que gobiernan la aplicacin. Es del tipo voltil, es decir, el programa se mantiene aunque desaparezca la alimentacin.

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES < B. Memoria de datos RAM Se destina aguardar las variables y datos. Es voltil, es decir, los datos almacenados se borran cuando desaparece la alimentacin. C. Memoria EEPROM de datos Es una pequea rea de memoria de datos de lectura y escritura no voltil, gracias a la cual, un corte del suministro de la alimentacin no ocasiona la prdida de la informacin, que estar disponible al reinicializarse el programa. IV. MEMORIA DE PROGRAMA El microcontrolador est diseado para que en su memoria de programa se almacenen todas las instrucciones del programa de control. El programa a ejecutar siempre es el mismo, por tanto, debe estar grabado de forma permanente. Esta caracterstica de no volatilidad garantiza que la memoria mantenga su contenido an sin alimentacin, de forma que el programa no necesite volver a ser cargado en el sistema cada vez que se utilice. La informacin contenida en estas memorias debe ser grabada previamente mediante un equipo fsico denominado Programador o Grabador. Este equipo se debe conectar a un ordenador que mediante un software controla la grabacin de la memoria de programa del microcontrolador. A este proceso se la llama Programar o grabar el microcontrolador. El PIC16F877 es un microcontrolador con un tipo de memoria de programa no voltil denominada ROM Flash, que permite una grabacin muy cmoda, lo que representa una gran facilidad en el desarrollo de diseos. La memoria del programa del PIC16F877 tiene una capacidad de 8k (8192 posiciones) y est organizada en palabras de 14 bits. Asi pues, la memoria de programa comienza en la posicin 000H (posicin inicial del reset) y llega hasta la 3FFH. El PIC16F877 permite unas 1000 grabaciones y el fabricante garantiza que la informacin permanece durante varias decenas de aos. V. EL CONTADOR DE PROGRAMA (PC) Un programa est compuesto por instrucciones que generalmente se ejecutan de forma secuencial. En el PIC16F877 cada una de esas instrucciones ocupa una posicin de memoria de programa. El Contador de Programa (Program Counter) es un registro interno que se utiliza para direccionar las instrucciones del programa de control que estn almacenadas en la memoria de programa (Fig.1.). Este registro contiene la direccin de la prxima instruccin a ejecutar del programa es lineal, una instruccin despus de otra. El microcontrolador PIC16F877 dispone de un contador de programa que le permite direccionar los 8k x 14 bits de memoria de programa implementada, desde la posicin 000H hasta la 3FFH. Cuando el microcontrolador se conecta a la alimentacin o cuando ocurre un reset, el contador de programa se pone a cero forzando as que la direccin de inicio sea la 000H. La

primera instruccin ejecutada ser la que est grabada en esta posicin. VI. MEMORIA DE DATOS

Tabla. 1. Registros SFR y ubicacin de los GPR

En esta memoria se almacenan los datos que se manejan en un programa. Estos datos varan continuamente, por lo que esta memoria debe ser de lectura y escritura. Se utiliza memoria denominada RAM. Esta memoria es de tipo voltil, los datos se borran en caso de que desaparezca la alimentacin. La Tabla.1. Muestra la estructura de la memoria de datos RAM del PIC16F877 donde se aprecia dos partes: A. Registros de Funciones Especiales SFR (Special Function Register). Son los primeros registros, cada uno de ellos cumple un propsito especial en el control del microcontrolador. B. Registros de Propsito General GPR (General Purpose Registers). Son registros de uso general que se pueden usar para guardar los datos temporales del programa que se est ejecutando. Tiene 368 posiciones para el PIC16F877. La memoria de datos cuenta con cuatro bancos de memoria, Banco 0, Banco 1, Banco 2 y Banco 3: Los registros del SFR estn agrupados entre las direcciones 00H y 1FH para el Banco 0, entre 80H y 9FH para el Banco 1, entre 100 y 10F para el Banco 2 y entre 180H y 18FH para el Banco 3. Algunos de los registros

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES < del SFR se encuentran duplicados en la misma direccin en los dos Bancos, con el objeto de simplificar su acceso. Asi por ejemplo, el registro STATUS se localiza en las direcciones 03H (Banco 0) y 83H (Banco 1). El banco de registros de propsito general est formado por 68 posiciones de memoria, ya que solo son operativas las del Banco 0 (direcciones desde 20H hasta la 7FH), por que las del Banco 1 se mapean sobre el Banco 1 (direcciones de A0H hasta EFH), realmente se accede al mismo registro del Banco 0. Para seleccionar el Banco a acceder hay que configurar el Bit 5 (RP0) del registro STATUS. Con RP0=0 se accede al Banco 0 y con RP0=1 se accede al Banco 1. El Banco 0 es seleccionado automticamente despus de un Reset. Las zonas de memoria 50H 7FH y D0H FFH no son empleadas y devuelven 0 en caso de lectura. VII. DIFERENCIAS ENTRE EL PIC16F877A Y PIC16C877A El microcontrolador PIC16C877A es un microcontrolador anterior al PIC16F877A y totalmente compatible con l, la diferencia principal es que su memoria de datos tiene menor tamao. El PIC16C877A tiene 32 registros de propsito general (El mapa de memoria de datos llega hasta 2FH) frente a los 68 registros disponibles en el PIC16F877A. El PIC16C877A fue reemplazado por el PIC16F877A de modo que los diseos que lo utilicen como elemento de control deben ser actualizados. Este proceso es transparente, se puede sustituir uno por otro sin realizar ningn tipo de modificacin en la mayora de las aplicaciones. VIII. REGISTROS DEL SFR La Tabla.1., detallada los registros de funciones especiales SFR (Special Function Registers). Por ahora se destacan los siguientes: A. Registros Relacionados Con los Puertos Los registros relacionados directamente con los puertos son: PORTA, en posicin 05H del Banco 0. Puerto de Entrada/Salida de 5 bits (pines RA4:RA0). El puerto A puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (Entrada o Salida) de sus pines se llama TRISA y est localizado en la direccin 85H del Banco 1. PORTB, en posicin 06H del Banco 0. Puerto de Entrada/Salida de 8 bits (pines RB7:RB0). El puerto B puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (Entrada o Salida) de sus pines se llama TRISB y est localizado en la direccin 86H del Banco 1. PORTC, en posicin 07H del Banco 0. Puerto de Entrada/Salida de 8 bits (pines RC7:RC0). El puerto B puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (Entrada o

Salida) de sus pines se llama TRISC y est localizado en la direccin 87H del Banco 1. PORTD, en posicin 08H del Banco 0. Puerto de Entrada/Salida de 8 bits (pines RD7:RD0). El puerto B puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (Entrada o Salida) de sus pines se llama TRISD y est localizado en la direccin 88H del Banco 1. PORTE, en posicin 08H del Banco 0. Puerto de Entrada/Salida de 8 bits (pines RE7:RE0). El puerto B puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (Entrada o Salida) de sus pines se llama TRISE y est localizado en la direccin 89H del Banco 1. TRISA, posicin 85H del Banco 1. Registro de configuracin de las lneas del Puerto A. Es el registro de control para el Puerto A. Un 0 en el Bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada. TRISB, posicin 86H del Banco 1. Registro de configuracin de las lneas del Puerto A. Es el registro de control para el Puerto A. Un 0 en el Bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada. TRISC, posicin 87H del Banco 1. Registro de configuracin de las lneas del Puerto A. Es el registro de control para el Puerto A. Un 0 en el Bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada. TRISD, posicin 88H del Banco 1. Registro de configuracin de las lneas del Puerto A. Es el registro de control para el Puerto A. Un 0 en el Bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada. TRISE, posicin 89H del Banco 1. Registro de configuracin de las lneas del Puerto A. Es el registro de control para el Puerto A. Un 0 en el Bit correspondiente al pin lo configura como salida, mientras que un 1 lo hace como entrada.

B. Registro PCL y Contador de Programas El PIC16F877A dispone de un contador de programa de 13 bits constituido por dos registros (Fig.2.):

Fig. 2. Composicin del Contador de Programa (PC, Program Counter)

PCL (Program Counter Low Byte), implementado en la posicin de memoria RAM 02H (y duplicado en la posicin 82H del banco 1). Su contenido corresponde

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES < con los 8 bits ms bajo del contador de programa. Este registro puede ser ledo o escrito directamente. PCH (Program Counter High Byte). Los cinco bits de mayor peso del PC corresponden con este registro. No puede ser ledo ni escrito directamente.

C=1. En la suma significa que ha habido acarreo y en la resta que el resultado ha sido positivo. DC (Digit Carry). Flag de acarreo de 4 bit de menos peso. En operaciones aritmticas se activa cuando hay un acarreo entre el bit 3 y 4, es decir, cuando hay acarreo entre los nibbles de menor y de mayor peso. Z (Zero). Flag de cero. Se activa a 1 cuando el resultado de una operacin aritmtica o lgica es cero. Z=0. El resultado de la ltima operacin ha sido distinto de cero. Z=1. El resultado de la ltima operacin ha sido cero. RP0 (Register Bank Select Bit). Seleccin del Banco para el direccionamiento directo. Seala el Banco de memoria de datos seleccionado. RP0=0. Selecciona el Banco 0. RP0=1. Selecciona el Banco 1. XI. ESTADO DE LOS REGISTROS TRAS UN RESET

Durante la ejecucin normal del programa el PCL se incrementa con cada instruccin, a menos que se trate de alguna instruccin de salto. Al conectar la alimentacin se inicializa a (PCL) = b00000000 y (PCH) = b00000. Los 13 bits del contador de programa le permiten direccionar hasta 8 k x 14 bits. Sin embargo, el PIC16F877A dispone tan slo de 1k x 14 bits de memoria implementada, desde la posicin 000H hasta 3FFH. Los 3 bits de mayor peso del PC no los tiene en cuenta, as por ejemplo, las direcciones 30H, 430H, 830H, C30H, 1430H, 1830H y 1C30H se consideran la misma. IX. REGISTRO DE TRABAJO El Registro de Trabajo W (Work) es el registro principal y participa en la mayora de las instrucciones. Se localiza dentro de la CPU del PIC16F877 como se aprecia en Fig. 1. La misma figura muestra como el microcontrolador posee una ALU (Arithmetic Logia Unit) de 8 bits. Esta se encarga de realizar las operaciones lgicas o aritmticas que requiere la ejecucin del programa con dos operandos, uno que proviene del registro W y el otro que se encuentra en cualquier otro registro o en el propio cdigo de instruccin. X. REGISTRO DE ESTADO O STATUS El Registro de estado o STATUS ocupa la posicin 03H del Banco 0 o la 83H del Banco 1 y es uno de los registros ms importantes y utilizados. Los bits de este registro indican el estado de la ltima operacin aritmtica o lgica realizada, la causa de reset y los bits de seleccin de banco para la memoria de datos. A los Bits del registro de estado se les suele denominar Flags o banderas. Su constitucin interna se muestra en la Tabla 2. a continuacin se explican sus bits principales. IRP Bit 7 RPI Bit 6 RP0 Bit 5 /T0 Bit 4 /PD Bit 3 Z Bit 2 DC Bit 1 C Bit 0

Tabla. 3. Estado de Algunos Registros Despus de los Distintos Tipos de Reset

Despus de un reset, los registros se encontrarn en el estado que se indica en la Tabla 3., en la que las dos primeras columnas muestran los datos ms importantes, que son: Conexin a la alimentacin. Estado de los registros inmediatamente despus de conectar la alimentacin. MCLR modo normal. Estado de los registros despus de llevar el pin MCLR a masa en funcionamiento normal

Tabla. 2. Registros de estado o STATUS

C (Carry Bit). Flag de acarreo en el octavo bit. En Instrucciones de suma aritmtica se activa cuando se presenta acarreo desde el bit ms significativo del resultado, lo que indica que el resultado ha desbordado la capacidad del registro sobre el que se trabaja, es decir, el resultado de la operacin ha superado el valor 111111112 (25510 ) , que es el mximo valor que se puede representar con 8 bits. El significado de los dos valores posibles es: C=0. En la suma significa que no ha habido acarreo y en la resta que el resultado ha sido negativo.

XII. REGISTRO DE CONFIGURACIN El PIC16F877A dispone de una palabra de configuracin (Configuration Word) de 14 bits que se escribe durante el proceso de grabacin del microcontrolador y que no se puede modificar durante la ejecucin de un programa. Dichos Bits ocupan la posicin reservada de memoria de programa 2007H. La Tabla.4., muestra la estructura de la palabra de

> UNIVERSIDAD DE BOYACA FACULTAD DE INGENIERA MECATRONICA MICROCONTROLADORES < configuracin o pagina 122 Datasheet (http://www.Datasheetcatalog.com.) PIC16F877A

Tabla. 4. Registro de Configuracin.

La Palabra ID de configuracin tiene por defecto todos sus Bits a 1. Por tanto, si no se especifica otra cosa, la configuracin adoptada por defecto es: oscilador de bajo coste RC, Watchdog habilitado, temporizador Power Up deshabilitado y sin proteccin de lectura del cdigo grabado en la memoria de programa. Fig.4.

FOSC<1:0> (Flag Oscilador Selection). Seleccin del tipo de oscilador: FOSC=00. Oscilador de bajo consumo LP (32KHz 200KHz) FOSC=01. Oscilador estndar XT (100KHz 4MHZ) FOSC=10. Oscilador de alta velocidad HS (4MHz 20MHz) FOSC=11. Oscilador de bajo coste RC.
Fig. 4. ID Memoria

WDTE (Watchdog Enable). Bit de habilitacin del Watchdog. WDTE=0. Watchdog deshabilitado. WDTE=0. Watchdog habilitado.

XIII. PARA INVESTIGAR Microprocesador, Microcontrolador, Arquitectura de Von Neumann, Arquitectura Harvard, Procesador Segmentado, Procesador RISC, Arquitectura Ortogonal, Puertos. REFERENCIAS
[1] [2] [3] [4] [5] PALACIOS ENRIQUE, Microcontroladores PIC16F877A Ed 3. Madrid, 2009. www.Datasheetcatalog.com, Hoja de especificaciones PIC16F877. www.microchip.com, Empresa dedicada a la construccin de dispositivos electrnicos. Adems encontrara el instalador MPLAB IDE. Software Proteus 7.5 V. Software MPLAB 8.43 V.

PWRTE (Power Up Timer Enable). Activacin del temporizador Power Up. PWRTE=0. Temporizador Power Up habilitado. PWRTE=1. Temporizador Power Up deshabilitado.

CP (Code Protection Bit). Bit de Proteccin de Cdigo. CP=0. Toda la memoria de programa est protegida contra lecturas indeseables. CP=1. La memoria de programa se puede leer. No est protegida.

Durante la grabacin de la palabra de configuracin tambin se graban los identificadores ID que permiten conocer el programa, versin o cliente, correspondiente a esa grabacin. Hay cuatro registros identificadores de 14 Bits cada uno, pero slo se utilizan cuatro Bits de menor peso de cada uno de ellos. Su distribucin es 11 1111 1000 xxxx, siendo x los bits en los cuales se asigna la identificacin particular. Tanto el registro Configuration Word como los identificadores se pueden programar con el MPLAB dentro del rea de Configuracin, en Fig.3.

Fig. 3. Opciones de configuracin en el MPLAB