Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo...

13
Diapositivas 4 Subrutinas de retardo de tiempo

Transcript of Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo...

Page 1: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Diapositivas 4

Subrutinas de retardode tiempo

Page 2: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Subrutina para retardos de tiempo.Un ciclo máquina es la unidad de medida de tiempo cuando se

trabaja con microcontroladores.

Para el PIC 16F84A, un ciclo máquina es equivalente a cuatro ciclosde reloj del oscilador.

Usando un cristal de cuarzo con frecuencia de 4 MHz, entoncescada ciclo máquina tendrá una duración de:

4 41 4 1

4oscosc

ciclo máquina T segf MHz

Casi todas las instrucciones del PIC 16F84A se ejecutan en 1 ciclomáquina ( ), a excepción de las instrucciones de salto querequieren de hasta 2 ciclos máquina ( ).

1 seg2 seg

Page 3: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Analice el siguiente código:...

CALL RETARDO...

RETARDO MOVLW D’K’MOVWF CONTADOR

REGRESA NOPDECFSZ CONTADOR, F

GOTO REGRESARETURN

2 cm

1 cm1 cm(1 cm) x K(1 cm) x (K-1) + 2 cm

(2 cm) x (K-1)(2 cm)

No salta Salta

Tiempo = 2+1+1+K+(K-1)+2+2(K-1)+2=(5+4K) cm = (5+4K) µseg

(cm: ciclo máquina)

Page 4: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Para un tiempo de 1 mseg:5 1000 5

248.754 4

TiempoK

Observe los siguientes dos casos:

CASO 1.

Si K=249, entonces Tiempo=5+4(249)=1001 µseg=1.001 mseg

Esta subrutina de tiempo es casi exacta, pero excede en un tiempode 1 µseg.

CASO 2.

Si K=248, entonces Tiempo=5+4(248)=997 µseg=0.997 mseg

Esta subrutina de tiempo es menor que el esperado y faltan 3 µseg.

Page 5: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Si no se requieren tiempos “exactos”, entonces podremos usar elcódigo mostrado con anterioridad, a pesar de excederse en un 1µseg.

Si se requieren tiempos “exactos”, entonces se modificará lasubrutina de retardo de tiempo, añadiendo el número necesariode instrucciones NOP para realizar este ajuste, de tal forma que elcódigo tendrá la siguiente forma:

CALL RETARDO...

RETARDO MOVLW D’K’MOVWF CONTADORNOPNOPNOP

REGRESA NOPDECFSZ CONTADOR, FGOTO REGRESARETURN

ProgramaPrincipal

Subrutinaretardo detiempo

Page 6: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

Subrutina de retardo de tiempo desde 100 mseghasta 25 seg:

RETARDO MOVLW D’K’MOVWF CONT3

BUCLE3 MOVLW D’100’MOVWF CONT2

BUCLE2 MOVLW D’249’MOVWF CONT1

BUCLE1 NOPDECFSZ CONT1, FGOTO BUCLE1DECFSZ CONT2, FGOTO BUCLE2DECFSZ CONT3, FGOTO BUCLE3RETURN

NOTAS:(1) El tiempo de retardo se calcula como:

(2) Sustituir “K” por un valor válido entre 1 y 255.

(3) Deberán definirse las variables CONT1, CONT2 y CONT3 en elprograma principal.

100Tiempo K mseg

Page 7: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

EJEMPLO. Programa que realiza el parpadeo entre los nibbles bajoy alto del puerto B, cada 500 ms en bucle infinito.

Nibble bajo encendido durante 500 ms.

Nibble alto encendido durante 500 ms.

Código:CONT1 EQU 0x0CCONT2 EQU 0x0DCONT3 EQU 0x0E

ORG H’00’BSF STATUS, RP0CLRF TRISBBCF STATUS, RP0

INICIO MOVLW B’00001111’MOVWF PORTBCALL RETARDOMOVLW B’11110000’MOVWF PORTBCALL RETARDOGOTO INICIO

RETARDO MOVLW D’5’MOVWF CONT3

BUCLE3 MOVLW D’100’MOVWF CONT2

BUCLE2 MOVLW D’249’MOVWF CONT1

BUCLE1 NOPDECFSZ CONT1, FGOTO BUCLE1DECFSZ CONT2, FGOTO BUCLE2DECFSZ CONT3, FGOTO BUCLE3RETURN

END

Continuación:

Page 8: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

CBLOCK 0x0CCONT1CONT2CONT3ENDC

ORG H’00’BSF STATUS, RP0CLRF TRISBBCF STATUS, RP0

INICIO MOVLW B’00001111’MOVWF PORTBCALL RETARDOSWAPF PORTB,FCALL RETARDOGOTO INICIO

