elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


  Mostrar Mensajes
Páginas: [1]
1  Informática / Electrónica / Re: Temporizador para insoladora en: 23 Octubre 2015, 16:23 pm
hola de nuevo, mira tengo este codigo de un reloj de 24 horas, quise modificarlo pero lo que logre es q solo decremente los minutos y horas con los segundos acendentes ocea que si llega el segundero a 60 (no a cero) decrementa, tambien tengo el problema de que cuando decrmenta las horas en los minutos en lugar de iniciarce en 59 ejemplo 2:59:59  se inicia en 55  (2:55:60) espero me puedas ayudar

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
   LIST      P=16F84A
   INCLUDE  <P16F84A.INC>

   CBLOCK  0x0C
   Hora               ; Guarda las horas.
   Minuto               ; Guarda los minutos.
   Segundo                     ; Guarda los segundos.
   MedioSegundo            ; Incrementa cada medio segundo.
   Registro50ms            ; Incrementa cada 50 ms
   Intermitencia            ; Para lograr la intermitencia.
   FlagsAjuste            ; Guarda los flags para establecer los
   ENDC               ; ajustes de hora y minuto.
#DEFINE  REELEVADOR         PORTB,1
#DEFINE  ModoPulsador      PORTB,7      ; Los pulsadores se conectan a estos
#DEFINE  IncrementarPulsador   PORTB,6      ; pines del Puerto B.
#DEFINE  F_AjusteHora      FlagsAjuste,1   ; Flags utilizados en la puesta en hora.
#DEFINE  F_AjusteMinuto      FlagsAjuste,0
#DEFINE  F_Intermitencia   Intermitencia,0   ; Si es 0, apaga en intermitencia.
TMR0_Carga50ms      EQU   -d'195'      ; Para conseguir la interrupción del

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

   ORG    0
   goto   Inicio
   ORG   4
   goto   ServicioInterrupcion

Mensajes
   addwf   PCL,F
MensajePublicitario
   DT "REC:  H  M  S", 0x00

Inicio   call   LCD_Inicializa
   movlw   MensajePublicitario
   call   LCD_Mensaje
   bsf   STATUS,RP0      ; Acceso al Banco 1.
   movlw   b'00000111'      ; Prescaler de 256 para el TMR0 y habilita
   movwf   OPTION_REG      ; resistencias de Pull-Up del Puerto B.
   bsf   ModoPulsador      ; Configurados como entrada.
   bsf   IncrementarPulsador
    bcf REELEVADOR
   bcf   STATUS,RP0      ; Acceso al Banco 0.
   
    clrf   FlagsAjuste      ; Inicializa todos los flags de la puesta en hora.
   clrf   Hora         ; Inicializa todos los datos del reloj.
   clrf   Minuto
   clrf   Segundo
   clrf   MedioSegundo
   clrf   Registro50ms
   movlw   TMR0_Carga50ms      ; Carga el TMR0.
   movwf   TMR0      
   movlw   b'10101000'      ; Activa interrupción del TMR0 (TOIE), por cambio
   movwf   INTCON         ; líneas del Puerto B (RBIE) y la general (GIE).
   call   PuestaEnHoraReset   ; Puesta en hora por primera vez.
   
; La sección "Principal" es mantenimiento. Sólo espera las interrupciones.
; No se puede poner en modo de bajo consumo porque la instrucción "sleep" detiene el Timer 0.

Principal
   goto   Principal

; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
; Detecta qué ha producido la interrupción y ejecuta la subrutina de atención correspondiente.

ServicioInterrupcion
   btfsc   INTCON,T0IF      ; Si es una interrupción procedente del
   call   Reloj         ; desbordamiento del Timer 0, actualiza el reloj.
   btfss   INTCON,RBIF      ; Si es una interrupción RBI, lee los pulsadores.
   goto   FinInterrupcion
   btfss   ModoPulsador      ; ¿Está presionado el pulsador de "MODO"?
   call   PuestaEnHora      ; Sí, pasa a poner en hora.
   btfss   IncrementarPulsador   ; ¿Pulsado "INCREMENTAR"?.
   call   Incrementar      ; Sí, pasa a incrementar el registro de tiempo
FinInterrupcion            ; correspondiente.
   bcf   INTCON,RBIF
   bcf   INTCON,T0IF
   retfie

