Professional Documents
Culture Documents
;;
;; Libreria de subrutinas de retraso en microsegundos
;;
;; Escrito por Andrew M. Bishop y editado por Almejandro para el espa�ol
;;
;;--------------------------------------------------------------------------------
;;
;; Variables requeridas / Constantes para la funcion de retraso en microsegundos
;;
;; Constantrs: CLOCK - La velocidad del PIC en Hz
;;
;; Variables: delay_temp - Guarda un dato temporal
;;
;;--------------------------------------------------------------------------------
;;--------------------------------------------------------------------------------
;;
;; Subrutina para retraso por un numero de microsegundos (para diferentes
velocidades del reloj)
;;
;; Parametros: w (in) - En W el numero de microsegundos que queremos
esperar
;;
;;--------------------------------------------------------------------------------
CBLOCK
delay_temp
ENDC
IF CLOCK==4000000
;; Reloj a 4 MHz
;; Retraso Minimo = 25 us
Delay_us_0 ;
movwf delay_temp ;
movlw b'00000011' ;
andwf delay_temp,W ;
btfsc STATUS,Z ;
goto delay_us_0mod4 ;
addlw -1 ;
btfsc STATUS,Z ;
goto delay_us_1mod4 ;
addlw -1 ;
btfsc STATUS,Z ;
goto delay_us_2mod4 ;
delay_us_3mod4
delay_us_1mod4
nop ;
movlw .5 ;
goto delay_4us ;
delay_us_0mod4
goto $+1 ;
goto $+1 ;
delay_us_2mod4
nop ;
movlw .5 ;
ENDIF ; CLOCK==4000000
;;--------------------------------------------------------------------------------
IF CLOCK==8000000
;; Reloj a 8 MHz
;; Retraso Minimo = 9us para pares ==== 8 us para impares
ENDIF ; CLOCK==8000000
;;--------------------------------------------------------------------------------
IF CLOCK==16000000
;; Reloj a 16 MHz
;; Retraso Minimo = 3 us
;; Total = delay (including load and call overhead)
Delay_us_0
delay_1us ; static delay 4 ins = 1us
goto $+1 ; 2 ins
goto $+1 ; 1 ins
addlw -2 ; 1 ins
ENDIF ; CLOCK==16000000
;;--------------------------------------------------------------------------------
IF CLOCK==20000000
;; Reloj a 20 MHz
;; Retraso Minimo = 2 us
Delay_us_0
delay_1us ; static delay 3 ins = 0.6us
goto $+1 ; 2 ins
addlw -1 ; 1 ins
nop
ENDIF ; CLOCK==20000000
;;--------------------------------------------------------------------------------