Mostrando las entradas con la etiqueta Memoria STACK en microcontroladores PIC.. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Memoria STACK en microcontroladores PIC.. Mostrar todas las entradas

sábado, 26 de agosto de 2017

XiuaElectronics: Memoria STACK en Microcontroladores PIC16F628A.

Memoria STACK en Microcontroladores PIC16F628A.


Que tal amigos?

En el día de hoy vamos a hablar de algo muy importante a la hora de programar microcontroladores PIC, en este caso me refiero a su memoria STACK. ¿Pero que es su memoria STACK? ¿Porqué es importante la memoria STACK?


Memoria STACK:

En los microcontroladores pic la memoria STACK, es una memoria interna dedicada, de un tamaño limitado dependiendo el microcontrolador, de diferentes niveles y distinta de las memorias dedicadas para el almacenamiento de datos y como tal del programa del microcontrolador. Esta memoria es inaccesible para el programador y esta organizada en forma de pila, y usualmente se utiliza de forma automática por el microcontrolador para guardar las direcciones de retorno de subrutinas e interrupciones. Cada posición es de 13 bits para el caso del pic16f628a, microcontrolador PIC utilizado en el curso Curso Proteus 8.5 + MPASM y PIC16F628A y permite guardar una copia completa del PC. Como en toda memoria tipo pila, los datos son accedidos de manera tal que el primero que entra es el ultimo que sale.


STACK PIC16F628A:


La familia PIC16F627A / 628A / 648A tiene una pila de hardware de 8 niveles de profundidad x 13 bits (Figura 4-1). El espacio de pila no forma parte del espacio de programa o de datos y el puntero de pila no es legible ni puede escribirse. El PC es PUSHed en la pila cuando se ejecuta una instrucción CALL o una interrupción causa una rama. La pila es POPed en el caso de una ejecución de la instrucción RETURN, RETLW o RETFIE. PCLATH no se ve afectado por una operación PUSH o POP.


Como ya se menciono anteriormente, el stack y el puntero interno que lo direcciona, son invisibles para el programador, solo se los accede automáticamente para guardar o rescatar las direcciones de programa cuando se ejecutan las instrucciones de llamada o retorno de subrutinas, o cuando se produce una interrupción o se ejecuta una instrucción de retorno de ella

La pila funciona como un amortiguador circular. Esto significa que después de que la pila ha sido PUSHed ocho veces, la novena PUSH sobrescribe el valor que fue almacenado desde el primer PUSH. El décimo PUSH sobrescribe el segundo PUSH (y así sucesivamente). 




Nota 1: No hay bits de estado para indicar el desbordamiento de la pila o las condiciones de desbordamiento de la pila.

Nota 2: No hay instrucciones / mnemónicos llamados PUSH o POP. Estas son acciones que ocurren desde la ejecución de las instrucciones CALL, RETURN, RETLW y RETFIE, o la vectorización a una dirección de interrupción.










Para tener en cuenta lo que hacen los niveles de profundidad del STACK es el permitir el anidamiento de subrutinas; por ejemplo para el PIC16f628A le es posible realizar 8 niveles de anidamiento de subrutinas que serían llamadas desde el programa principal.



Acá vemos como el programa principal llama a la primera subrutina "Subrutina1" y esta llama a "Subrutina2", así sucesivamente hasta las "Subrutina8". Pero si en la subrutina "Subrutina8" se intentara llamar a otra subrutina se desbordaría la capacidad del STACK, que solo puede almacenar ocho direcciones de retorno.

Esto de hecho representa una traba para el programador y además parece impedir o dificultar la programación estructurada, sin embargo es una buena solución de compromiso ya que estos microcontroladores están diseñados para aplicaciones de alta velocidad en tiempo real, en las que el overhead (demoras adicionales) que ocasiona un excesivo anidamiento de subrutinas es inaceptable. Por otra parte existen técnicas de organización del programa que permiten mantener la claridad de la programación estructurada, sin necesidad de utilizar tantas subrutinas anidadas.







Bien muchachos, esto es todo por hoy; estén pendiente en mi canal, o de mi blog o de mi pagina de Facebook.

Esto es todo por hoy, Sigue mi blog y visita mi próxima entrada!

Cualquier duda, trabajo, tutoria personalizada por correo electronico o pagina en facebook:



Salu2...

.