Temporizador para insoladora

Iniciado por Meta, 8 Septiembre 2010, 01:20 AM

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

Meta

Hola:

He estado comprobando en pareja con el 16F88 y 16F84A. Son por temas de interrupciones y hay que corregirlo, parece fácil y llevo tiempo.

Capturas:

    * Ver paso 1 - Enciende los PIC.
    * Ver paso 2 - Pulsa el botón RB7. Por ahora las intrrupciones son iguales.
    * Ver paso 3 - Pulsa el botón RB6. Sigue con los mismos bits.
    * Ver paso 4 - Pulsa RB7. El bits RBIE del 16F88 está en 0 y del 16F84A en 1.
    * Ver paso 5 - Con RB7 para el 16F84A cuenta atrás bien, el 16F88 no puede contar.


Eso es todo lo que he descubierto. Voy a investigar si es posible arreglar estas cosas. Cualquier auyda es bien recibida.

Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

yarboclo

Hola a todos,
yo también me estoy peleando con el temporizador de ese libro.
Tokes o Meta, me podéis pasar el código original modificado para que pueda contar más tiempo? Yo solo no consigo adaptarlo.

Gracias de antemano.

Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

yarboclo

Oki, espero tu mensaje.
Gracias :rolleyes:

f2v

Hola amigos estoy intentando hacer el temporizador pero soy principiante en asm. Agradeceria me manden el asm y el hex de este temporizador.
Muchas gracias por su tiempo y Sal2....

markitosb

hola  me pueden paras el codigo hex del temporisador  yo  tengo uno  con atmega
solo qe no tengo el grabador si desean subo el  proyecto completo gracias ;-)

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


                                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 :-(

Meta

Hola:

No se hacerlo. Mejor funciona con Arduino UNO, es más fácil de programarlo.

El que me ayudó a ponerlo a 99:99 en unos post más atrás pero no a las 24 horas.

[youtube=640,360]https://www.youtube.com/watch?v=qNXp5NFDuHw[/youtube]

http://electronicavm.net/2011/06/22/temporizador-arduino-lcd/

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

elcerouno

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

elcerouno

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