# Temporizador con pic 16f84



## Condor (Dic 20, 2005)

Necesito temporizar 12, 24 y 48 hrs. Alguien tiene un codigo fuente el cual pueda variar para realizar esto?, o unicamente como realizar un contador con este PIC. 

Salu2, MARTIN.


----------



## Andres Cuenca (Dic 20, 2005)

Puedes utilizar el  Delay Code Generator, lo encuentras en esta pagina:

http://www.piclist.com/techref/piclist/codegen/delay.htm

Saludos.


----------



## Condor (Dic 21, 2005)

Gracias por la ayuda, lo voy a chequear.

salu2


----------



## roke83 (Abr 27, 2007)

Hola, buscando información acerca de las temporizaciones mediante bucles anidados llegué a este y y leyendo vuestras respuestas visité http://www.piclist.com/techref/piclist/codegen/delay.htm. El código funciona muy bien y la temporización es perfecta pero yo necesitaría saber cuál es la fórmula con la que trabaja este generador. La intenté deducir a través del código pero no soy capaz de obtener una ecucación correcta. Por favor si alguien sabe cuál es. Gracias

(Para mayor facilidad mi código es este

;*****************************************
;*  Subrutina de retardo SW de 0.5 seg.  *
;*****************************************
temp_05seg
; Delay = 0.499995 seconds
; Clock frequency = 4 MHz
; Actual delay = 0.499995 seconds = 499995 cycles
; Error = 0 %
        movlw   2
        movwf   cont_05_A
        movlw   24
        movwf   cont_05_B
        movlw   2
        movwf   cont_05_C
bucle1
        decfsz  cont_05_A
        goto    $+2
        decfsz  cont_05_B
        goto    $+2
        decfsz  cont_05_C
        goto    bucle1

        goto    $+1             ;4 ciclos extra para cuadrar la temporización.
        goto    $+1

        return                    ;"call" y "return" suman otros 4 ciclos.


----------



## pic-man (Abr 27, 2007)

El problema es que si quieres hacer temporizaciones tan largas mediante retardos hechos por ciclos estás esclavizando al micro a estar ejecutando solo eso. Lo ideal sería utilizar un temporizador mediante interrupciones para que de esa forma el micro pueda ejecutar otras tareas mientras realiza la temporización.

En esta página explico como realizar retardos mediante ciclos con las ecuaciones necesarias para realizar cualquier retardo


----------



## roke83 (May 2, 2007)

Gracias Pic-Man. Tienes razón, pero la temporización que mostré no la voy a implementar en uns sistema real. solo me hacia falta para una simulación en unas prácticas. de todas formas, igual empleo las que he visto en tu web. Gracias


----------



## Meta (Mar 31, 2008)

Había uno en Software. ¿cómo se llama? Lo prefiero más porque en Web, puede quedar tumbado el servidor.


----------



## pepechip (Mar 31, 2008)

este programa te gerera el firmware de los retardos
saludos


----------



## Meta (Mar 31, 2008)

Gracias amigo, comparando con la web, tienes que crear tus propias variables.

EDIT:
Por cierto, ¿existe algo parecido sea en software o por Web sobre Timer0?


----------



## jose_flash (Oct 18, 2008)

yo quiero hacer uno para el acuario que con un dip (interruptor) enciendes uno tenga 2 horas de encendiodo ,cuando le de al 2º 4 horas y asi hasta 12 horas.... eso con un pic de 8 pines se puede hacer?......sabes como ? 

es para las luces del acuario se enciende a las 10 am y sigue hasta las 2,4,6,8,10,12  y se apagan  hasta las de 10am del dia siguente pero aagada


----------



## jose_flash (Oct 19, 2008)

el funcionamiento es basico... cunado lo enciendas ..se tire x horas encencido ( numero de horas elejidas) y cuando se pare ...cuente 24 horas (hasta el  dias siguiente) para encenderse a la la hora que lo encendiste la 1 º vez


----------



## Meta (Oct 19, 2008)

Se puede hacer, el problema es saber hacerlo.


----------



## jose_flash (Oct 19, 2008)

alguien sabes como hacerlo si no es asi, al menos  que aga el mismo funcionamiento


----------



## Meta (Oct 19, 2008)

jose_flash dijo:
			
		

> alguien sabes como hacerlo si no es asi, al menos  que aga el mismo funcionamiento



Por ahora no se hacerlo porque no me he puesto a investigar, ya que poseo el libro www.16f84a.org me ayudará bastante aprender hacerlo.

Siempre la primera vez cuesta. Lo que todavía no he aprendido casi nada es manejar el TIMER, los retardos me parecen más fácil pero los pic se quedan como esclavos.

Aprenderé hacer temporizadores con display de 7 seg. y LCD 16x2.


----------



## jose_flash (Oct 19, 2008)

gracias ...no creo que sea demasiado compricado pero es cuestio de que alguien que entienda ayude como tu ..jiijiji


----------



## Meta (Oct 19, 2008)

Hola jose_flash:

No lo hago porque estoy haciendo varios manuales, sobre todo estoy acabando el ic-prog que ya presentaré en unas horas a ver si les gusta en modo DEMO 1 y si encuentran errores. La otra cosa que estoy haciendo es que mi hermano programó el 18F2550 y le funciona el puerto USB, tiene el LCD 20x4 conectado al PIC y se muestra el cuenta km, las ruedas desgastadas del coche, gasolina, etc conectado a un juego de PC que funciona en tiempo real mediante un plugin que también hay que programar para que el juego y el pic se comuniquen. Esto requiere tiempo.

Cuando acabe, lo presentaré con todo detalle en una revista oficial de España, y de paso se publicará siempre que ellos aprueben el proyecto.

Bueno, en el libro dicen cosas y los TIMER no se me dan bien.

Saludos.


----------



## Meta (Oct 19, 2008)

Algo encontré aquí:

http://perso.wanadoo.es/chyryes/circuitos/archivos/Despertador.asm


```
;************************************************************
;**                                                        **
;**                    Reloj Despertador                   **
;**                     Por Carlos Díaz                    **
;**                           2002                         **
;**                                                        **
;**            [url]http://perso.wanadoo.es/chyryes/[/url]            **
;**                                                        **
;************************************************************

AJUSTV	EQU	09FH		;SI ATRASA HAY QUE BAJAR ESTE NUMERO 	
REFRESV	EQU	011H		
VAR1V	EQU	0C8H
VAR2V	EQU	14H
SEGV	EQU	3CH
FSR	EQU	04H
INDF	EQU	00H
CUENTA1	equ	0Ch
CUENTA2	EQU	0DH
CUENTA3	EQU	0EH
DISP1	EQU	0FH
DISP2	EQU	10H
VAR1	EQU	11H
VAR2	EQU	12H
SEG	EQU	13H
MIN	EQU	14H
HOR	EQU	15H
ACU	EQU	16H
REFRES	EQU	17H
STAT	EQU	18H
AJUST	EQU	19H
AL_HOR	EQU	20H
HORAL	EQU	21H
MINAL	EQU	22H
HORAL2	EQU	23H
MINAL2	EQU	24H
STATUS	EQU	03H
PORTA	EQU	05H
PORTB	EQU	06H
TRISA	EQU	05H
TRISB	EQU	06H
TMR0	EQU	01H	;AQUI SE PONE LO Q QUIERES QUE CUENTE EL TIMER (BANCO 0)
INTCON	EQU	0BH
F	EQU	1
W	EQU	0

	ORG	00H
	GOTO	INICIO
	ORG	04H
	MOVWF	ACU
	MOVLW	0DH	;CON 0DH SALTA LA INTERRUPCION CADA 250 uSEG (CON CRISTAL 4MHZ)
	MOVWF	TMR0
	MOVF	STATUS,W
	MOVWF	STAT
	BTFSS	AL_HOR,2
	GOTO	AJUAJU
	BTFSS	PORTA,0
	GOTO	SON1
	BCF	PORTA,0
	GOTO	AJUAJU
SON1	BSF	PORTA,0


AJUAJU	DECFSZ	AJUST,F		
	GOTO	BLABLA
	MOVLW	04H
	ADDWF	TMR0
	MOVLW	AJUSTV
	MOVWF	AJUST

BLABLA	DECFSZ	REFRES,F
	GOTO	CONT
	MOVLW	REFRESV
	MOVWF	REFRES
	BTFSc	PORTB,4	;ESCRIBE EN DISPLAYS
	GOTO	ESCDIS2
	BTFSc	PORTB,5
	GOTO	ESCDIS3
	BTFSc	PORTB,6
	GOTO	ESCDIS4
	BTFSC	PORTB,7
	GOTO	ESCDIS1
	GOTO	ESCDIS2
ESCDIS1	BTFSC	AL_HOR,1
	GOTO	BORRA
	SWAPF	HOR,W
	BTFSC	AL_HOR,0
	SWAPF	HORAL,W
	ANDLW	0FH
	BTFSC	STATUS,2
	GOTO	BORRA
	IORLW	10H
	MOVWF	PORTB
	GOTO	CONT
BORRA	CLRF	PORTB
	GOTO	CONT

ESCDIS2	BTFSC	AL_HOR,1
	GOTO	BORRA
	MOVF	HOR,W
	BTFSC	AL_HOR,0
	MOVF	HORAL,W
	ANDLW	0FH
	IORLW	20H
	MOVWF	PORTB
	GOTO	CONT

ESCDIS3	BTFSC	AL_HOR,1
	GOTO	BORRA
	SWAPF	MIN,W
	BTFSC	AL_HOR,0
	SWAPF	MINAL,W
	ANDLW	0FH
	IORLW	40H
	MOVWF	PORTB
	GOTO	CONT

ESCDIS4	BTFSC	AL_HOR,1
	GOTO	BORRA
	MOVF	MIN,W
	BTFSC	AL_HOR,0
	MOVF	MINAL,W
	ANDLW	0FH
	IORLW	80H
	MOVWF	PORTB

CONT	DECFSZ	VAR1,F	;CONTABILIZA
	GOTO	SAL1
	MOVLW	VAR1V
	MOVWF	VAR1
	DECFSZ	VAR2,F
	GOTO	SAL1
	MOVLW	VAR2V
	MOVWF	VAR2
INCSEG	DECFSZ	SEG,F		;CUENTA SEGUNDOS
	GOTO	SAL1
	MOVLW	SEGV
	MOVWF	SEG
INCMIN	INCF	MIN,F
	MOVF	MIN,W		;VA A MIRAR SI MIN<60H
	BCF	STATUS,0
	SUBLW	59H
	BTFSS	STATUS,0
	GOTO	MIN0		;HAY QUE IR A PONER MIN A CERO e incrementar hor
	BCF	STATUS,0
	MOVF	MIN,W		;VA A MIRAR SI MIN ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	SAL
	MOVLW	06H
	ADDWF	MIN,F
	MOVLW	0F0H
	ANDWF	MIN,F

SAL	BTFSC	AL_HOR,3
	CALL	MIRAL
SAL1	MOVF	STAT,W
	MOVWF	STATUS
	MOVF	ACU,W
	BCF	INTCON,2	
	RETFIE


MIRAL	MOVF	MINAL,W
	BTFSC	AL_HOR,5
	MOVF	MINAL2,W
	SUBWF	MIN,W
	BTFSC	STATUS,2
	GOTO	MIRHOR
	RETURN
MIRHOR	MOVF	HORAL,W
	BTFSC	AL_HOR,5
	MOVF	HORAL2,W
	SUBWF	HOR,W
	BTFSC	STATUS,2
	BSF	AL_HOR,4
	RETURN



MIN0	CLRF	MIN
	INCF	HOR,F
	BCF	STATUS,0
	MOVF	HOR,W
	SUBLW	23H
	BTFSS	STATUS,0
	GOTO	HOR0		;HAY QUE IR A PONER HOR A CERO
	BCF	STATUS,0
	MOVF	HOR,W		;VA A MIRAR SI HOR ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	SAL
	MOVLW	06H
	ADDWF	HOR,F
	MOVLW	0F0H
	ANDWF	HOR,F
	GOTO	SAL

	
HOR0	CLRF	HOR
	GOTO	SAL

INICIO	BCF	PORTA,0
	CLRF	HORAL
	CLRF	MINAL
	CLRF	AL_HOR
	MOVLW	AJUSTV
	MOVWF	AJUST
	MOVLW	REFRESV
	MOVWF	REFRES
	MOVLW	VAR1V
	MOVWF	VAR1		;VAR1 SE CARGA CON 200
	MOVLW	VAR2V
	MOVWF	VAR2		;VAR2 SE CARGA CON 20
	MOVLW	SEGV
	MOVWF	SEG
	CLRW
	MOVWF	MIN
	MOVWF	PORTB
	MOVWF	HOR
	BCF	INTCON,2		;FLAG DE DESBORDAMIENTO DE TMR0 (PONER A CERO POR SOFTWARE)
	BSF	INTCON,5		;PERMITE INTERRUPCION POR DEBORDAMIENTO DE TMR0
	BSF	INTCON,7		;PERMITE INTERRUPCIONES
	BSF	STATUS,5
	CLRW
	MOVWF	TRISB
	MOVLW	1EH
	MOVWF	TRISA
	BCF	01H,5
	BCF	STATUS,5
	CLRF	TMR0
	GOTO	PULSA1

REP	BTFSS	PORTA,4
	GOTO	CAMBHOR
	BTFSS	PORTA,3
	GOTO	CAMBAL
	BTFSS	PORTA,2
	CALL	MUEAL
	BTFSS	PORTA,1
	GOTO	CONECAL
	BCF	AL_HOR,3
	BCF	AL_HOR,4
	BCF	AL_HOR,2
	BCF	PORTA,0
	BCF	AL_HOR,5
REP1	BTFSC	AL_HOR,4
	GOTO	SONAR
	
	GOTO	REP

REBOT	MOVLW	0FFH		;PARA PROBLEMAS CON LOS REBOTES
	MOVWF	CUENTA1
REBO	DECFSZ	CUENTA1,F
	GOTO	REBO
	RETURN

SONAR	MOVLW	08H
	MOVWF	CUENTA3
SONAR1	CALL	DELAY3
	MOVLW	04H
	XORWF	AL_HOR,F	;permuta el bit 2 de al_hor
	BTFSS	PORTA,2
	GOTO	SALSON
	BTFSC	PORTA,1
	GOTO	REP
	DECFSZ	CUENTA3,F
	GOTO	SONAR1
	CALL	DELAY3
	CALL	DELAY3
	CALL	DELAY3
	CALL	DELAY3
	GOTO	SONAR

SALSON	BCF	AL_HOR,4	;AQUI HAY QUE PARAR LA ALARMA PERO Q VUELVA  A SONAR
	BCF	AL_HOR,2
	BCF	PORTA,0
	MOVF	HORAL,W
	BTFSC	AL_HOR,5
	MOVF	HORAL2,W
	MOVWF	HORAL2
	MOVF	MINAL,W
	BTFSC	AL_HOR,5
	MOVF	MINAL2,W
	ADDLW	05H
	MOVWF	MINAL2
	BCF	STATUS,0
	SUBLW	59H
	BTFSS	STATUS,0
	GOTO	REBA		;HAY QUE sumar 6 y and por 0f, e incrementar horal2, y bsf al_hor,5
	BCF	STATUS,0
	MOVF	MINAL2,W
	ANDLW	0FH
	SUBLW	09H
	BTFSS	STATUS,0
	GOTO	SUMA6
SALSON2	CALL	REBOT
SALSON1	BTFSS	PORTA,2
	GOTO	SALSON1
	BSF	AL_HOR,5
	CALL	REBOT
	GOTO	REP
SUMA6	MOVLW	06H
	ADDWF	MINAL2,F
	GOTO	SALSON2
REBA	MOVLW	06h
	ADDWF	MINAL2,W
	ANDLW	0FH
	MOVWF	MINAL2
	INCF	HORAL2,W
	MOVWF	HORAL2
	BCF	STATUS,0
	SUBLW	23H
	BTFSS	STATUS,0
	GOTO	REBA2		;poner a cero horal2
	BCF	STATUS,0
	MOVF	HORAL2,W
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	SALSON2
	MOVLW	06H
	ADDWF	HORAL2,F
	GOTO	SALSON2
REBA2	CLRF	HORAL2
	GOTO	SALSON2


DELAY3	CLRF	CUENTA1
	MOVLW	01FH
	MOVWF	CUENTA2
DELAY4	DECFSZ	CUENTA1
	GOTO	DELAY5
	DECFSZ	CUENTA2
	GOTO	DELAY4
	RETURN
DELAY5	BTFSC	PORTA,1
	RETURN
	GOTO	DELAY4

CONECAL	BSF	AL_HOR,3
	GOTO	REP1

CAMBHOR	CALL	DELAY
	BTFSC	PORTA,4
	GOTO	REP
	CALL	PARPAD		

SUELTA1	BTFSS	PORTA,4		;ESPERA A QUE SE SUELTE EL BOTON
	GOTO	SUELTA1				

PULSA1	CALL	DELAY2
	BTFSS	PORTA,4		;ESPERA A Q SE PULSE
	GOTO	INCREM
	BTFSS	PORTA,3
	GOTO	INCREH
	BTFSS	PORTA,2
	GOTO	SALHOR
	CALL	PARPAD
	GOTO	PULSA1

INCREM	CALL	REBOT		
	BTFSC	PORTA,4
	GOTO	PULSA1
	BCF	STATUS,0
	INCF	MIN,F
	MOVF	MIN,W
	BCF	STATUS,0
	SUBLW	59H
	BTFSS	STATUS,0
	GOTO	MIN02		;HAY QUE IR A PONER MIN A CERO E IR A INCREM
	BCF	STATUS,0
	MOVF	MIN,W		;VA A MIRAR SI MIN ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	INCREM1
	MOVLW	06H
	ADDWF	MIN,F
	MOVLW	0F0H
	ANDWF	MIN,F
	GOTO	INCREM1
MIN02	CLRF	MIN
INCREM1	CALL	DELAY1
	GOTO	INCREM

INCREH	CALL	REBOT
	BTFSC	PORTA,3
	GOTO	PULSA1
	INCF	HOR,F
	MOVF	HOR,W
	BCF	STATUS,0
	SUBLW	23H
	BTFSS	STATUS,0
	GOTO	HOR02		;HAY QUE IR A PONER HOR A CERO
	BCF	STATUS,0
	MOVF	HOR,W		;VA A MIRAR SI HOR ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	INCREH1
	MOVLW	06H
	ADDWF	HOR,F
	MOVLW	0F0H
	ANDWF	HOR,F
	GOTO	INCREH1

CAMBAL	CALL	DELAY
	BTFSC	PORTA,3
	GOTO	REP
	CALL	PARPAD
	BSF	AL_HOR,0
ACA	BTFSS	PORTA,3
	GOTO	ACA

PULSA2	CALL	DELAY2
	BTFSS	PORTA,4
	GOTO	INMINAL
	BTFSS	PORTA,3
	GOTO	CAHORAL
	BTFSS	PORTA,2
	GOTO	SALAL
	CALL	PARPAD
	GOTO	PULSA2

INMINAL	BCF	AL_HOR,5
	CALL	REBOT
INMINA2	BTFSC	PORTA,4
	GOTO	PULSA2
	INCF	MINAL,F
	MOVF	MINAL,W
	BCF	STATUS,0
	SUBLW	59H
	BTFSS	STATUS,0
	GOTO	MINAL0		;HAY QUE IR A PONER MINAL A CERO E IR A INCREM
	BCF	STATUS,0
	MOVF	MINAL,W		;VA A MIRAR SI MINAL ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	INMINA3
	MOVLW	06H
	ADDWF	MINAL,F
	GOTO	INMINA3

MINAL0	CLRF	MINAL
INMINA3	CALL	DELAY1
	GOTO	INMINA2

CAHORAL	BCF	AL_HOR,5
	CALL	REBOT
CAHORA2	BTFSC	PORTA,3
	GOTO	PULSA2
	INCF	HORAL,F
	MOVF	HORAL,W
	BCF	STATUS,0
	SUBLW	23H
	BTFSS	STATUS,0
	GOTO	HORAL0		;HAY QUE IR A PONER HORAL A CERO
	BCF	STATUS,0
	MOVF	HORAL,W		;VA A MIRAR SI HOR ES DE TIPO 2A, 3A...
	ANDLW	0FH
	SUBLW	09H
	BTFSC	STATUS,0
	GOTO	CAHORA3
	MOVLW	06H
	ADDWF	HORAL,F
	GOTO	CAHORA3


SALAL	BCF	AL_HOR,0
SUELTA3	BTFSS	PORTA,2
	GOTO	SUELTA3
	GOTO	REP

HORAL0	CLRF	HORAL
CAHORA3	CALL	DELAY1
	GOTO	CAHORA2

HOR02	CLRF	HOR
INCREH1	CALL	DELAY1
	GOTO	INCREH
SALHOR	BTFSC	PORTA,2	
	GOTO	REP
	GOTO	SALHOR

DELAY	MOVLW	06H
	GOTO	DEL
DELAY1	MOVLW	02H		;SE REGULA LA VELOCIDAD DE CAMBIAR LA HORA
	GOTO	DEL
DELAY2	MOVLW	01H
DEL	MOVWF	CUENTA3
JOD	MOVLW	0FFH
	MOVWF	CUENTA1
JODER	MOVLW	0FFH
	MOVWF	CUENTA2
JODE	DECFSZ	CUENTA2,F
	GOTO	JODE
	DECFSZ	CUENTA1,F
	GOTO	JODER
	DECFSZ	CUENTA3,F
	GOTO	JOD
	RETURN


PARPAD	BSF	AL_HOR,1	;SUBRUTINA QUE HACE UN PARPADEO
	CALL	DELAY2
	BCF	AL_HOR,1
	RETURN

MUEAL	CALL	PARPAD		;MUESTRA UNOS INSTANTES LA HORA DE LA ALARMA
	BSF	AL_HOR,0
MUEAL2	BTFSS	PORTA,2
	GOTO	MUEAL2
	CALL	DELAY
	BCF	AL_HOR,0
	CALL	PARPAD
	RETURN
	


	END
```

Fuente:
http://foros.zackyfiles.com/showthread.php?t=518704


----------



## sergiobust (Nov 21, 2010)

hola atodos necesito un favor de ustedes 

es q nesecito hacer un circuito para prender un moden de internet a una cierta hora y q se apague a otra cierta hora nesecito ayuda con este tema gracias


----------



## cypress999 (Abr 9, 2011)

Meta dijo:


> Había uno en Software. ¿cómo se llama? Lo prefiero más porque en Web, puede quedar tumbado el servidor.


hola amigo pudistes arreglar el problema del temporizador con el pic  16f876 para subirle mas el tiempo de insolasion , es q estoy urgido y  necesito programarlo para 10 minutos max de verdad agradeceria tu ayuda  grax  espero pronta respuesta


----------

