Post on 03-Jul-2020
Diapositivas 4
Subrutinas de retardode tiempo
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
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)
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.
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
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
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:
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.
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:
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
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
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.
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.