temporizador 24 horas

Iniciado por elcerouno, 24 Septiembre 2015, 19:10 PM

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

elcerouno

hola alguien me puede ayudar y principiante en pic quiero hacer un temporizador programable a 24 horas que pongas el tiempo que quieras prenda un led y al terminar ese tiempo lo apague, vi los ejemplos de un temporizador pero solo llega a 4 min 15 seg espero puedan ayudarme dejo el ejemplo

Código (asm) [Seleccionar]


                               LIST P=16F84A
                               INCLUDE <P16F84A.INC>

           __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
 
   
    CBLOCK 0x0C
    TiempoDeseado
    Tiempo
    FlagsModo
    ENDC
   
    ORG    0x2100              
    DE     0x00                

#DEFINE   F_Temporizador_ON       FlagsModo,2
#DEFINE   F_Temporizador_Ajuste   FlagsModo,1
#DEFINE   F_Temporizador_OFF      FlagsModo,0

#DEFINE    SalidaTemporizador     PORTB,1
#DEFINE    Zumbador               PORTB,2
#DEFINE    AjustePulsador         PORTB,7
#DEFINE    IncrementarPulsador    PORTB,6

; ZONA DE CÓDIGOS ********************************************************************

            ORG   0
            goto  Inicio
            ORG   4
            goto  ServicioInterrupcion

Mensajes
           addwf        PCL,F


Mensaje_ON
           DT "EN FUNCION",0x00
Mensaje_Ajuste
           DT "TIEMPO DECEADO",0x00
Mensaje_OFF
           DT "   RECARGAR",0x00

;interrupcion de inicio
         

Inicio
           call    LCD_Inicializa
           movlw   Mensaje_Inicio
           call    LCD_MensajeMovimiento
           call    Retardo_500ms
           call    Retardo_500ms
           call    Retardo_500ms
         
           movlw   Mensaje_nollave
           call    LCD_MensajeMovimiento
           call    Retardo_500ms
           call    Retardo_500ms
           call    Retardo_500ms
           call    Retardo_500ms
           call    Retardo_500ms
           
           bsf     STATUS,RP0
           movlw   b'00000111'
           movwf   OPTION_REG
           bsf     AjustePulsador
           bsf     IncrementarPulsador
           bcf     SalidaTemporizador
           bcf     Zumbador
           bcf     STATUS,RP0
           clrw
           call    EEPROM_LeeDato
           movwf   TiempoDeseado
           call    ModoTemporizador_OFF
           movlw   b'10001000'
           movwf   INTCON
Principal
           
           
           
             goto     Principal

;subrrutinasdeservicioInterrupcion------------------------------------------
           
             
         



ServicioInterrupcion
                     
                     
                     btfsc        INTCON,T0IF
                     call         Temporizador
                     btfss        INTCON,RBIF
                     goto         FinInterrupcion
                   
                     btfss        AjustePulsador
                     call         CambiarModo
                     btfsc        IncrementarPulsador
                     goto         FinInterrupcion

                     call         Retardo_20ms
                     btfsc        IncrementarPulsador
                     goto         FinInterrupcion
                     btfsc        F_Temporizador_OFF
                     call         ModoTemporizador_ON
                     btfsc        F_Temporizador_Ajuste
                     call         IncrementarTiempoDeseado
FinInterrupcion
                     bcf          INTCON,RBIF
                     bcf          INTCON,T0IF
                     retfie

;subrrutinasCambiarModo------------------------------------------------------------

CambiarModo
            call      PitidoCorto
            btfsc     AjustePulsador
            goto      EsperaDejePulsar
            btfsc     F_Temporizador_OFF
            goto      ModoTemporizador_Ajuste
            btfss     F_Temporizador_Ajuste
            goto      ModoTemporizador_OFF

            clrw
            movwf    EEADR
            movf     TiempoDeseado,W
            call     EEPROM_EscribeDato



ModoTemporizador_OFF
                      bcf   SalidaTemporizador
                      call  Pitido
                      movlw  b'00000001'
                      movwf  FlagsModo
                      bcf    INTCON,T0IE
                      movf   TiempoDeseado,W
                      movwf  Tiempo
                      call   LCD_Borra
                      movlw  Mensaje_OFF
                      goto   FinCambiarModo
ModoTemporizador_Ajuste
                      bcf     SalidaTemporizador
                      movlw   b'00000010'
                      movwf   FlagsModo
                      clrf     Tiempo
                      clrf     TiempoDeseado
                      bcf      INTCON,T0IE
                      call     LCD_Borra
                      movlw    Mensaje_Ajuste
                      goto     FinCambiarModo