; Subrutina "Reloj" ---------------------------------------------------------------------
;
; Esta subrutina actualiza los contadores Horas, Minutos, Segundos y Registro50ms.
; Se ejecuta debido a la petición de interrupción del Timer 0 cada 50 ms.
;
; Como el PIC trabaja a una frecuencia de 4 MHz, el TMR0 evoluciona cada µs y se desborda cada
; 195 x 256 = 49920 µs. Sumádole el retardo de 71 µs y el pequeño tiempo de los saltos
; iniciales y de carga del contador, resulta un total de 50000 µs exactos. Es decir, el
; TMR0 producirá una interrupción cada 50 ms exactos, comprobado experimentalmente con la
; ventana Stopwatch del simulador del MPLAB.

Reloj   call   Retardo_50micros   ; Retardo de 71 microsegundos para
   call   Retardo_20micros   ; ajustar a 50 milisegundos exactos.
   nop
     movlw   TMR0_Carga50ms      ; Carga el Timer 0.
   movwf   TMR0
     call   IncrementaRegistro50ms
   
   btfss   STATUS,C      ; ¿Ha contado 10 veces 50 ms = 1/2 segundo?
   goto   FinReloj      ; No. Pues sale sin visualizar el reloj.
   

; Si está en "ModoAjusteHora", o "ModoAjusteMinuto" conmuta el flag de intermitencia y
; salta a visualizar el reloj.
;
   movf   FlagsAjuste,F
   btfsc   STATUS,Z
   goto   IncrementaReloj
   movlw   b'00000001'      ; Conmuta el flag F_Intermitencia cada 500 ms.
   xorwf   Intermitencia,F
   goto   ActualizaReloj      ; Visualiza el reloj y sale.
IncrementaReloj
   bsf     REELEVADOR
    bsf       F_Intermitencia      ; Se mantendrá siempre encendido durante
   call   IncrementaMedioSegundo   ; el funcionamiento normal.
   btfss   STATUS,C      ; ¿Ha pasado 1 segundo?
   goto   ActualizaReloj      ; No. Pues sale visualizando el reloj.
    call    IncrementaSegundos       ; Sí. Incrementa el segundero.
   btfss   STATUS,Z      ; ¿Han pasado 60 segundos?
   goto   ActualizaReloj      ; No. Pues sale visualizando el reloj.
   call    Decrementamin   ; Sí. Incrementa el minutero.
   btfss   STATUS,Z      ; ¿Han pasado 60 minutos?
   goto   ActualizaReloj      ; No. Pues sale visualizando el reloj.
   call    Decrementahr      ; Sí. Incrementa las horas.
ActualizaReloj
   call   VisualizaReloj      ; Visualiza el reloj.
FinReloj
   return


; Subrutina "VisualizaReloj" ------------------------------------------------------------
;
; Visualiza el reloj en la segunda línea en formato: " 8:47:39".
; Cuando se ajusta una variable, ésta debe aparecer en intermitencia. Para ello, utiliza
; el flag F_Intermitencia que conmuta cada 500 ms en la subrutina Reloj.
;
VisualizaReloj
   movlw   .4         ; Para centrar visualización
   call   LCD_PosicionLinea2   ; en la segunda línea.
   btfss   F_AjusteHora      ; ¿Está en la puesta en hora?
   goto   EnciendeHoras      ; No. Visualización normal.
   btfss   F_Intermitencia      ; Sí. Intermitencia si procede.
   goto   ApagaHoras      ; Apaga las horas en la intermitencia.
EnciendeHoras
   movf   Hora,W         ; Va a visualizar las horas.
   call   BIN_a_BCD      ; Lo pasa a BCD.
   call   LCD_Byte      ; Visualiza rechazando cero de las decenas.
   goto   VisualizaMinutos
ApagaHoras
   call   LCD_DosEspaciosBlancos   ; Visualiza dos espacios en blanco.
;
VisualizaMinutos
   movlw   ':'         ; Envía ":" para separar datos.
   call   LCD_Caracter
   btfss   F_AjusteMinuto      ; ¿Está en la puesta en hora?.
   goto   EnciendeMinutos
   btfss   F_Intermitencia
   goto   ApagaMinutos
EnciendeMinutos
   movf   Minuto,W      ; Visualiza minutos.
   call   BIN_a_BCD      ; Lo pasa a BCD.
   call   LCD_ByteCompleto
   goto   VisualizaSegundos
