Sei sulla pagina 1di 12

Rutinas de retardo

Oscar Montao
Ciclo Maquina

Las instrucciones en el microcontrolador PIC16F84a necesitan solo un ciclo maquina para


ejecutarse, EXCEPTO las que impliquen saltos (ej. GOTO, RETURN, BTFSS, DECFSZ, etc.).
Tiempo de ejecucin
El tiempo que se tarda el PIC en ejecutar un commando viene dado
por:
1
= 4

Donde: es la frecuencia del oscilador, es la cantidad de ciclos


maquina que necesita el commando, y es la cantidad de
tiempo que se tarda en ejecutar el commando.
Tiempo de ejecucin
Ejemplo 1: Calcule cuanto tiempo se tarda en ejecutarse la funcin sublw,
si se esta usando un cristal de 4MHz

1 1
= 4 = 4 1 = 1
4 106

Ejemplo 2: Calcule cuanto tiempo se tarda en ejecutrase la funcin goto, si


se esta usando un cristal de 4MHz

1 1
= 4 = 4 2 = 2
4 106
Tiempo de ejecucin
Ejemplo 3: Calcule la cantidad de ciclos maquina necesarios para
ocasionar un retardo de 1.5ms, usando un cristal de 4MHz

1
= 4

1.5 103 4 106
= = = 1500
4 4
Instruccin NOP
La instruccin NOP, no realiza operacin alguna, solo gasta un ciclo
maquina.

Pregunta: Cuanto Tiempo tarda en ejecutarse la instruccin NOP, si se


usa un cristal de 4MHz?
Rutina de retardo simple
retardo1ms La llamada del CALL gasta 2 cm
movlw d249 Gasta 1cm
movwf Contador Gasta 1cm
Ciclo
nop Gasta 249x1cm
decfsz Contador,f Gasta 248x1cm (cuando no salta) + 2cm (al saltar)
goto ciclo Gasta 248x2cm
return Gasta 2cm

En total el este programa tiene un retardo de 2cm+1cm+1cm+249cm+248cm+2cm+496cm+2cm=1001cm,


lo que causa un retardo de:
1 1
= 4 = 4 1001 = 1001 = 1.001
4 106
Rutina de retardo simple Formula general
retardo1ms La llamada del CALL gasta 2 cm
movlw dK Gasta 1cm
movwf Contador Gasta 1cm
Ciclo
nop Gasta Kx1cm
decfsz Contador,f Gasta (K-1)x1cm (cuando no salta) + 2cm (al saltar)
goto ciclo Gasta (K-1)x2cm
return Gasta 2cm

En total el este programa tiene un retardo general de


2 + 1 + 1 + + 1 + 2 + 2 1 + 2 = 4 + 5, lo que causa un
retardo de:
1
= 4 4 + 5

Rutina de retardo simple Formula general
Ejemplo1: Calcule el retardo de la rutina anterior si K=120
Ejemplo2: Calcule K para tener un retardo de 0.5ms
Ejemplo3: Calcule K para tener un retardo de 5ms
Ejemplo4: Calcule el tiempo de retardo maximo que puede obtenerse
con la rutina anterior
Retardo con lazos anidados
Retardo con lazos anidados
Retardo_100ms El call gasta 2cm
movlw d100 Gasta 1cm (M=249)
goto Retardos_ms Gasta 2cm
Retardos_ms
movwf contadorM Gasta 1cm
Ciclo_ex_1ms
movlw d249 Gasta Mx1cm (K=249)
movwf ContadorK Gasta Mx1cm
Ciclo_in_1ms
Nop Gasta MxKx1cm
decfsz ContadorK,f Gasta Mx(K-1)x1cm (cuando no salta) + Mx2cm (al saltar)
goto ciclo_in_1ms Gasta Mx(K-1)x2cm
decfsz ContadorM,f Gasta (M-1)x1cm (cuando no salta) + 2cm (al saltar)
goto ciclo_ex_1ms Gasta (M-1)x2cm
Return Gasta 2cm
1cm+M+M+MK+MK-M+2M+2MK-2M+M-1cm+2cm+2M-2cm+2cm=2+4M+4MK ciclos maquina
Ciclos maquina totales=(2+4M+4MK)+5cm=7+4M+4MK
1
= 4 (7 + 4 + 4)

Retardo con lazos anidados
Retardo_100ms El call gasta 2cm
movlw d100 Gasta 1cm (M=100)
goto Retardos_ms Gasta 2cm
Retardo_ms
movwf contadorM Gasta 1cm
Ciclo_ex_1ms
movlw d249 Gasta Mx1cm (K=249)
movwf ContadorK Gasta Mx1cm
Ciclo_in_1ms
Nop Gasta MxKx1cm
decfsz ContadorK,f Gasta Mx(K-1)x1cm (cuando no salta) + Mx2cm (al saltar)
goto ciclo_in_1ms Gasta Mx(K-1)x2cm
decfsz ContadorM,f Gasta (M-1)x1cm (cuando no salta) + 2cm (al saltar)
goto ciclo_ex_1ms Gasta (M-1)x2cm
Return Gasta 2cm
1cm+M+M+MK+MK-M+2M+2MK-2M+M-1cm+2cm+2M-2cm+2cm=2+4M+4MK ciclos maquina
Ciclos maquina totales=(2+4M+4MK)+5cm=7+4M+4MK
1
= 4 (7 + 4 + 4)

Potrebbero piacerti anche