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