ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Sub Rutinas


Enviado por   •  2 de Junio de 2013  •  443 Palabras (2 Páginas)  •  265 Visitas

Página 1 de 2

Subrutinas

Una subrutina o subprograma es una parte de programa que hace algo concreto y se repite a menudo, para ahorrar memoria y esfuerzo y para hacer el programa mas comprensible se agrupa en forma de subrutina. Una subrutina se debe ejecutar siempre llamándola con la instrucción CALL y al final de dicha subrutina debe haber siempre un RETURN. El esquema de la derecha muestra como funcionan las subrutinas:

Durante el programa principal se llama varias veces a la subrutina SUBR (el nombre es lo de menos) con la instrucción CALL. Cuando el pic ejecuta una instrucción CALL se guarda en memoria la dirección de código de programa a la que tiene que retornar de tal forma que cuando se encuentra con la instrucción RETURN vuelve al programa principal donde lo dejó.

Una subrutina no solo puede ser llamada desde el programa principal, también puede hacerse desde otra subrutina (una subrutina que llama a otra subrutina) o desde una interrupción (enseguida las veremos).

El siguiente ejemplo muestra un programa que utiliza una subrutina de retardo a la que llama DELAY. Esta subrutina de retardo se hace decrementando el registro CUENTA2 desde FFh hasta 00h 16 veces (las veces que se decrementa CUENTA2 son contadas hacia atrás por CUENTA1) De esta forma se consigue perder tiempo (el tiempo perdido con esta subrutina depende de la frecuencia a la que opere el pic)

;**********************************

;* Este programa configura RB0 como salida*

;* y genera una intermitencia en dicha *

;* salida *

;**********************************

STATUS EQU 03H

TRISB EQU 06H

PORTB EQU 06H

CUENTA1 EQU 0CH ;Las variables que usemos siempre a

;partir de la dirección 0Ch

CUENTA2 EQU 0DH

F EQU 1

w EQU 0

ORG 00H

BSF STATUS,5 ;banco 1

BCF TRISB,0 ;RB0 como salida

BCF STATUS,5 ;banco 0

INICIO BSF TRISB,0 ;Pone a "1" RB0 (enciende)

CALL DELAY ;Llama a la subrutina de retardo

BCF TRISB,0 ;Cuando vuelve del retardo pone

;a "0" RB0 (apaga)

CALL DELAY ;llama a la subrutina de retardo

GOTO INICIO ;cuando vuelve del retardo

;ejecuta el GOTO

;===================================================

;= DELAY: Subrutina de retardo =

;= Modifica los siguientes registros: =

;= CUENTA1 =

;= CUENTA2 =

;= ACUMULADOR =

;= STATUS =

;(Conviene hacerse un pequeño resumen de lo que

;hace cada subrutina, puede sernos muy útil para

;usarla en otros programas)

DELAY MOVLW 010H ;Carga el acumulador con el valor

;10H (16 en decimal)

MOVWF CUENTA1 ;Mueve el contenido del acumulador

;a CUENTA1

ACA1 MOVLW 0FFH ;Carga

...

Descargar como (para miembros actualizados) txt (3 Kb)
Leer 1 página más »
Disponible sólo en Clubensayos.com