TIMER0 (T0) (81h,181h) R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W RBPU INTEDG T0CS T0SE PSA Pre-Scaler Asignament PSA Pre-Scaler para TMR0 Pre-Scaler para WDT R/W R/W R/W PS2 PS1 PS0 Pre-Scaler PS2 PS1 PS0 0 1:2 0 0 0 1 1:4 0 0 1 T0CS 1:8 0 1 0 Interna con Fosc/4 0 1:16 0 1 1 Externa en T0CKI 1 1:32 1 0 0 T0SE 1:64 1 0 1 si TOCS=1 T0 Clock Souce T0 Source Edge1 0->1 en T0CKI 0 1:128 1 1 0 1->0 en T0CKI 1 1:256 1 1 1 INTCON (0Bh,8Bh,10Bh,18Bh) R/W GIE Global Interrupt Enable R/W R/W R/W R/W R/W R/W R/W PEIE T0IE INTE RBIE T0IF INTF RBIF GIE T0 Interrupt Enable T0IE Interrupciones deshabilitadas 0 Int. por T0 deshabilitada 0 Interrupciones habilitadas 1 Int. por T0 habilitada 1 T0 Interrupt Flag T0, clk interno, sin pre-scaler EPROM bit R/W Contador ascendente 8-bit de Timer 0 (01h,101h) OPTION_REG R/W 1Sólo Características: •Contador ascendente de 8-bits •Pre-scaler desde 1:2 hasta 1:256 •Timer: entrada del reloj del sistema TCY=4*Tosc=(Fosc/4)-1 tDESBORDE=4*Tosc*(28-TMR0)*N ;Pre-scaler 1:N •Contador: entrada externa por T0CKI, con flanco ascendente o descendente •Se muestrea T0CKI en Q1 y Q3. El retardo entre TCKI y TMR0 está entre 3TOSC y 7TOSC •Registro TMR0 de lectura/escritura. •Se actualiza en Q4 del siguiente TCY •La escritura de TMR0 produce un retardo de 2TCY en el contador, y el pre-scaler borrado (si PSA=0) •Petición de Interrupción (T0IF=1) al desbordar TMR0 •Es desactivado en modo SLEEP, por lo que no puede despertar al µC R/W TMR0 T0IF T0 no ha desbordado2 0 T0 ha desbordado 1 2Debe limpiarse por software bcf INTCON,T0IE bsf STATUS,RP0 movlw 0x07 movwf OPTION_REG bcf STATUS,RP0 ... movlw 0xFC movwf TMR0 bcf INTCON,T0IF t0 btfss INTCON,T0IF goto t0 T0, clk externo, flanco 1->0, sin pre-scaler ;T0IE=0 ;Seleccion banco1,3 ;Timer, Pre-scaler 1:256 ;Seleccion banco0,2 ;TMR0=-4 ;T0IF=0 ;(4MHz)Tiempo 4*256*1us=1.024ms Interrupción por T0, clk interno, sin pre-scaler INTT0 org 4 goto INTT0 ... bsf STATUS,RP0 movlw 0x07 movwf OPTION_REG bcf STATUS,RP0 movlw 0x38 movwf TMR0 movlw 0xA0 movwf INTCON ... ... movlw 0x38 movwf TMR0 bcf INTCON,T0IF ... ... retfie ;Seleccion banco1 ;Timer, Pre-scaler 1:256 ;Seleccion banco0 ;TMR0=-200->(4MHz)200*256*1us=51.2ms ;GIE=T0IE=1,T0IF=0 ;guarda w y status ;TMR0=-200->(4MHz)200*256*1us=51.2ms ;realiza algun proceso ;restaura w y status TIMER1 (T1) Características: •Contador ascendente 16-bits TMR1={TMR1H, TMR1L} •Pre-scaler desde 1:1 hasta 1:8. Es limpiado en instrucciones de escritura a TMR1H, TMR1L •Petición de Interrupción (TMR1IF=1) al desbordar TMR1 •Habilitación/deshabilitación con TMR1ON del T1CON •Tres modos de funcionamiento, según TMR1CS y T1SYNC del T1CON •Timer síncrono (TMR1CS=0): entrada del reloj del sistema TCY=4*Tosc=(Fosc/4)-1 tDESBORDE=4*Tosc*(216-TMR1)*N ;Pre-scaler 1:N •Contador síncrono (TMR1CS=1, T1SYNC=0): flanco ascendente en entrada externa por T1CKI: •La entrada T1CKI debe estar a nivel alto o bajo al menos durante 2TOSC*N (periodo mínimo 4TOSC*N) •Contador asíncrono (TMR1CS=1, T1SYNC=1) por flanco ascendente en T1CKI •Oscilador de cristal externo (T1OSCEN=1), usando T1OSCI, T1OSCO (0Eh) R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W Byte bajo del contador ascendente 16-bit T1CON U U - - (10h) T1 On/off R/W R/W R/W R/W R/W R/W T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON T1 Clock Source TMR1ON TMR1CS 0 Interna con Fosc/4 0 No para (On) el T1 1 Externa en T1CKI 1 T1 SYNChronous T1SYNC1 Contador síncrono 0 Contador asíncrono 1 T1 Oscillator Enable T1OSCEN T1 Clock Pre-scaler T1CPKPS1 T1CPKPS0 1:1 0 0 1:2 0 1 1:4 1 0 1:8 1 1 R/W INTCON R/W GIE (0Bh,8Bh,10Bh,18Bh) Deshabilitado 0 Habilitado 1 R/W R/W R/W R/W R/W 1TMR1CS=1 Para (Off) el T1 •Parar el T1 (TMR1ON=0) durante la lectura/escritura PEripherical Interrupt Enable PEIE Interrupciones deshabilitadas 0 Int. periféricos deshabilitadas 0 Interrupciones habilitadas 1 Int. periféricos habilitadas 1 *PIC6F87X. La posición de los bits dependen del dispositivo GIE (8Ch) PIR1* (0Ch) R/W R/W R/W R/W PSPIE ADIE RCIE TXIE R/W R/W R/W R/W PSPIF ADIF RCIF TXIF T1 Interrupt Enable bcf T1CON,TMR1ON movf TMR1H,W movwf TMPH movf TMR1L,W movwf TMPL bsf T1CON,TMR1ON R/W PEIE T0IE INTE RBIE T0IF INTF RBIF Global Interrupt Enable PIE1* •En modo síncrono puede ser usado por los periféricos CCP (modo captura o comparación) •El T1-síncrono durante SLEEP desactiva TMR1H,TMR1L •El T1-asíncrono durante SLEEP sigue activo TMR1H, TMR1L por lo que puede ser usado: •Despertar el µC al desbordar (TMR1IF=1) •Reloj de tiempo real (RTC) con cristal de 32’768kHz •La lectura/escritura de TMR1H, TMR1L se realiza con dos accesos secuenciales a los registros, pudiendose ocasionar problemas durante los accesos en que TMR1H es incrementado. Soluciones: Byte alto del contador ascendente 16-bit TMR1IE R/W R/W R/W R/W R/W R/W SSPIF CCP1IF TMR2IF TMR1IF T1 Interrupt Flag ;TMPL=TMR1L ;T1 On clrf TRM1L movlw 0x4F movwf TMR1H movlw 0xFF movwf TMR1L R/W SSPIE CCP1IE TMR2IE TMR1IE R/W ;T1 Off ;TMPH=TMR1H bcf T1CON,TMR1ON movlw 0x4F movwf TMR1H movlw 0xFF movwf TMR1L bsf T1CON,TMR1ON •Para la escritura de T1 sin parar: TMR1IF Int. por T1 deshabilitada 0 T1 no interrumpe2 0 Int. por T1 habilitada 1 T1 interrumpe 1 limpiadarse por software TMR1L R/W No tiene efecto si TMR1CS=0 (0Fh) R/W 2Debe TMR1H ;Evita cambio del TMR1H ;TMR1H=0x4F ;TMR1L=0xFF •Para la lectura de T1 sin parar: lee_t1 movf TMR1H,W movwf TMPH movf TMR1L,W movwf TMPL movf TMR1H,W subwf TMPH,W btfss STATUS,Z goto lee_t1 ;TMPH=TMR1H ;TMPL=TMR1L ;W=TMR1H ;Si TMR1H!=TMRPH ;repite lectura ;T1 Off ;TMR1H=0x4F ;TMR1L=0xFF ;T1 On TMR2 TIMER2 (T2) R/W PR2 R/W R/W R/W R/W R/W R/W Contador ascendente 8-bit de Timer2 (11h) Características: •Contador ascendente de 8-bits en TMR2. Se resetea cuando EQ=1(TMR2=PR2). TMR2 cuenta desde 0 a PR2 •Pre-scaler 1:2, 1:4, 1:16 y post-scaler 1:1 a 1:16 Limpiados en instrucciones de escritura a TMR2 y T2CON, o por RESET •Habilitación/deshabilitación con TMR2ON del T2CON •Petición de Interrupción (TMR2IF=1) cuando PR2=TMR2 (EQ=1) Npost veces (1:Npost del post-scaler) tTMR2IF=1=4*Tosc*(PR2+1)*Npre*Npost ;Pre-scaler 1:Npre Post-scaler 1:Npost •Durante modo SLEEP no se incrementa TMR2 •Puede ser usado por los periféricos CCP (modo PWM) y SSP R/W R/W (12h) R/W R/W R/W R/W R/W R/W Registro de periodo 8-bit de Timer2 (92h) T2CON R/W U R/W - R/W R/W R/W R/W R/W R/W TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 T2 On/off T2 Clock Pre-scaler TMR2ON T2CKPS1 T2CKPS0 Para (Off) el T2 0 1:1 0 0 No para (On) el T2 1 1:4 0 1 1:16 1 X T2 Output Post-scaler TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 1:1 0 0 0 0 1:2 0 0 0 1 1:3 0 0 1 0 1:16 1 1 1 1 R/W INTCON R/W GIE (0Bh,8Bh,10Bh,18Bh) R/W R/W R/W R/W R/W R/W PEIE T0IE INTE RBIE T0IF INTF RBIF GIE PEripherical Interrupt Enable PEIE Interrupciones deshabilitadas 0 Int. periféricos deshabilitadas 0 Interrupciones habilitadas 1 Int. periféricos habilitadas 1 *PIC6F87X. La posición de los bits dependen del dispositivo Global Interrupt Enable PIE1* (8Ch) PIR1* (0Ch) R/W R/W R/W R/W PSPIE ADIE RCIE TXIE R/W R/W R/W R/W PSPIF ADIF RCIF TXIF T2 Interrupt Enable R/W R/W R/W R/W SSPIE CCP1IE TMR2IE TMR1IE R/W R/W R/W R/W SSPIF CCP1IF TMR2IF TMR1IF TMR2IE T2 Interrupt Flag TMR2IF Int. por T2 deshabilitada 0 T2 no interrumpe 0 Int. por T2 habilitada 1 T2 interrumpe 1 •TMR2 cuenta desde 0 a PR2 cuentas (1+PR2 cuentas), sin necesidad de operaciones de escritura a TMR2, por lo que permite mayor precisión de tiempos que T0 o T1 (sin usar CCP) CNT10 EQU 0X20 ;GPR en banco0 org 0 goto INIT org 4 goto INTT2 INIT org 0x10 ... banksel T2CON movlw H'C0' movwf INTCON movlw H'00' movwf PIR1 movlw B'00100001' movwf T2CON bsf STATUS,RP0 movlw H'02' movwf PIE1 movlw D'99' movwf PR2 bcf STATUS,RP0 movlw D'10' movwf CNT10 bsf T2CON,TMR2ON ... INTT2 i2 ... banksel CNT10 decfsz CNT10,F goto i2 movlw D'10' movwf CNT10 ... ... bcf PIR1,TMR2IF ... retfie ;Banco0 ;GIE=PEIE=1, T0IE=INTE=RBIE=0 ;TMR2IF=0, resto=0 (16F87X) ;Postscaler 1:5, T2 OFF,Prescaler=1:4 ;Banco1 ;TRM2IE=1, resto=0 (16F87X) ;0<=TMR2<=PR2 (TMR2 cuenta 100) ;Banco0 ;CNT10=10 ;T2 ON ;(4MHz)1us*100*4*5=2ms ‘exactos’ ;Salva w,status ;Banco0 ;Si (--CNT10!=0) ; finaliza ;CNT10=10 ;Procesado cada 2ms*10=20ms(50Hz) ‘exactos’ ;TMR2IF=0 (16F87X) ;Recupera w,status