Está en la página 1de 7

Organización de la memoria de un Microcontrolador.

La organización de la memoria en un microcontrolador como el PIC 16F877A es crucial para


comprender cómo se almacenan los datos y los programas en el dispositivo. El PIC 16F877A
es un microcontrolador con una arquitectura de memoria jerárquica que consta de diferentes
tipos de memoria. Aquí hay una descripción general de la organización de la memoria en el
PIC 16F877A:

Memoria de Programa (Flash):


La memoria de programa, también conocida como memoria Flash, es donde se almacenan las
instrucciones del programa que el microcontrolador ejecuta. En el caso del PIC 16F877A, la
memoria Flash tiene una capacidad de 14 KB y está organizada en palabras de 14 bits. Estas
instrucciones de programa se almacenan en direcciones de memoria específicas y se leen
secuencialmente por la unidad de control del microcontrolador durante la ejecución del
programa.
Es importante destacar que la memoria Flash en el PIC 16F877A es programable, lo que
significa que se puede escribir en ella durante la programación del microcontrolador,
permitiendo la modificación del software.
Almacena todas las instrucciones del programa en ejecución, que estará grabado de forma
permanente. La información contenida en esta memoria se graba previamente mediante un
equipo físico denominado programador o grabador. El PIC16F877 tiene una memoria de
programa no volátil denominada ROM Flash que admite unas 1000 grabaciones. La memoria
de programa está organizada en palabras de 14 bits cada una. Todas las instrucciones ocupan
una posición de memoria de programa. A la dirección 0 se accederá tras un RESET y a la
posición 4 tras una interrupción cualquiera
A la memoria de programa de los PIC16 (entre ellos los PIC16F87X) se accede mediante un
registro de 13 bits que actúa como puntero de la instrucción que se debe ejecutar en el
siguiente ciclo de instrucción. Este registro de 13 bits se denomina Contador de Programa
(Program Counter) y su acrónimo es PC.
Con este contador de programa de 13 bits se pueden direccionar 8K posiciones de memoria.
Debido a que la codificación de las instrucciones son de 14 bits y para aprovechar las ventajas
de la arquitectura Harvard, cada una de esas 8K posiciones corresponde a una instrucción y
por tanto, el contador de programa es capaz de direccionar 8K x 14 posiciones ó 8K
instrucciones. Como cada instrucción ocupa una posición de memoria resulta mucho más fácil
saber si un dispositivo tiene memoria de programa suficiente para una aplicación.

Los 8K de memoria de programa disponible están divididos en 4 páginas de 2K cada una (0h–
7FFh, 800h-FFFh, 1000h17FFh y 1800h-1FFFh). Esto es debido a que las instrucciones de
salto y llamada a subprograma permiten cargar sólo 11 bits en el PC (desplazamiento en 211
= 2K)
Si se están ejecutando instrucciones secuencialmente, el contador de programa pasará de una
página a otra sin necesidad de intervención por parte del usuario o programador. Para saltar
entre páginas de la memoria de programa los 2 bits más altos del PC deben modificarse. Esto
se realiza escribiendo en el registro PCLATH (es un registro situado en la memoria de datos).
PC y PCLATH
El PC de 13 bits se divide en dos registros: PCH (parte alta) y PCL (parte baja). El registro PCL
es uno más de los registros de RAM, pero PCH no es accesible directamente Cada vez que se
opere con PCL o se cargue el PC con 11 bits procedentes de un salto o llamada a subprograma,
un registro denominado PCLATH, aportará los bits que le falten al PC para llegar a los 13
(aporta 5 bits ó 2 bits). El PCLATH no es la parte alta del PC, sino que es un complemento al
PCL o a la dirección que aporta una instrucción de salto o llamada a subprograma

Contador de Programa
El contador de programa (PC) es un registro de 13 bits que se descompone en 2 registros: PCH
PCL 12 8 7 0 El byte bajo PC se denomina PCL y está disponible en la memoria de datos. Es un
registro que se puede leer y escribir directamente desde programa.

El “cuasibyte” alto PC se denomina PCH y no está disponible en la memoria de datos. Este


registro no se puede leer ni escribir directamente. La escritura debe realizarse usando como
registro intermedio el registro PCLATH que sí es un registro de 8 bits accesible en la memoria
de datos del microcontrolador. El contenido del registro PCLATH se transfiere a la parte alta
del PC en el momento en que se escribe en el registro PCL. También aporta dos bits al PC en
los saltos. Las instrucciones que modifican el PCL y que por tanto pueden modificar el PCH son
las siguiente: •

 Instrucciones que tengan el PCL como destino. Ej. MOVWF PCL


 Instrucciones GOTO
 Instrucciones CALL
