Sei sulla pagina 1di 13

UNIDAD 5.

- Subrutinas
5.1.- Introduccin.
5.2.- Subrutinas de retardo.

5.1.- Introduccin
Una
subrutina
o
subprograma es una parte
de programa que realiza
una accin concreta y se
repite a menudo, para
ahorrar memoria y esfuerzo
y para hacer el programa
mas comprensible.
Una subrutina se debe
ejecutar
siempre
llamndola
con
la
instruccin CALL y al final
de dicha subrutina debe
haber siempre un RETURN.
El
esquema
siguiente
muestra como funcionan
las subrutinas:

CALL SUBR
..
..
..
CALL SUBR
.
.
SUBR
.
.
RETURN

5.2.Subrutinas
retardo

de

Ciclo maquina: Es la unidad basica de tiempo que


utiliza el microcontrolador. Para el PIC 16F84A el
ciclo maquina es la equivalencia de 4 ciclos de
reloj, por lo tanto, el tiempo que tarda en
producirse un ciclo maquina es igual a 4 veces el
periodo del oscilador.

Las instrucciones en el PIC 16f84A


necesitan 1 ciclo maquina para
ejecutarse, excepto las de salto
(goto, call, btfss, btfsc,return,etc)
que necesitan de dos ciclos maquina.
El
tiempo
que
tarda
el
4
microcontrolador
en ejecutar una
T cm
tarea viene f fijado por la formula
siguiente: f frecuencia del oscilador
cm ciclos maquina

Ejemplos
1.- Calcular la duracin de 1 ciclo
maquina para un PIC 16F84A que
utiliza un cristal de cuarzo de 4MHz
Solucin:

4
4
T cm
1cm 1seg
f
4 MHz
2cm 2 seg

2.- En un sistema con un


microcontrolador PIC16F84A y cristal
de cuarzo de 4MHz se desea generar
un retardo de 1.5 mseg. Calcular el
numero de ciclos maquina
necesarios.
Solucin:
Tf
(1.5mseg )(4 MHz )
cm

1500cm 1.5mseg

Retardo mediante lazo simple


Un ejemplo tipico de subrutina de retardo puede ser el siguiente
fragmento de programa:
;la llamada CALL aporta
2cm
Sg1ms
movlw 249
;aporta 1 cm. Este es el valor de k
movwf contA
;aporta 1 cm
Ciclo
nop
;aporta k x 1 cm
decfsz contA,f ;(k-1)x1cm (cuando no salta) + 2 cm (al saltar)
goto
ciclo
;aporta (k-1)x2 cm
return

En total=1 mseg

;aporta 2 cm

Es facil deducir que el valor de la


constante k con el que se ha cargado
inicialmente el contador contA
vendra dado por la siguiente
ecuacion, donde el tiempo vien
expresado en microsegundos:

T 5 4K ;

TIEMPO 5
K
4

Ejemplo: Calcular el valor de la


constante K, para obtener una
subrutina de retardo de
500microsegundos.
(500 seg ) 5
K

4 seg

123.75 124

T 5 4 K 501seg

Retardos mediante lazos anidados


Para la generalizacion de retardos
de mayor duracion deben utilizarse
lazos anidados, poniendo un lazo de
retardo dentro de otro.
La forma de hacerlo se explica en la
subrutina siguiente para generar un
retraso de 0.2 seg

..
Call sg0.2
..
..

;aporta 2cm

sg0.2
movlw d200; aporta 1cm.Este es el valor de M
movwf contB ;aporta 1cm
ciclo1
movlw d255;aportaMx1cm.Este es K
movwf contA;aporta Mx1cm
ciclo2
nop
;aporta(KxMx1)cm
decfsz contA,F;(K-1)xMx1cm(cuando no salta)+
;Mx2(al saltar)
goto ciclo2
;(K-1)xMx2cm
decfsz contB,F;(M-1)x1 (cuando no salta)+2cm(al saltar)
goto ciclo1
;(M-1)x2cm
return
Total: 0.204806 seg

Prctica. Disee un sistema que


genere unra intermitancia de 1
segundo en el Puerto B del
PIC16F84A

TAREAS
Investigar la funcin de las
siguientes instrucciones:
Carga

Bit

Clrw
Addlw
Movf f,d k
Addwf
f,d
Decf
f,d
Incf
f,d
Sublw k
Subwf
f,d

Logicas

Salto

Especia
les

Andlw k
Andwf
f,d
Comf
f,d
Iorlw k
Iorwf
f,d

Decfsz
f,d
Incfsz
f,d

Nop
Sleep
clrwdt

Potrebbero piacerti anche