ApagaMinutos
   call   LCD_DosEspaciosBlancos   ; Visualiza dos espacios en blanco.
;
VisualizaSegundos
   movlw   ':'         ; Envía ":" para separar datos.
   call   LCD_Caracter
    movf   Segundo,W      ; Visualiza segundos.
    call   BIN_a_BCD      ; Lo pasa a BCD.
   call   LCD_ByteCompleto
    return
;
; Subrutina "Incrementar" ---------------------------------------------------------------
;
; Subrutina de atención a la interrupción por cambio de la línea RB6 al cual se ha conectado
; el pulsador "INCREMENTAR". Incrementa según corresponda una sola de las variables.

Incrementar
   call   Retardo_20ms      ; Espera se estabilicen niveles de tensión.   
   btfsc   IncrementarPulsador   ; Si es un rebote sale fuera.
   goto   FinIncrementar
   bsf       F_Intermitencia      ; Visualiza siempre mientras incrementa.
   btfsc   F_AjusteHora
   call   IncrementaHoras
   btfsc   F_AjusteMinuto
   call   IncrementaMinutos
    call   VisualizaReloj      ; Visualiza mientras espera que deje
   call   Retardo_200ms      ; de pulsar.
   btfss   IncrementarPulsador   ; Mientras permanezca pulsado,
   goto   Incrementar      ; incrementa el dígito.
FinIncrementar
   return

; Subrutina "IncrementaRegistro50ms" ----------------------------------------------------
;
; Incrementa el valor de la variable Registro50ms. Cuando llega a 10, lo cual supone
; medio segundo (50 ms x 10 = 500 ms), lo resetea y sale con el Carry a "1".
;
IncrementaRegistro50ms
   incf   Registro50ms,F
   movlw   .10
   subwf   Registro50ms,W      ; (W)=(Registro50ms)-10.
   btfsc   STATUS,C      ; ¿C=0?, ¿(W) negativo?, ¿(Registro50ms)<10?
   clrf   Registro50ms      ; Lo inicializa si ha superado su valor máximo.
   return

; Subrutina "IncrementaMedioSegundo" --------------------------------------------------------
;
; Incrementa el valor de la variable MedioSegundo. Su bit de menor peso se pondrá a "1" una
; vez por segundo.

IncrementaMedioSegundo
   incf   MedioSegundo,F      ; Incrementa.
   bsf   STATUS,C      ; Supone que ha llegado al segundo.
   btfss   MedioSegundo,0      ; El bit 0 se pondrá a uno cada segundo.
   bcf   STATUS,C
   return

; Subrutina "IncrementaSegundos" -----------------------------------------------------------
;
; Incrementa el valor de la variable Segundo. Si es igual al valor máximo de 60 lo resetea
; y sale con el Carry a "1".

IncrementaSegundos
   incf   Segundo,F      ; Incrementa los minutos.
   movlw   .60
   subwf    Segundo,W      ; ¿Ha superado su valor máximo?. (W)=(Minuto)-60.
   btfsc   STATUS,C      ; ¿C=0?, ¿(W) negativo?, ¿(Minuto)<60?
   clrf   Segundo         ; Lo inicializa si ha superado su valor máximo.
   return
       
; Subrutina "IncrementaMinutos" -----------------------------------------------------------
;
; Incrementa el valor de la variable Minuto. Si es igual al valor máximo de 60 lo resetea
; y sale con el Carry a "1".
;
IncrementaMinutos
   incf   Minuto,F      ; Incrementa los minutos.
   movlw   .60
   subwf   Minuto,W      ; ¿Ha superado su valor máximo?. (W)=(Minuto)-60.
   btfsc   STATUS,C      ; ¿C=0?, ¿(W) negativo?, ¿(Minuto)<60?
   clrf   Minuto         ; Lo inicializa si ha superado su valor máximo.
   return

; Subrutina "IncrementaHoras" -----------------------------------------------------------
;
; Incrementa el valor de la variable Hora. Si es igual al valor máximo de 24 lo resetea
; y sale con el Carry a "1".
;
IncrementaHoras
   incf   Hora,F         ; Incrementa las horas.
   movlw   .24
   subwf   Hora,W         ; ¿Ha superado su valor máximo?. (W)=(Hora)-24.
   btfsc   STATUS,C      ; ¿C=0?, ¿(W) negativo?, ¿(Hora)<24?
   clrf   Hora         ; Lo inicializa si ha superado su valor máximo.
   return