La Pila Para Almacenar El Pc (Stack)
La pila permite almacenar las direcciones (PCs) a donde debe retornar el programa cuando se
finaliza una llamada a una subrutina o cuando se finaliza la ejecución de una rutina de
interrupción. Los microcontroladores de la familia PIC16 tienen una pila de 8 niveles x 13 bits,
que por tanto permite concatenar como máximo 8 saltos a subrutinas (CALLs) o ejecuciones
de rutinas de interrupción (salto a 0004h). El espacio de memoria para la pila no forma parte
de la memoria de programa ni de la memoria de datos que tiene el microcontrolador. Es un
espacio de memoria totalmente independiente. El puntero de pila no se puede leer ni escribir.
La pila es gestionada por el hardware. Al contrario que en otros micros, no se dispone de una
pila en RAM que se pueda gestionar por software (no hay inst.“PUSH” ni “POP”)
Memoria RAM (Random Access Memory):
La memoria RAM del PIC 16F877A se utiliza para almacenar datos temporales, variables y
registros necesarios durante la ejecución del programa. Esta memoria se divide en cuatro
bancos (Bank 0, Bank 1, Bank 2 y Bank 3), y cada banco contiene registros específicos. Cada
banco tiene una capacidad de 128 bytes y se accede a través de instrucciones de cambio de
banco.
Por ejemplo, si se necesita trabajar con un registro en particular, se debe especificar tanto la
dirección del registro como el banco al que pertenece. La RAM se borra cuando se apaga el
microcontrolador, lo que significa que los datos almacenados se pierden, a menos que se
guarden en la memoria EEPROM.
La memoria de datos está distribuida en 4 posibles bancos de 128 bytes cada uno. Por tanto, la
máxima cantidad de memoria disponible en los microcontroladores PIC16 es de 512 bytes. No
obstante, no están implementadas todas las posiciones de memoria en todos los bancos. Por
ejemplo, un PIC16F876 solo tiene implementadas 368 posiciones de memoria de datos
A cada posición de memoria se le denomina registro.

Almacena todas los datos que se manejan en un programa.


Se distinguen dos tipos de registro:

 Registros de funciones especiales SFR. Son los primeros registros. Cada uno de ellos
cumple un propósito especial en el control del PIC.
 Registros de propósito general GPR. Se pueden usar para guardar datos temporales. El
PIC16F877 dispone de 368.
Cuenta con cuatro bancos de memoria: Bancos 0, 1, 2 y 3. Los SFR aparecen de la dirección
00h a 1Fh del Banco 0, de 80h a 9Fh del Banco 1, de 100h a 10F en el Banco 2 y de 180h a
18Fh del Banco 3.
Algunos son accesibles desde dos o más bancos. Los GPR ocupan 368 posiciones de memoria.
Algunas posiciones de los Bancos 1 a 3 se mapean sobre el Banco 0. Existen zonas de
memoria no empleadas que devuelven ‘0’ en caso de lectura.
Modos De Direccionamiento De La Memoria De Datos
• La memoria de datos está distribuida en 4 posibles bancos de 128 bytes cada uno. Existen 2
modos de direccionamiento para acceder a cualquiera de las posiciones de la memoria de
datos:

 Direccionamiento directo: La posición de memoria con la que se trabaja viene


directamente definida en el código de la instrucción. •
 Direccionamiento indirecto: La posición de memoria con la que se trabaja viene
definida por el contenido de el registro FSR (Posición 04h, 84h, 104h ó 184h), es decir,
el registro FSR actúa como puntero de la posición de memoria con la que se pretende
operar.
Tanto para el direccionamiento directo como el indirecto la dirección completa (9 bits) no se
puede obtener del código de la operación (7 bits) o del registro FSR (8 bits). Para
direccionamiento directo, la dirección a operar se obtiene completando la dirección incluida
en el código de la instrucción con los bits RP1:RP0 del registro STATUS. (Ver tabla) Para
direccionamiento indirecto, la dirección se obtiene completando el contenido del registro FSR
con el bit IRP del registro STATUS. (Ver tabla).
Memoria EEPROM (Electrically Erasable Programmable Read-Only Memory):
La memoria EEPROM es no volátil y se utiliza para almacenar datos que deben mantenerse
incluso cuando se apaga el microcontrolador. En el PIC 16F877A, hay 256 bytes de memoria
EEPROM. A diferencia de la RAM, la EEPROM conserva la información aún cuando se corta la
energía. Se utiliza para almacenar configuraciones, calibraciones y datos importantes que
necesitan persistir a lo largo del tiempo.
Registros Especiales:
Además de la memoria convencional (Flash, RAM y EEPROM), el PIC 16F877A cuenta con
registros especiales que son fundamentales para su funcionamiento. Estos registros incluyen:

 Registros de propósito general: como el Registro W (Working register) utilizado para


operaciones aritméticas y lógicas.
 Registros de control de periféricos: controlan y configuran el comportamiento de los
periféricos integrados, como los registros de configuración de puertos (PORTx),
registros de temporizadores (TMRx) y registros de configuración de interrupciones
(INTCON).
 Registro de Estado (STATUS): que contiene banderas como el bit Z (Zero Flag), C
(Carry Flag), DC (Digit Carry/Borrow Flag) y los bits RP0 y RP1 (Bank Select bits)
para la selección de bancos de memoria.
Registros De Funciones Especiales Asociados Al Núcleo Del Microcontrolador- Registro Status

También podría gustarte