Buenas a todos:
Estoy creandome una pequeña pero completa libreria de retardos y creo haberme quedado y creo haberme estancado.
El siguiente codigo es el que he creado, esta pensado para una frecuencia de reloj de 20Mhz:
; ********************************************************************************************************
; Retardos desde 10useg a 50 useg
; ********************************************************************************************************
CBLOCK
R_ContA
ENDC
Wait_50useg
movlw d'XXX'
goto Bucle_Microseg
Wait_40useg
movlw d'XXX'
goto Bucle_Microseg
Wait_20useg
movlw d'XXX'
goto Bucle_Microseg
Wait_10useg
movlw d'XXX'
; ********************************************************************************************************
; Bucle de Retardo Simple
; ********************************************************************************************************
Bucle_Microseg
movwf R_ContA
Bucle_Interno
decfsz R_ContA,F
goto Bucle_Interno
return
Teoricamente esta seria la manera de crear una mini-libreria de retardos de entre 10 y 50 microsegundos. ¿Como puedo calcular el valor de XXX para obtener los retardos deseados?. Todo esto teniendo en cuenta que funcionaria a una frecuencia de 20Mhz por lo que 1 ciclo maquina duraria 200 nanosegundos.
La llamada CALL al retardo 2 Ciclos Maquina
movimiento de XXX a W 1 Ciclo Maquina
El salto goto al bucle 2 Ciclos Maquina
movimiento de W a R_ContA 1 Ciclo Maquina
decremento R_ContA 1 Ciclo Maquina
El salto o bien a Bucle_Interno o bien el return 2 Ciclos Maquina
En total 9 ciclos Maquina = 1,8 microseg
Por lo que deduzco que la constante XXX vendria dada por la formula
XXX= (TIEMPO-9)/0,2
Ejemplo, para obtener el valor de XXX para un retardo de 10microsegunos
XXX =(10-9)/0,2=5
¿Seria correcta esta deduccion?
Un saludo
Estoy creandome una pequeña pero completa libreria de retardos y creo haberme quedado y creo haberme estancado.
El siguiente codigo es el que he creado, esta pensado para una frecuencia de reloj de 20Mhz:
; ********************************************************************************************************
; Retardos desde 10useg a 50 useg
; ********************************************************************************************************
CBLOCK
R_ContA
ENDC
Wait_50useg
movlw d'XXX'
goto Bucle_Microseg
Wait_40useg
movlw d'XXX'
goto Bucle_Microseg
Wait_20useg
movlw d'XXX'
goto Bucle_Microseg
Wait_10useg
movlw d'XXX'
; ********************************************************************************************************
; Bucle de Retardo Simple
; ********************************************************************************************************
Bucle_Microseg
movwf R_ContA
Bucle_Interno
decfsz R_ContA,F
goto Bucle_Interno
return
Teoricamente esta seria la manera de crear una mini-libreria de retardos de entre 10 y 50 microsegundos. ¿Como puedo calcular el valor de XXX para obtener los retardos deseados?. Todo esto teniendo en cuenta que funcionaria a una frecuencia de 20Mhz por lo que 1 ciclo maquina duraria 200 nanosegundos.
La llamada CALL al retardo 2 Ciclos Maquina
movimiento de XXX a W 1 Ciclo Maquina
El salto goto al bucle 2 Ciclos Maquina
movimiento de W a R_ContA 1 Ciclo Maquina
decremento R_ContA 1 Ciclo Maquina
El salto o bien a Bucle_Interno o bien el return 2 Ciclos Maquina
En total 9 ciclos Maquina = 1,8 microseg
Por lo que deduzco que la constante XXX vendria dada por la formula
XXX= (TIEMPO-9)/0,2
Ejemplo, para obtener el valor de XXX para un retardo de 10microsegunos
XXX =(10-9)/0,2=5
¿Seria correcta esta deduccion?
Un saludo