Decrementamin

             decf    Minuto,1
           
           
             return

Decrementahr

             decf    Hora,1
           
             
             
             return
             
PuestaEnHora
   call   Retardo_20ms      ; Espera a que se estabilicen niveles.   
   btfsc   ModoPulsador      ; Si es un rebote sale fuera.
   goto   FinPuestaEnHora
PuestaEnHoraReset         ; Al pulsar "MODO" se apaga la variable de
   bcf    REELEVADOR
    bcf   F_Intermitencia      ; tiempo que se va a ajustar.
   movf   FlagsAjuste,F      ; Si antes estaba en funcionamiento normal, ahora
   btfss   STATUS,Z       ; pasa a ajustar la hora.
   goto   AjustaSiguiente      ; Si no pasa a ajustar la variable de tiempo siguiente.
   bsf   F_AjusteHora      ; Pasa a ajustar la hora.
   clrf   Segundo         ; Inicializa contador de segundos y el resto.
   clrf   MedioSegundo
   clrf   Registro50ms
   goto   FinPuestaEnHora
AjustaSiguiente            ; Desplaza un "1" a la derecha del registro
   bcf   STATUS,C      ; FlagsAjuste para ajustar secuencialmente
   rrf   FlagsAjuste,F      ; cada uno de los registros de tiempo:
FinPuestaEnHora            ; hora y minuto.
   call   VisualizaReloj
   btfss   ModoPulsador      ; Ahora espera deje de pulsar.
   goto   FinPuestaEnHora
   return

   INCLUDE  <RETARDOS.INC>
   INCLUDE  <LCD_4BIT.INC>
   INCLUDE  <LCD_MENS.INC>
   INCLUDE  <BIN_BCD.INC>
   END
   
