retardos con 16f84a

hola a todos:
estoy intentando crear amplios retardos con el 16f84 pero no se como hacerlo ,quisiera hacer retardos desde 20segundos hasta varios minutos,a ver si me podeis decir como hacerlo o si me mandais alguna programacion de ejemplo.
Saludos a todos.
 
Holaa! En este Link hay un programa que hace códigos de programación de retardo en assembler. Tu le pones la frecuencia de tu oscilador y el tiempo que quieres y el programa te hace el código.

El Link a ese programa:
http://www.pablin.com.ar/electron/download/picdel.zip

Otra recomendación inportante para tu caso: trata de usar la menor frecuencia de oscilación que puedas, ojalá kHz o menos, para que no tengas que hacer taaaaaaantos ciclos de demora llenando la memoria de programación del PIC.
Suerte!
 
hola

talvez con esta rutina comprendas como funcionan los retardos

Código:
;******************************************************************************
;************************   Librería "RETARDOS.INC"    ************************
;******************************************************************************

; ZONA DE DATOS **************************************************************

	CBLOCK
	R_ContA				; Contadores para los retardos.
	R_ContB
	R_ContC
	ENDC

;******************************************************************************
;   RETARDOS de 4 hasta 10 microsegundos   ************************************ 
;******************************************************************************

Retardo_10micros				
	nop				
	nop				
	nop				
	nop				
	nop
				
Retardo_5micros				
	nop
		
Retardo_4micros				
	return	
			
;******************************************************************************
;   RETARDOS de 20 hasta 500 microsegundos   ********************************** 
;******************************************************************************

Retardo_500micros				
	nop				
	movlw	d'164'			
	goto	RetardoMicros
		
Retardo_200micros				
	nop				
	movlw	d'64'			
	goto	RetardoMicros
		
Retardo_100micros				
	movlw	d'31'			
	goto	RetardoMicros
		
Retardo_50micros				
	nop				
	movlw	d'14'			
	goto	RetardoMicros
		
Retardo_20micros				
        movlw	d'5'
;*******************************************

RetardoMicros
	movwf	R_ContA	
		
Rmicros_Bucle
	decfsz	R_ContA,F		
	goto	Rmicros_Bucle		
                return
;******************************************************************************
;   RETARDOS de 1 ms hasta 200 ms ********************************************* 
;******************************************************************************


Retardo_200ms			
	movlw	d'200'	
	goto	Retardos_ms
		
Retardo_100ms				
	movlw	d'100'		
	goto	Retardos_ms
		
Retardo_50ms			
	movlw	d'50'			
	goto	Retardos_ms
		
Retardo_20ms				
	movlw	d'20'			
	goto	Retardos_ms
		
Retardo_10ms				
	movlw	d'10'			
	goto	Retardos_ms
		
Retardo_5ms				
	movlw	d'5'	
	goto	Retardos_ms
		
Retardo_2ms				
	movlw	d'2'			
	goto	Retardos_ms
	
Retardo_1ms				
	movlw	d'1'			
;*******************************************
Retardos_ms
	movwf	R_ContB	
		
R1ms_BucleExterno
	movlw	d'249'			
	movwf	R_ContA
		
R1ms_BucleInterno
	nop				
	decfsz	R_ContA,F		
	goto	R1ms_BucleInterno	
	decfsz	R_ContB,F		
	goto	R1ms_BucleExterno 	
	return				

;******************************************************************************
;  RETARDOS de 0.5 hasta 20 segundos   **************************************** 
;******************************************************************************


Retardo_20s				
	movlw	d'200'			
	goto	Retardo_1Decima

Retardo_10s				
	movlw	d'100'			
	goto	Retardo_1Decima
		
Retardo_5s				
	movlw	d'50'			
	goto	Retardo_1Decima

Retardo_2s				
	movlw	d'20'			
	goto	Retardo_1Decima	
	
Retardo_1s				
	movlw	d'10'			
	goto	Retardo_1Decima	
	
Retardo_500ms		
	movlw	d'5'			
;*******************************************
Retardo_1Decima
	movwf	R_ContC
			
R1Decima_BucleExterno2
	movlw	d'100'			
	movwf	R_ContB
			
R1Decima_BucleExterno
	movlw	d'249'			
	movwf	R_ContA	
	
R1Decima_BucleInterno          
	nop				
	decfsz	R_ContA,F		
	goto	R1Decima_BucleInterno	
	decfsz	R_ContB,F		
	goto	R1Decima_BucleExterno	
	decfsz	R_ContC,F
	goto	R1Decima_BucleExterno2	
                return
END
 
hola de nuevo
antes de nada gracias por contestarme ,me han sido de ayuda las respuestas.
he conseguido elaborar este programa ,pero no me funciona ,se enciende el led pero no apaga nunca ,aqui os lo dejo para ver si me decis algo .saludos.


; El LED conectado a la línea 0 del puerto de salida se enciende durante 20s y se
; apaga durante 20s.
;
; ZONA DE DATOS **********************************************************************

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

CBLOCK 0x0C ; En esta posición empieza la RAM de usuari
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
Retardo_20s
ENDC

#DEFINE LED PORTB,0

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

ORG 0
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
bcf LED ; Línea del LED configurada como salida.
bcf STATUS,RP0 ; Acceso al Banco 0.
Principal
bsf LED ; Enciende el LED
call Retardo_20s ; durante la suma de este tiempo.

bcf LED ; Lo apaga durante la suma de los siguientes
call Retardo_20s ; retardos.

goto Principal
END;
**********************************************************************************************
Retardo_20s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.

Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos maquina
 
Atrás
Arriba