Está en la página 1de 12

Curso: Microcontroladores y Microprogramación – Clases Prácticas

El Timer 0
Características
 Temporizador/contador de 8 bits
 Permite lectura y escritura
 Pre-escalador programable de 8 bits
 Fuente de reloj seleccionable externa o interna
 Puede producir interrupción por desbordamiento (Cambio de FFh a 00h)
 Flanco seleccionable para el reloj externo

Esquema Descriptivo

Registro OPTION_REG

T0CS – Selección de la señal de reloj del timer 0


1 – Los pulsos para el timer 0 ingresan por el pin RA4.
0 - Reloj interno (Fosc/4).
T0SE – Selección del flanco de la señal en el pin
1 – Flanco de bajada en el pin
0 - Flanco de subida en el pin
PSA – Bit de asignación de pre-escalador
1 – El pre-escalador se asigna al wathdog
0 - El pre-escalador se asigna al timer 0
PS2, PS1, PS0 – Selección del factor de pre-escalamiento

1
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Generación de señal periódica con Timer 0 por consulta


#INCLUDE P16F877A.INC INITC
CALL INITC BANKSEL TRISC
CALL INIT_TMR0 CLRF TRISC
BUCLE BANKSEL PORTC
CLRF TMR0 CLRF PORTC
ESPERAR_DESBORDE RETURN
BANKSEL INTCON INIT_TMR0
BTFSS INTCON, T0IF BANKSEL TMR0
GOTO ESPERAR_DESBORDE CLRF TMR0
MOVLW 0XFF CLRF INTCON
XORWF PORTC BANKSEL OPTION_REG
BCF INTCON, T0IF MOVLW 0xC0 ; Reloj interno con pre-escalador 1:2
GOTO BUCLE MOVWF OPTION_REG
RETURN
END
El intervalo generado T se halla con la fórmula
T = N*M*(4/Fosc)
N – Número de incrementos del Timer 0
1/M – Valor del pre-escalador
Fosc - Frecuencia de reloj del microcontrolador.
El valor inicial del timer 0 es: VI = 256 – N.

Generación de señal periódica con Timer 0 por interrupción

#INCLUDE P16F877A.INC INITC


GOTO PROGRAMA BANKSEL TRISC
ORG 0X0004 CLRF TRISC
GOTO INTERRUPCION BANKSEL PORTC
PROGRAMA CLRF PORTC
CALL INITC RETURN
CALL INIT_TMR0 INIT_TMR0
CALL INIT_INT BANKSEL TMR0
BUCLE CLRF TMR0
GOTO BUCLE CLRF INTCON
INTERRUPCION BANKSEL OPTION_REG
BANKSEL TMR0 MOVLW 0xC0 ; Reloj interno con pre-escalador 1:2
CLRF TMR0 MOVWF OPTION_REG
MOVLW 0XFF RETURN
BANKSEL PORTC INIT_INT
XORWF PORTC BANKSEL INTCON
BANKSEL INTCON BSF INTCON, T0IE
BCF INTCON, T0IF BSF INTCON, GIE
RETFIE RETURN
END

2
Curso: Microcontroladores y Microprogramación – Clases Prácticas

El Timer 1
Características
 Temporizador/contador de 16 bits
 Permite lectura y escritura
 Fuente de reloj seleccionable externa o interna
 Puede producir interrupción por desbordamiento (Cambio de FFFFh a 0000h)
 Se puede reinicializar desde los módulos CCP

Registro contador de 16 bits

Modos de operación
• Con reloj interno
• Con reloj externo
• Con reloj externo y circuito oscilador

3
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Esquema Descriptivo

Registro T1CON

T1CKPS1, T1CKPS0 – Bits de selección del factor de pre-escalamiento del timer 1.

T1OSCEN – Bit de habilitación del oscilador del timer 1


1 – Oscilador habilitado.
0 – Oscilador Inhabilitado.
/T1SYNC – Bit de selección de sincronización de la señal de reloj externa del Timer 1.
Cuando TMR1CS = 1:
1 – No sincronizar.
0 - Sincronizar.
Cuando TMR1CS=0, este bit es ignorado.
TMR1CS – Bit de selección de la fuente de la señal de reloj del Timer 1.
1 – Cuenta los pulsos en el pin T1CKI (en el flanco de subida)
0 – Cuenta los pulsos del reloj interno del microcontrolador.
TMR1ON – Bit de arranque del Timer1.
1 – Arranca el Timer 1.
0 – Detiene al Timer 1.

