Autor Tema: Retardos de 1hr  (Leído 2769 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dsotelo74

  • PIC10
  • *
  • Mensajes: 5
Retardos de 1hr
« en: 10 de Febrero de 2003, 11:32:00 »
Que tal!!

Me da gusto integrarme a esta comunidad y hacer esta pregunta a tantas personas que se ve que les apasiona el tema de la programacion de pics. La preguntas es: como puedo hacer un retardo de una hora en ensablador??


adolfoadc

  • Visitante
RE: Retardos de 1hr
« Respuesta #1 en: 10 de Febrero de 2003, 13:05:00 »
Existen varias formas de hacerlo :
1ª.- Utilizando el timer que lleva incorporado el pic, en el caso del 16F628, uno de 16bits. Habilitas la interrupción por timer1, cuando se produzca el desbordamiento del timer (dependiendo de los valores de los registros TIMER1L y TIMER1H) decrementas una variable ( por ejemplo cuenta1) miras si es cero,si no lo es sales de la rutina de irq, si lo es vuelves a recargar cuenta1 y decrementas cuenta2, y mira lo mismo que para cuenta1, cuando sea cero se recargan cuenta1 y cuenta2, y asi vas poniendo variables y decrementandolas hasta que consigas el tiempo deseado, y cuando eso se cumple haces lo que quieras.Un ejemplo practico :

TIMER1   BTFSS PIR1,0      ;se ha producido por overflow de tmr1?
   GOTO FINRSI      ;no --> mira si es por cambio en portb?
   DECFSZ COUNTER1,1   ;si --> decrementa counter1 y mira si es 0?
   GOTO FINTMR1      ;no --> termino irq
   DECFSZ COUNTER2,1   ;si --> decrementa counter2 y mira si es 0?
   GOTO FINTMR1      ;no --> termino irq
   BSF ALARMA,0      ;activo la alarma
   BCF PIR1,0      ;borro flag por timer1
   CLRF TMR1L
   CLRF TMR1H   ;cargo el timer1 para 65536 cuentas
   MOVLW B"00110101" ;prescale 1:8, internal clock, timer1 habilitado
   MOVWF T1CON
   RETURN
   CLRF COUNTER1      ;inicializo el counter1 para timer1
   MOVLW 0X17
   MOVWF COUNTER2      ;inicializo el counter2 para timer1 para 10.35min ******************************************
FINTMR1   BCF PIR1,0      ;borro flag de timer1
   BSF STATUS,RP0      ;BANK 1
   BSF PIE1,0      ;habilito interrupcion por timer1
   BCF STATUS,RP0      ;BANK 0   
FINRSI    SWAPF STATUS_TEMP,0
   MOVWF STATUS      ;restauro STATUS
   SWAPF W_TEMP,1
   SWAPF W_TEMP,0      ;restauro W sin modificar STATUS
   RETFIE


2ª forma : es utilizando un pulso externo con una frecuencia de por ejemplo 1Hz (1segundo) y meterlo por la entrada de contador o por INT, de forma que cuando cuentes 3600 pulsos habra pasado una hora.

No te recomiendo que utilizes un delay de 1hora porque el micro no podra hacer nada mientras este contando y por lo tanto es mejor utilizar los timer o cualquier otra forma pero siempre utilizando irq, de forma que el micro puede estar haciendo cualquier otra cosa mientras cuenta.

Bueno, pues esto es todo amigos.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Retardos de 1hr
« Respuesta #2 en: 10 de Febrero de 2003, 17:01:00 »
Creo que el amigo Adolfo lleva toda la razón. Una rutina de una hora... nada bueno.
Usa un integrado para eso. En la tienda micropik tienes uno, exactamente "PCF8583P-F5 Clock Calendar  with 240 * 8bit RAM  3,24€". Y lo mejor, funciona mediante I2C.
La dirección:
http://www.micropik.com/pagmicro.htm
Por cierto, trabajan muy bien y rápido.
Suerte.
Ups! No me fijé que no eres de España. Bueno por lo menos te servirá de referencia.
Saludos desde Huelva (ESPAÑA)