No puedo hacer retardos con pic 16f628

Hola de nuevo, aquí con un gran problema con este pic, debido a que al querer hacer un retardo, este no funciona, el pic está trabajando con el oscilador interno de 4Mhzy alquerer usar los retardos con la libreria del mplab... no funcionan... deberia de ser de 20 segundos y termina siendo sólo de un segundo... este es el suprograma de retardo de 20 segundos que estoy usando:
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

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


No quiso funcionar en la libreria, así que lo use como subprograma común y corriente y aun asi tampoco qiere funcionar :S, la verdad es que no se me ocurre de que otra forma hacer que funcione el retardo.

Por cierto asi stan los bits de configuración:

__CONFIG _LVP_OFF & _MCLRE_ON & _BOREN_ON & _CP_OFF & _PWRTE_ON & _WDT_ON & _INTRC_OSC_NOCLKOUT

ahi cualquier cosa que puedan aportar, gracias :)
 
Hola:

Para 20 segundos a 4 MHz, su código es este.
Código:
; Delay = 20 seconds ; Clock frequency = 4 MHz  ; Actual delay = 20 seconds = 20000000 cycles ; Error = 0 %  	cblock 	d1 	d2 	d3 	endc  Delay 			;19999992 cycles 	movlw	0xB5 	movwf	d1 	movlw	0x99 	movwf	d2 	movlw	0x2C 	movwf	d3 Delay_0 	decfsz	d1, f 	goto	$+2 	decfsz	d2, f 	goto	$+2 	decfsz	d3, f 	goto	Delay_0  			;4 cycles 	goto	$+1 	goto	$+1  			;4 cycles (including call) 	return

En este enlace, puedes hacer lo que quieras.
http://www.golovchenko.org/cgi-bin/delay

Saludo.
 
Atrás
Arriba