Temporizador Timer 1

June 24, 2007 at 8:17 pm | Posted in Tutorial | 10 Comments

El Timer 1 es un módulo temporizador/contador de 16 bits, que consiste en dos registros de 8 bits (TMR1H y TMR1L) que son de lectura y escritura. Este módulo incrementa su cuenta desde 0x000 hasta 0xFFFF y al desbordarse vuelve a 0x0000. Al presentarse el desborde la bandera de interrupción TMR1IF se pone a 1 y, si está habilitada, la interrupción se presenta.

Este módulo al igual que el Timer 0 puede funcionar en modo temporizador y en modo contador. En modo temporizador el par de registros TMR1 se incrementa en cada ciclo de instrucción, este modo se selecciona poniendo a 0 el bit TMR1CS del registro T1CON. En modo contador el par de registros TMR1 se incrementa en cada flanco ascendente de una señal de reloj externa, este modo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON.

El preescalador del Timer 1 tiene un valor máximo de 8 y se selecciona con los bits T1CKPS1:T1CKPS0 de la siguiente manera:

Lea el artículo completo en el blog Circuitos electronicos.

10 Comments »

RSS feed for comments on this post. TrackBack URI

  1. ES bueno que exista gente como el creador de esta blog…..

    oye un favor será posible que me proporciones un diagrama electrico completo con este codigo.

    de antemano….

    gracias

  2. Muy buen tuto picman!

    seria bueno que el paso siguiente fuera una interrupcion por TMR1 🙂

    Suerte! 😀

  3. Gracias por la sugerencia mabauti, da gusto verte fuera del foro 😛 Lo tendre muy en cuenta!

  4. Hola gracias por la ayuda de este blog, es muy importante, me gustaria que me ayudes con un problemilla que tengo, quisiera conectar un adc0808 a un pic 16f628a para tomar los datos de un termometro como el LM35 pero no se como deberia ir el codigo ni como conectar el adc. me puedes dar una mano?

  5. Muy bueno me sirve bastante para la esc…, tendrias algun programa para pasar de decimala binario o a hexa , .. graxDD

  6. Hola estoy quiero realizar un boton que cuando este activado de una frecuencia de 4khz, se pulsa el mismo boton y da una frecuencia de 2khz, se vuelve a pulsar y da una frecuencia de 1khz, se vuelve a pulsar y da 500hz, con el mismo boton (RA0) y una salida unicamente(RB3) utilizando pwm, para el pic 16f628a, cuando se activa suena un buzzer, hasta que se pulsa el mismo boton y se apaga(Ra0). este es mi codigo pero no se porque no jala

    #INCLUDE P16f628A.INC

    CONTADOR EQU 0x20
    CONT EQU 0x21
    CONT2 EQU 0x22
    CONT3 EQU 0x23

    org 0x00 ;Vector reset
    goto INICIO0

    INICIO0 movlw 0x00
    movwf CONTADOR
    INICIO movlw b’00000111′
    movwf CMCON
    movlw b’00000000′
    movwf OPTION_REG
    bsf STATUS,RP0
    movlw 0xFF
    movwf TRISA
    movlw 0x00
    movwf TRISB
    bcf STATUS,RP0
    clrf PORTA
    clrf PORTB
    movlw 0x08
    movwf PCON

    PRINCIPAL bcf STATUS,RP0
    btfsc PORTA,0
    goto INICIO
    call RETARDO_20ms
    btfsc PORTA,0
    goto INICIO0

    movf CONTADOR,W
    andlw b’00000111′
    addwf PCL,F

    TABLA goto FREC4
    goto FREC2
    goto FREC1
    goto FREC0
    goto APAGA
    goto INICIO0

    FREC4 clrwdt
    bsf STATUS,RP0
    movlw .249
    movwf PR2 ;Inicializa CCP1
    bcf STATUS,RP0
    movlw 0x04
    movwf T2CON ;Poscala 1:1, timer2 on, preescala 1
    movlw 0x3E
    movwf CCPR1L ;Inicia el ciclo de trabajo en 50%
    movlw 0x3C
    movwf CCP1CON ;Inicia CCP del PWM

    bsf PORTB,3
    incf CONTADOR
    goto PRINCIPAL

    FREC2 clrwdt
    bcf STATUS,RP0
    clrf CCP1CON
    clrf T2CON
    call RETARDO_30mms
    bsf STATUS,RP0
    movlw 0x7C
    movwf PR2 ;Inicializa CCP1
    bcf STATUS,RP0
    movlw 0x05
    movwf T2CON ;Poscala 1:1, timer2 on, preescala 4
    movlw 0x3E
    movwf CCPR1L ;Inicia el ciclo de trabajo en 100%
    movlw 0x3C
    movwf CCP1CON ;Inicia CCP del PWM

    bsf PORTB,3
    ;call RETARDO_3s

    ;clrf CCP1CON
    ;clrf T2CON
    incf CONTADOR
    goto PRINCIPAL

    FREC1 clrwdt
    bcf STATUS,RP0
    clrf CCP1CON
    clrf T2CON
    call RETARDO_30mms
    bcf STATUS,RP0
    clrf CCP1CON
    clrf T2CON
    call RETARDO_30mms
    bsf STATUS,RP0
    movlw 0xF9
    movwf PR2 ;Inicializa CCP1
    bcf STATUS,RP0
    movlw 0x05
    movwf T2CON ;Poscala 1:1, timer2 on, preescala 4
    movlw 0x7D
    movwf CCPR1L ;Inicia el ciclo de trabajo en 100%
    movlw 0x3F
    movwf CCP1CON ;Inicia CCP del PWM

    bsf PORTB,3
    ;call RETARDO_3s

    ;clrf CCP1CON
    ;clrf T2CON
    incf CONTADOR
    goto PRINCIPAL

    FREC0 clrwdt
    clrf CCP1CON
    clrf T2CON
    call RETARDO_30mms
    bsf STATUS,RP0
    movlw 0x7C
    movwf PR2 ;Inicializa CCP1
    bcf STATUS,RP0
    movlw 0x07
    movwf T2CON ;Poscala 1:1, timer2 on, preescala 16
    movlw 0x3E
    movwf CCPR1L ;Inicia el ciclo de trabajo en 100%
    movlw 0x3C
    movwf CCP1CON ;Inicia CCP del PWM

    bsf PORTB,3
    ;call RETARDO_3s

    ;clrf CCP1CON
    ;clrf T2CON
    incf CONTADOR
    goto PRINCIPAL

    APAGA bcf STATUS,RP0
    clrf CCP1CON
    clrf T2CON
    bcf PORTB,3
    goto INICIO0

    RETARDO_30mms
    movlw .3 ;N=255
    movwf CONT
    CICLO_50mms
    clrwdt
    decfsz CONT,f ;1*(N-1)+2
    goto CICLO_50mms ;2*(N-1)
    clrwdt
    return

    RETARDO_20ms
    movlw .21 ;M=60
    movwf CONT2
    CICLO2_20ms
    movlw .237 ;N=11
    movwf CONT
    CICLO_20ms
    clrwdt
    decfsz CONT,f
    goto CICLO_20ms
    decfsz CONT2,f
    goto CICLO2_20ms
    nop
    clrwdt
    return
    END

  7. Muy bueno mano, nos ayudas un buen a los novatos y despistados como yo, echale un buen de ganas y sigue como vas, oye, en la escuela nos pusieron a realizar un proyecto sencillo de un led infrarojo con su respectivo receptor, cuando el haz se bloquee el PIC debe de advertir dicha accion, y ando bien perdido, se que se debe hacer con PWM, alguna idea?

  8. Hola, tengo una pregunta, el Timer 1 puede seguir contando cuando se produce una interrupción externa en RB0, o deja de contar, y empieza de nuevo cuando regresa de la interrupción.
    Es que necesito hacer un encoder para control de velocidad de un motor de DC. Lo que estaba pensando es contar el tiempo entre dos flancos ascendentes por la interrupción externa por el RB0.
    Seria de mucha ayuda si me pudieras echar la mano con esto.

    Muchas gracias por la ayuda y por este blog que esta genial.

  9. hola.
    tengo muchos deseos de aprender a programar , partiendo con el 16f628a, lo del led lo tengo clarísimo, pero no sé como seguir avanzando. de donde me puedo afirmar para avanzar un poco más?. gracias

  10. Estoy feliz de encontrar blogs donde hallar informacion tan util como esta. Gracias por facilitar este articulo.

    Saludos


Leave a comment

Create a free website or blog at WordPress.com.
Entries and comments feeds.