User: alciro    User
 

Microcontroladores 8051

Share |

5.4. Subrutina o subprograma

Una subrutina o subprograma en una sección o parte de programa separado del programa principal que puede ser llamado para realizar una función específica. La subrutina puede ser requerida por el programa principal u otra subrutina tantas veces como sea necesario. Cuando se llama a una subrutina la ejecución del programa en curso se detiene, el contador de programa PC (program counter) se carga con la posición de memoria de la subrutina, ejecutándose hasta llegar a la instrucción RET (final de subrutina), donde se produce el retorno al programa principal reanudándose su ejecución. El los lenguajes de nivel alto como C, Basic se conoce a las subrutinas con el nombre funciones o procedimientos.

En las subrutinas se han de tener en cuenta las siguientes consideraciones:

  • Realizan funciones concretas y no son operativas por si mismas.
  • Siempre están ligadas a un programa principal o a otras subrutinas.
  • Pueden ser llamadas tantas veces como sea necesario por lo que se reduce el código el programa al tener el efecto de reutilización de código.
  • Permiten la división del programa en bloques por lo que realizan la función de estructuración. Proporcionando mayor visibilidad y comprensión del mismo.

Como buen consejo, se recomienda siempre que sea posible la división del programa en subrutinas o subprogramas y se minimice el contenido de sentencias en el programa principal. Sobre todo, las subrutinas son necesarias cuando una parte de un programa se ha de ejecutar múltiples veces. Conseguiremos que el programa se mas sencillo y que ocupe menos espacio en la ROM.

Si una subrutina está formada por pocas instrucciones, puede ser no aconsejable crearla, ya que el mecanismo de llamada y retorno puede hacer que sea más lenta su ejecución que situar las instrucciones directamente en el programa principal.

Subrutina o subprograma en sensamblador

Instrucción CALL

Llamada a una subrutina. El contador de programa es substituido por la dirección indicada donde se continúa con la ejecución. El contenido del PC (siguiente posición en curso) se guarda en el Stack.

LCALL Dir


(PC) = (PC)+3Lee la instrucción y el contador del programa PC apunta a la siguiente

(SP) = (SP)+1Guarda en el Stack el contador de programa PC que se encuentra apuntando a la siguiente instrucción

((SP)) = (PC7-0)

(SP) = (SP)+1

((SP)) = (PC15-8)

(PC) = Addres15-0El control del programa es transferido a la instrucción cuya dirección está especificada en los bytes 2 y 3 de la instrucción CALL actual

 

Instrucción RET

Retorno de subrutina. Se recupera del stack el contador del programa PC y se continúa la ejecución del programa en la siguiente instrucción de la llamada a la subrutina CALL.

RET


(PC15-8) = ((SP))Se recupera el contador del programa PC de la memoria de Stack

(SP) = (SP)-1

(PC7-0) = ((SP))La ejecución del programa se reanuda en la siguiente posición a la llamada a la subrutina

(SP) = (SP)-1

Anidamiento de subrutinas

Anidamiento de subrutinas
Loading

copyright © 2007-2024  www.alciro.org  All rights reserved.         
Share |