2  Informática / Electrónica / Re: Temporizador para insoladora en: 23 Octubre 2015, 16:11 pm
hola, primero quiero agradecer tu ayuda, dos puedes pasarme el codigo para hacer el temporizador de 99:99 programable porfavor, quisiera darle una estudiada haber si puedo hacer el de 24 hrs te lo agradecere mucho saludos
3  Informática / Electrónica / Re: temporizador 24 horas en: 28 Septiembre 2015, 22:24 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?
4  Informática / Electrónica / temporizador 24 horas en: 24 Septiembre 2015, 19:10 pm
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
  1.  
  2.                                LIST P=16F84A
  3.                                INCLUDE <P16F84A.INC>
  4.  
  5.            __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
  6.  
  7.  
  8.     CBLOCK 0x0C
  9.     TiempoDeseado
  10.     Tiempo
  11.     FlagsModo
  12.     ENDC
  13.  
  14.     ORG    0x2100              
  15.     DE     0x00                
  16.  
  17. #DEFINE   F_Temporizador_ON       FlagsModo,2
  18. #DEFINE   F_Temporizador_Ajuste   FlagsModo,1
  19. #DEFINE   F_Temporizador_OFF      FlagsModo,0
  20.  
  21. #DEFINE    SalidaTemporizador     PORTB,1
  22. #DEFINE    Zumbador               PORTB,2
  23. #DEFINE    AjustePulsador         PORTB,7
  24. #DEFINE    IncrementarPulsador    PORTB,6
  25.  
  26. ; ZONA DE CÓDIGOS ********************************************************************
  27.  
  28.             ORG   0
  29.             goto  Inicio
  30.             ORG   4
  31.             goto  ServicioInterrupcion
  32.  
  33. Mensajes
  34.            addwf        PCL,F
  35.  
  36.  
  37. Mensaje_ON
  38.            DT "EN FUNCION",0x00
  39. Mensaje_Ajuste
  40.            DT "TIEMPO DECEADO",0x00
  41. Mensaje_OFF
  42.            DT "   RECARGAR",0x00
  43.  
  44. ;interrupcion de inicio
  45.  
  46.  
  47. Inicio
  48.            call    LCD_Inicializa
  49.            movlw   Mensaje_Inicio
  50.            call    LCD_MensajeMovimiento
  51.            call    Retardo_500ms
  52.            call    Retardo_500ms
  53.            call    Retardo_500ms
  54.  
  55.            movlw   Mensaje_nollave
  56.            call    LCD_MensajeMovimiento
  57.            call    Retardo_500ms
  58.            call    Retardo_500ms
  59.            call    Retardo_500ms
  60.            call    Retardo_500ms
  61.            call    Retardo_500ms
  62.  
  63.            bsf     STATUS,RP0
  64.            movlw   b'00000111'
  65.            movwf   OPTION_REG
  66.            bsf     AjustePulsador
  67.            bsf     IncrementarPulsador
  68.            bcf     SalidaTemporizador
  69.            bcf     Zumbador
  70.            bcf     STATUS,RP0
  71.            clrw
  72.            call    EEPROM_LeeDato
  73.            movwf   TiempoDeseado
  74.            call    ModoTemporizador_OFF
  75.            movlw   b'10001000'
  76.            movwf   INTCON
  77. Principal
  78.  
  79.  
  80.  
  81.              goto     Principal
  82.  
  83. ;subrrutinasdeservicioInterrupcion------------------------------------------
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90. ServicioInterrupcion
  91.  
  92.  
  93.                      btfsc        INTCON,T0IF
  94.                      call         Temporizador
  95.                      btfss        INTCON,RBIF
  96.                      goto         FinInterrupcion
  97.  
  98.                      btfss        AjustePulsador
  99.                      call         CambiarModo
  100.                      btfsc        IncrementarPulsador
  101.                      goto         FinInterrupcion
  102.  
  103.                      call         Retardo_20ms
  104.                      btfsc        IncrementarPulsador
  105.                      goto         FinInterrupcion
  106.                      btfsc        F_Temporizador_OFF
  107.                      call         ModoTemporizador_ON
  108.                      btfsc        F_Temporizador_Ajuste
  109.                      call         IncrementarTiempoDeseado
  110. FinInterrupcion
  111.                      bcf          INTCON,RBIF
  112.                      bcf          INTCON,T0IF
  113.                      retfie
  114.  
  115. ;subrrutinasCambiarModo------------------------------------------------------------
  116.  
  117. CambiarModo
  118.             call      PitidoCorto
  119.             btfsc     AjustePulsador
  120.             goto      EsperaDejePulsar
  121.             btfsc     F_Temporizador_OFF
  122.             goto      ModoTemporizador_Ajuste
  123.             btfss     F_Temporizador_Ajuste
  124.             goto      ModoTemporizador_OFF
  125.  
  126.             clrw
  127.             movwf    EEADR
  128.             movf     TiempoDeseado,W
  129.             call     EEPROM_EscribeDato
  130.  
  131.  
  132.  
  133. ModoTemporizador_OFF
  134.                       bcf   SalidaTemporizador
  135.                       call  Pitido
  136.                       movlw  b'00000001'
  137.                       movwf  FlagsModo
  138.                       bcf    INTCON,T0IE
  139.                       movf   TiempoDeseado,W
  140.                       movwf  Tiempo
  141.                       call   LCD_Borra
  142.                       movlw  Mensaje_OFF
  143.                       goto   FinCambiarModo
  144. ModoTemporizador_Ajuste
  145.                       bcf     SalidaTemporizador
  146.                       movlw   b'00000010'
  147.                       movwf   FlagsModo
  148.                       clrf     Tiempo
  149.                       clrf     TiempoDeseado
  150.                       bcf      INTCON,T0IE
  151.                       call     LCD_Borra
  152.                       movlw    Mensaje_Ajuste
  153.                       goto     FinCambiarModo
  154. ModoTemporizador_ON
  155.                       movf     TiempoDeseado,W
  156.                       btfsc    STATUS,Z
  157.                       goto     ModoTemporizador_OFF
  158.                       movwf    Tiempo
  159.                       call     PitidoCorto
  160.                       movlw    b'00000100'
  161.                       movwf    FlagsModo
  162.                       movlw    TMR0_Carga50ms
  163.                       movwf    TMR0
  164.                       movlw    Carga_1s
  165.                       movwf    Registro50ms
  166.                       bsf      INTCON,T0IE
  167.                       call     LCD_Borra
  168.                       bsf      SalidaTemporizador
  169.                       movlw    Mensaje_ON
  170. FinCambiarModo
  171.                call   LCD_Mensaje
  172.                call   VisualizaTiempo
  173. EsperaDejePulsar
  174.                btfss   AjustePulsador
  175.                goto    EsperaDejePulsar
  176.                return
  177.  
  178. ;SubrutinaTEMPORIZADOR
  179.  
  180.               CBLOCK
  181.               Registro50ms
  182.               ENDC
  183. TMR0_Carga50ms     EQU         -d'195'
  184. Carga_1s           EQU         d'20'
  185.  
  186. Temporizador
  187.              call        Retardo_50micros
  188.              call        Retardo_20micros
  189.              nop
  190.              movlw        TMR0_Carga50ms
  191.              movwf        TMR0
  192.              decfsz       Registro50ms,F
  193.              goto         FinTemporizador
  194.              movlw        Carga_1s
  195.              movwf        Registro50ms
  196.              btfss        F_Temporizador_ON
  197.              goto         FinTemporizador
  198.              decfsz       Tiempo,F
  199.              goto         VisualizaContador
  200.              bcf          SalidaTemporizador
  201.              call         VisualizaTiempo
  202.              call         Pitido
  203.              call         Retardo_500ms
  204.              call         Pitido
  205.              call         Retardo_500ms
  206.              call         PitidoLargo
  207.              call         Retardo_500ms
  208.              call         ModoTemporizador_OFF
  209.              goto         FinTemporizador
  210. VisualizaContador
  211.               call        VisualizaTiempo
  212. FinTemporizador
  213.               return
  214. ;SubrutinaVisualizaTiempo--------------------------------------------------
  215.  
  216. VisualizaTiempo
  217.                movlw      .5
  218.                call      LCD_PosicionLinea2
  219.                movf      Tiempo,W
  220.                call      MinutosSegundos
  221.                movf      TemporizadorMinutos,W
  222.                call      BIN_a_BCD
  223.                call      LCD_Byte
  224.                movlw     ':'
  225.                call      LCD_Caracter
  226.                movf      TemporizadorSegundos,W
  227.                call      BIN_a_BCD
  228.                goto      LCD_ByteCompleto
  229.                return
  230. ;subrutinaminutossegundos----------------------------------------------------
  231.  
  232.             CBLOCK
  233.             TemporizadorMinutos
  234.             TemporizadorSegundos
  235.             ENDC
  236.  
  237. MinutosSegundos
  238.            movwf      TemporizadorSegundos
  239.            clrf       TemporizadorMinutos
  240. Resta60     movlw      .60
  241.            subwf      TemporizadorSegundos,W
  242.            btfss       STATUS,C
  243.            goto        FinMinutosSegundos
  244.            movwf       TemporizadorSegundos
  245.            incf        TemporizadorMinutos,F
  246.            goto        Resta60
  247. FinMinutosSegundos
  248.            return
  249.  
  250. ;subrutina incrementatiempodeseado
  251.  
  252. Saltoincremento EQU       .5
  253.  
  254. IncrementarTiempoDeseado
  255.                call   PitidoCorto
  256.                movlw   Saltoincremento
  257.                addwf   Tiempo,F
  258.                btfsc   STATUS,C
  259.                clrf    Tiempo
  260.                call    VisualizaTiempo
  261.                call    Retardo_100ms
  262.                btfss   IncrementarPulsador
  263.                goto    IncrementarTiempoDeseado
  264.                movf    Tiempo,W
  265.                movwf   TiempoDeseado
  266.  
  267.                return  
  268.  
  269. ;subrrutinapitidolargopitidocorto
  270.  
  271. PitidoLargo
  272.           bsf     Zumbador
  273.           call    Retardo_500ms
  274. Pitido    
  275.           bsf     Zumbador
  276.           call    Retardo_200ms
  277. PitidoCorto
  278.           bsf      Zumbador
  279.           call     Retardo_20ms
  280.           bcf      Zumbador
  281.           return
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.                                INCLUDE    <RETARDOS.INC>
  294.                                INCLUDE    <BIN_BCD.INC>
  295.                                INCLUDE    <LCD_4BIT.INC>
  296.                                INCLUDE     <LCD_MENS.INC>
  297.                                INCLUDE     <EEPROM.INC>
  298.  
  299.                     END :-(
  300.  
  301.  
5  Informática / Electrónica / temporizador 24 horas en: 24 Septiembre 2015, 19:09 pm
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


                                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 :-(
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines