miércoles, 5 de diciembre de 2018

Delay

Delay o Retardo

El retardo normalmente se ve representado como el diferencial de tiempo que se establece entre la señal de salida y de entrada de un dispositivo, en otras palabras es el tiempo que tarda una señal en producirse; en la informática es el tiempo requerido que tarda en enviarse un paquete de datos
Resultado de imagen para delay}

Aquí hay un parpadeo de LED usando TIMER1

         LIST     p=16f628          
         #include <p16f628.inc>      
         errorlevel -302  
         __CONFIG  _INTRC_OSC_NOCLKOUT & _MCLRE_ON  &  _LVP_OFF & _WDT_OFF & _PWRTE_ON  & _BODEN_ON  
 
        
         #DEFINE TMR1_IF     PIR1, TMR1IF
         #DEFINE TMR1_ON     T1CON, TMR1ON
         
         #DEFINE LED         PORTB,0
         
         CBLOCK  0x20
             CounterA
             ENDC
 
 RELOAD=.3036    ; Value to load in TMR1<H:L> to produce ~500mSec delay
             
         ORG     0
         ;
         ;       BANK1 register setup
         ;       ====================
         BANKSEL TRISB
         CLRF    TRISB
         
         ;
         ;       BANK0 register setup
         ;       ====================
                 ;
                 ;   Clear I/Os
                 ;   ----------
         BANKSEL PORTB
         CLRF    PORTB 
                 ;
                 ;   Set TIMER1
                 ;   ----------
         MOVLW   b'00110000'
                 ; xx------ unimplemented
                 ; --11---- prescaler 1:8
                 ; ----0--- Timer1 osc = off
                 ; -----x-- ignored when Timer1 osc = off
                 ; ------0- Clock source = internal (Fosc/4)
                 ; -------0 Stop timer1
         MOVWF   T1CON
 
 
 START   ;
         ;       Main program
         ;       ------------
         ;
         ;       Just a LED blink on PORTB.0
         ;
         BSF     LED
         CALL    DELAY
         BCF     LED
         CALL    DELAY
         GOTO    START                
 
 
 DELAY   ;
         ;       1 Sec delay routine using Timer1
         ;       --------------------------------
         ;
         ;       With current Timer1 setting (Prescaler 1:8, Reload 3036)
         ;       a timer overflow happen each 500mSec, so we just
         ;       repeat it twice
         ;
         MOVLW   .2          ; 
         MOVWF   CounterA    ; CounterA = 2   
 DO_DELAY                    ;
         BCF     TMR1_ON     ; Stop Timer1
         BCF     TMR1_IF     ; Clear Timer1 overflow flag
         MOVLW   LOW(RELOAD) ; Load
         MOVWF   TMR1L       ;   Timer1
         MOVLW   HIGH(RELOAD);   with    
         MOVWF   TMR1H       ;   Reload Value
         BSF     TMR1_ON     ; Start Timer1
         BTFSS   TMR1_IF     ; Timer1 Overflow??
         GOTO    $-1         ; --- No, wait again
                             ; YES,
         DECFSZ  CounterA,; Decrement CounterA and see if = 0
         GOTO    DO_DELAY    ; CounterA<>0, so, do it again
         RETURN              ; done, getout of here
         end       

0 comentarios:

Publicar un comentario