ModoTemporizador_ON
                      movf     TiempoDeseado,W
                      btfsc    STATUS,Z
                      goto     ModoTemporizador_OFF
                      movwf    Tiempo
                      call     PitidoCorto
                      movlw    b'00000100'
                      movwf    FlagsModo
                      movlw    TMR0_Carga50ms
                      movwf    TMR0
                      movlw    Carga_1s
                      movwf    Registro50ms
                      bsf      INTCON,T0IE
                      call     LCD_Borra
                      bsf      SalidaTemporizador
                      movlw    Mensaje_ON
FinCambiarModo
               call   LCD_Mensaje
               call   VisualizaTiempo
EsperaDejePulsar
               btfss   AjustePulsador
               goto    EsperaDejePulsar
               return

;SubrutinaTEMPORIZADOR

              CBLOCK
              Registro50ms
              ENDC
TMR0_Carga50ms     EQU         -d'195'
Carga_1s           EQU         d'20'

Temporizador
             call        Retardo_50micros
             call        Retardo_20micros
             nop
             movlw        TMR0_Carga50ms
             movwf        TMR0
             decfsz       Registro50ms,F
             goto         FinTemporizador
             movlw        Carga_1s
             movwf        Registro50ms
             btfss        F_Temporizador_ON
             goto         FinTemporizador
             decfsz       Tiempo,F
             goto         VisualizaContador
             bcf          SalidaTemporizador
             call         VisualizaTiempo
             call         Pitido
             call         Retardo_500ms
             call         Pitido
             call         Retardo_500ms
             call         PitidoLargo
             call         Retardo_500ms
             call         ModoTemporizador_OFF
             goto         FinTemporizador
VisualizaContador
              call        VisualizaTiempo
FinTemporizador
              return
;SubrutinaVisualizaTiempo--------------------------------------------------

VisualizaTiempo
               movlw      .5
               call      LCD_PosicionLinea2
               movf      Tiempo,W
               call      MinutosSegundos
               movf      TemporizadorMinutos,W
               call      BIN_a_BCD
               call      LCD_Byte
               movlw     ':'
               call      LCD_Caracter
               movf      TemporizadorSegundos,W
               call      BIN_a_BCD
               goto      LCD_ByteCompleto
               return
;subrutinaminutossegundos----------------------------------------------------

            CBLOCK
            TemporizadorMinutos
            TemporizadorSegundos
            ENDC

MinutosSegundos
           movwf      TemporizadorSegundos
           clrf       TemporizadorMinutos
Resta60     movlw      .60
           subwf      TemporizadorSegundos,W
           btfss       STATUS,C
           goto        FinMinutosSegundos
           movwf       TemporizadorSegundos
           incf        TemporizadorMinutos,F
           goto        Resta60
FinMinutosSegundos
           return

;subrutina incrementatiempodeseado

Saltoincremento  EQU       .5

IncrementarTiempoDeseado
               call   PitidoCorto
               movlw   Saltoincremento
               addwf   Tiempo,F
               btfsc   STATUS,C
               clrf    Tiempo
               call    VisualizaTiempo
               call    Retardo_100ms
               btfss   IncrementarPulsador
               goto    IncrementarTiempoDeseado
               movf    Tiempo,W
               movwf   TiempoDeseado
           
               return  

;subrrutinapitidolargopitidocorto

PitidoLargo
          bsf     Zumbador
          call    Retardo_500ms
Pitido    
          bsf     Zumbador
          call    Retardo_200ms
PitidoCorto
          bsf      Zumbador
          call     Retardo_20ms
          bcf      Zumbador
          return
         
           
           
               
   
         
   



         
                               INCLUDE    <RETARDOS.INC>
                               INCLUDE    <BIN_BCD.INC>
                               INCLUDE    <LCD_4BIT.INC>
                               INCLUDE     <LCD_MENS.INC>
                               INCLUDE     <EEPROM.INC>

                    END :-(


ivancea96

Dado "Retardo_500ms", basta que lo metas en un bucle para esperar todo el tiempo que quieras.

elcerouno

Cita de: ivancea96 en 28 Septiembre 2015, 20:59 PM
Dado "Retardo_500ms", basta que lo metas en un bucle para esperar todo el tiempo que quieras.


pero igual puedo programar el tiempo que yo quiera?

ivancea96

La función Retardo_500ms hace sus bucles. Lo mejor es que utilices ese set de funciones en bucles, salvo que sepas leer el código de esa función, y rehacerlo para lo que buscas. No te líes, y ahorra memoria.