4
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Ejemplo de Aplicación del Timer1 como Temporizador


#INCLUDE P16F877A.INC INITC INVERTIR_SALIDA
CALL INITC BANKSEL TRISC MOVLW 0XFF
CALL INIT_TMR1 CLRF TRISC BANKSEL PORTC
BUCLE BANKSEL PORTC XORWF PORTC
CALL BORRAR_TIMER CLRF PORTC RETURN
ESPERAR_DESBORDE RETURN BORRAR_TIMER
BANKSEL PIR1 INIT_TMR1 BANKSEL TMR1H
BTFSS PIR1, TMR1IF BANKSEL TMR1H CLRF TMR1H
GOTO ESPERAR_DESBORDE CLRF TMR1H CLRF TMR1L
CALL INVERTIR_SALIDA CLRF TMR1L RETURN
CALL BORRAR_BANDERA MOVLW 0x30 ; Reloj interno BORRAR_BANDERA
GOTO BUCLE BANKSEL T1CON ;Pre-escalador BANKSEL PIR1
MOVWF T1CON ; 1:8 BCF PIR1, TMR1IF
BSF T1CON,TMR1ON;Arranque RETURN
RETURN END
El intervalo generado T se halla con la fórmula
T = N*M*(4/Fosc)
N – Número de incrementos del Timer 1
1/M – Valor del pre-escalador
Fosc - Frecuencia de reloj del microcontrolador.
El valor inicial del timer 0 es: VI = 65536 – N.

Lectura del Timer 1 en corrida libre


; Todas las interrupciones están inhabilitadas
MOVF TMR1H, W ; Leer el byte alto
MOVWF TMPH ;
MOVF TMR1L, W ; Leer el byte bajo
MOVWF TMPL ;
MOVF TMR1H, W ; Leer el byte alto
SUBWF TMPH, W ; Sustraer
BTFSC STATUS,Z ; ¿Diferencia no es 0?
GOTO CONTINUE ; Buena lectura de 16 bits
; TMR1L ha generado acarreo entre las lecturas del byte alto y bajo.
; La nueva lectura será correcta.
MOVF TMR1H, W ; Leer byte alto
MOVWF TMPH ;
MOVF TMR1L, W ; Leer byte bajo
MOVWF TMPL ;
; Si se requiere, se vuelven a habilitar las interrupciones
CONTINUE ; Continuación del código

Escritura del Timer 1 en corrida libre


Primero se borra TMR1L para asegurar que hay muchos ciclos de reloj antes de que
se genere acarreo al registro TMR1H. Luego, se carga TMR1H, y finalmente se carga
TMR1L.
; Todas las interrupciones están inhabilitadas
CLRF TMR1L ; Borrar byte bajo
MOVLW HI_BYTE ; Cargar byte alto en TMR1H
MOVWF TMR1H, F ;
MOVLW LO_BYTE ; Cargar byte bajo en TMR1L
MOVWF TMR1L, F ;
; Si se requiere, se vuelven a habilitar las interrupciones
CONTINUE ; Continuación del código

5
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Lectura del Timer 1 en corrida libre


VALOR
TMR1H TMR1L PROGRAMA TMPH TMPL Error
LEIDO
80 FF MOVF TMR1H, W
81 00 MOVWF TMPH 80
81 01 MOVF TMR1L, W
81 02 MOVWF TMPL 01 8001 254
81 03 MOVF TMR1H, W
81 04 SUBWF TMPH, W
81 05 BTFSC STATUS,Z
81 06 GOTO CONTINUAR
81 07 MOVF TMR1H, W
81 08 MOVWF TMPH 81
81 09 MOVF TMR1L, W
81 0A MOVWF TMPL 09 8109 10

Escritura del Timer 1 en corrida libre


Valor a escribir: AAFF
VALOR
TMR1H TMR1L PROGRAMA Error
ESCRITO
88 55
88 56 MOVLW 0XFF
88 FF MOVWF TMR1L, F
89 00 MOVLW 0XAA
AA 01 MOVWF TMR1H, F AA01 254

Valor a escribir: AAFF


VALOR
TMR1H TMR1L PROGRAMA Error
ESCRITO
88 55
88 00 CLRF TMR1L
88 01 MOVLW 0XAA
AA 02 MOVWF TMR1H, F
AA 03 MOVLW 0XFF
AA FF MOVWF TMR1H, F AAFF 0

