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
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,F ; 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