Anda di halaman 1dari 8

LICEO PROF.

LADISLAO LEIVA
3º AÑO ELECTRONICA
TEMA: SALTOS Y SUBRUTINAS

EL MANEJO DE SUBRUTINAS

La programación en los Microcontroladores tienden a ser de una forma


modular; cada tarea específica es realizada por un “modulo” determinado.
Trataremos esta técnica para realizar códigos de programa más cortos y
eficaces.

Subrutinas

Algunas veces el mismo grupo de instrucciones es ejecutado en diferentes


partes de un programa. Según el procedimiento planteado hasta el
presente, cada vez que dicho tramo de programa es requerido deberá
insertarse dentro del programa principal tantas veces como éste sea
necesario. Sin embargo, aunque esta parezca la forma más directa de
atacar el problema, la mayoría de las veces es la más ineficiente, ya que
requiere mayor extensión de los programas y, consecuencia, mayor
utilización de la memoria ROM de programa del Microcontrolador. El flujo del
programa resulta meramente secuencial.

Como una subrutina conceptualmente queda fuera del flujo secuencial del
programa principal, son necesarios ciertos mecanismos para poder llegar a
ella y, una vez que se ha ejecutado las instrucciones que la componen, debe
ser posible regresar al punto donde quedó la ejecución del programa.

La acción de pasar del programa principal a la subrutina se denomina


“llamada a la subrutina” y se realiza con la instrucción call que se debe
intercalar en el programa principal. La subrutina finaliza con la instrucción
return “retorno de subrutina” ocurre un nuevo retorno al programa
principal.

La principal ventaja de las subrutinas es que la extensión de los programas


se hace mucho mas corta. Una desventaja es que el uso de las subrutinas
provoca una ejecución más lenta del programa debido que se tienen que
ejecutar dos instrucciones extras call y return cada vez que se realiza una
llamada y el obligatorio retorno de subrutina.
Subrutinas Anidadas

Cuando una subrutina llama a otra subrutina se produce la situación


conocida como anidamiento de subrutinas, es decir, hay subrutinas
anidadas dentro de otras. Cada call sucesivo sin que intervenga un return
crea un nivel de anidamiento adicional. El nivel de anidamiento está
limitado por el Microcontrolador a 8.

Librería de Subrutinas

Es frecuente necesitar más de una subrutina en los programas. También es


habitual que algunas subrutinas se utilicen en varios programas. En estos
casos es conveniente disponer de bibliotecas de subrutinas denominadas
librerías.

En cada programa se cargan las subrutinas que se precisen. El ensamblador


MPLAB dispone de una directiva denominada INCLUDE que realiza esta
función “pegando” el fichero de referencia en el programa. Dicho fichero se
inserta en el código durante el proceso de ensamblado.

El formato de la directiva INCLUDE es:


INCLUDE <include archivo>

El archivo especificado por <include archivo> es leído como un fichero


fuente.

La directiva más usada hasta ahora en los laboratorios es:

INCLUDE <P16F873A.INC>

Con esta directiva lo que se hace es añadir al programa la definición de los


registros de SFR y de sus bits.

La instrucción retlw (Return with Literal in W), funciona de forma similar


que return, produce el retorno de una subrutina pero con un valor en el
registro W. El formato de la instrucción es: retlw k, donde k es una
constante que se carga en el registro de trabajo W.

Subrutinas de Retardo

En la mayoría de los proyectos es necesario controlar el tiempo que tardan


en ejecutarse algunas acciones.

Ciclo Máquina

El tiempo que tarda en ejecutarse un programa depende de la frecuencia


del oscilador conectado al Microcontrolador y del número de ciclos máquina
ejecutados. Un ciclo máquina es la unidad básica de tiempo que utiliza el
Microcontrolador. Las instrucciones en el Microcontrolador necesitan 1 ciclo
máquina para ejecutarse, excepto las de salto (goto, call, btfss, btfsc,
return, etc) que necesitan dos ciclos máquina.

El tiempo que tarda el Microcontrolador en ejecutar una tarea viene fijado


por la formula siguiente:

Siendo:

F: la frecuencia del oscilador


cm: el número de ciclos máquina que tarda en ejecutar la tarea

Ejemplo: calcular la duración de 1 ciclo de máquina para un


Microcontrolador que utiliza un cristal de cuarzo de 4 MHz. Aplicando la
ecuación, para un sistema con un oscilador a cristal de cuarzo de 4MHz, el
ciclo máquina tiene una duración de 1μs (se lee un microsegundo)

Ejemplo: calcular el tiempo que tarda en ejecutarse la instrucción call si el


sistema funcionase con un cristal de 4 MHz. Al tratarse de un salto esta
instrucción dura dos ciclos máquina, por tanto, el tiempo que tarda en
ejecutarse aplicando la formula es 2 μs

La instrucción NOP (No Operation) no realiza operación alguna. En realidad,


consume un ciclo máquina sin hacer nada. Se utiliza para hacer gastar
tiempo.

Un ejemplo típico de subrutina de retardo puede ser el siguiente


fragmento de programa:

Diagrama de Flujo de la subrutina anterior


Podemos deducir que el valor de la constante ‘K’ con el que se ha cargado
inicialmente el contador R_ContA vendrá dado por la siguiente ecuación,
donde el tiempo viene expresado en μs:

Ejemplo. Calcular el valor de la constante K, para obtener una subrutina de


retardo de 500 μs con la estructura algorítmica anterior. Aplicando la
ecuación se obtiene que K = 123,7 es decir 123. Si adicionamos tres
instrucciones nop al principio de la subrutina de retardo obtenemos un
ajuste fino para los 500 μs exactos.

Diagrama de Flujo de una Subrutina de retardo con dos lazos anidados:


GUIA 1.

El siguiente programa ejemplo se aplican algunos conceptos anteriores.

Cree un archivo nuevo en MPLAB y nómbrelo RETARDOS.INC


Cree un segundo archivo nuevo en MPLAB y nómbrelo GUIA_1.ASM
1. Ensamble el anterior programa usando el MPLAB y ejecútelo en el
Simulador.

2. Programe el Microcontrolador usando el IC-Prog y realice pruebas en el


Entrenador.

Anda mungkin juga menyukai