RETARDO MOVWF D’5’...

END

El código anterior puede reescribirse de la forma siguiente:

CBLOCK: Directiva que se usa para definiruna lista de constantes y asignarles unadirección de memoria.

Al terminar la lista de constantes, seescribe la directiva ENDC.

Page 9: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

EJEMPLO. Programa de parpadeo de nibbles bajo/alto cada 500mseg y con bucle finito de 4 veces.

CBLOCK 0x0CCUENTACONT1CONT2CONT3ENDC

ORG H’00’BSF STATUS, RP0CLRF TRISBBCF STATUS, RP0

CLRF CUENTACLRF PORTB

INICIO MOVLW H’0F’MOVWF PORTBCALL RETARDOSWAPF PORTB,FCALL RETARDO

INCF CUENTA,FMOVLW D’4’SUBWF CUENTA,WBTFSS STATUS,ZGOTO INICIOSLEEP

RETARDO MOVWF D’5’...

END

Código: Continuación:

Page 10: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

EJEMPLO. Programa que realiza un juego de luces denominado“auto fantástico”.

Se enciende un led (uno a la vez) de derecha a izquierda cada0.5 seg y luego la misma secuencia de luces de izquierda a derecha,en bucle infinito.

ORG H’00’BSF STATUS, RP0CLRF TRISBBCF STATUS, RP0

BSF STATUS,CCLRF REGISTRO

INICIO_1 MOVF REGISTRO,WMOVWF PORTBCALL RETARDORLF REGISTRO,FBTFSS STATUS,CGOTO INICIO_1

Código: Continuación:

INICIO_2 MOVF REGISTRO,WMOVWF PORTBCALL RETARDORRF REGISTRO,FBTFSS STATUS,CGOTO INICIO_2GOTO INICIO_1

RETARDO MOVLW D’5’...

END

Page 11: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

EJEMPLO. Programa contador binario de 0 a 30, con intervalos de 1seg y visualización por el puerto B.

Código: Continuación:

CBLOCK 0x0CCUENTACONT1CONT2CONT3ENDC

ORG H’00’BSF STATUS, RP0CLRF TRISBBCF STATUS, RP0

CLRF CONTADORINICIO MOVF CONTADOR,W

MOVWF PORTBCALL RETARDOINCF CONTADOR,F

MOVLW D’31’SUBWF CONTADOR,WBTFSS STATUS,ZGOTO INICIOSLEEP

RETARDO MOVLW D’10’...

END

Page 12: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

PROGRAMA 6. Juego de secuencia de luces, visualizadas por elpuerto B:

Secuencia 1: Parpadeo leds pares e impares, en intervalos de 600mseg. Se repite 5 veces.

Secuencia 2: Efecto del “auto fantástico” en intervalos de 300 mseg.Se repite 7 veces.

Secuencia 3: Encendido de leds en cada extremo cuyo efecto visualsea acercándose al centro y luego alejándose de nuevo, enintervalos de 400 mseg. Se repite 9 veces y finalmente todos los ledsquedarán encendidos.

Page 13: Diapositivas 4 › micros_files › micros_4__Subrutinas de...Diapositivas 4 Subrutinas de retardo de tiempo Subrutina para retardos de tiempo. Un ciclo máquina es la unidad de medida

PROGRAMA 7. Contador ascendente de 0 a F con salida a un display de7 segmentos, con intervalos de 1 seg.

PROGRAMA 8. Contador ascendente/descendente de 0 a 9 con salida aun display de 7 segmentos, con intervalos de 1 seg y bucle infinito. Setiene una entrada de control en RA0 de tal forma que:

Si RA0=“0”, entonces se tiene un CONTADOR ASCENDENTE, y Si RA0=“1”, entonces se tiene un CONTADOR DESCENDENTE.

Al realizar el cambio de estado en la entrada de control, se realiza elcambio de cuenta ASCENDENTE/DESCENDENTE, a partir del ultimo valordesplegado en el display; no debe reiniciarse la cuenta.

Por ejemplo, si RA0 es igual a “0” entonces se visualiza un conteoASCENDENTE. Mientras no se modifique, se realizan innumerables conteosdesde 0 hasta 9 y se reinicia cada vez que llega a su cuenta máxima.

En un instante se tiene la cuenta ascendente en 7, en ese momento secambia el estado de RA0 a “1”, entonces se cambiará a un conteoDESCENDENTE, que empezará con el valor 6 y seguirá 5,4,3,… etc. hasta 0y reinicia 9, 8, etc. hasta que vuelva a modificarse el valor de RA0 yvuelva de nuevo el contero ASCENDENTE y viceversa.