6
Curso: Microcontroladores y Microprogramación – Clases Prácticas

El Timer 2
El Timer 2 es de 8 bits con pre-escalador, post-escalador y un registro de periodo.
Cuando en el pre-escalador y post-escalador se colocan los valores máximos, el
intervalo de tiempo generado es el mismo que el de un timer de 16 bits.

T2CON register

TOUTPS3 - TOUTPS0 – Bits de selección del factor del post-escalamiento del Timer2

TMR2ON – Bit de arranque del Timer2.


7
Curso: Microcontroladores y Microprogramación – Clases Prácticas

1 – Timer 2 arrancado.
0 - Timer 2 parado.
T2CKPS1, T2CKPS0 - Bits de selección del factor del pre-escalamiento del Timer2

El Módulo CCP1
CCPR1H CCPR1L - Registro de 16 bits
 Registro de 16 bits de captura
 Registro de 16 bits de comparación
 Registro de ciclo de trabajo de señal PWM

CCP1CON Register

DC1B1, DC1B0 – Bits menos significativos del ciclo de trabajo (número de 10 bits).
CCP1M3 - CCP1M0 – Bits de selección del modo del módulo CCP1.
CCP1M3 - CCP1M0 Modo
0000 Módulo CCPx inhabilitado (Resetea al módulo)
0100 Modo captura, cada flanco de bajada
0101 Modo captura, cada flanco de subida
0110 Modo captura, cada 4to flanco de subida
0111 Modo captura, cada 16avo flanco de subida
Modo comparación, inicializa el pin CCP en nivel bajo, en la
1000
igualdad de la comparación setea el pin CCP (CCPIF es seteado)
Modo comparación, inicializa el pin CCP en nivel alto, en la igualdad
1001
de la comparación resetea el pin CCP (CCPIF es seteado)
Modo comparación, Genera interrupción en la igualdad de la
1010
comparación (CCPIF es seteado, el pin CCP no es afectado)
Modo comparación, Disparador de Evento Especial (CCPIF es
1011
seteado)
11xx Modo PWM

8
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Modo Captura

Modo Comparación

Disparador de
Evento Especial

9
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Modo PWM

No se puede usar el post-escalador del timer 2.

Periodo PWM
TPWM = [(PR2) + 1] • 4 • TOSC • M
(PR2) – Valor del registro de periodo
TOSC – Periodo de la señal de reloj del microcontrolador
1/M - Valor del pre-escalador de TMR2

Ciclo de Trabajo PWM


CTPWM = CT•TOSC•M
CT - (CCPR1L:CCP1CON<5:4>) – Contenido de CCPR1L y los bits 5 y 4 de CCP1CON
TOSC – Periodo de la señal de reloj del microcontrolador

Ejemplo de generación de las señales de la tabla para fosc=4MHz


Pin Periodo Ciclo de Trabajo Timer a usar Pre-escalador Con Interrupción
17 3.6 mS 25% Timer 2 y módulo CCP 1/16 No
20 80 mS 50% Timer 0 1/256 Si
30 100 mS 50% Timer 1 1/1 Si

10
Curso: Microcontroladores y Microprogramación – Clases Prácticas

Para el periodo de la señal PWM: Para el ancho de pulso de la señal PWM:

𝑇𝑃𝑊𝑀 𝐶𝑇𝑃𝑊𝑀
𝑃𝑅2 = − 1 = 224 𝐶𝑇 = = 225 = 11100001
4 ∙ 𝑇𝑜𝑠𝑐 ∙ 𝑀 𝑇𝑜𝑠𝑐 ∙ 𝑀

El valor inicial decimal calculado para PR2 El valor inicial decimal calculado para
es: 224 CCPR1L es: 56
Los dos bits menos significativos son: 01
Para el Timer 0: Para el Timer 1:
𝑇 ∙ 𝐹𝑜𝑠𝑐 𝑇 ∙ 𝐹𝑜𝑠𝑐
𝑁= = 156.25 ≈ 157 𝑁= = 50000
4∙𝑀 4∙𝑀

VI=256-157=99 VI=65536-50000=15536
El valor inicial decimal calculado es: 99 El valor inicial decimal calculado es: 15536

11
Curso: Microcontroladores y Microprogramación – Clases Prácticas

12

También podría gustarte