Aplicaciones de mC Lenguaje C- CC5x-Temporizadores
Preparado por : Juan Ignacio HuircánDepartamento de Ingeniería Eléctrica
Universidad de La Frontera
Otoño 2009
Introducción
• El µC posee 3 Módulos Timer, llamados:
– TMR0– TMR1 – TMR2
Aplicaciones de µC
• Cada uno de ellos posee diversas características
• En la programación intervienen varios registros
• Su uso puede resultar complejo dado que requieren del manejo deinterrupciones
Timer 0
• Es un Timer/counter de 8 bit
• Selector de clock interno o externo
• Interrupción de overflow de FFh a 00h
Aplicaciones de µC
• Preescalar de 8 bit configurable por software
• Selección del canto para clock externo
Como funciona un sistema genérico??
Timer
Sea el bloque
Aplicaciones de µC
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Aplicaciones de µC
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial
Aplicaciones de µC
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial
Aplicaciones de µC
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial 0xFD
Aplicaciones de µC
El timer empieza a contar los cantos dereloj a partir de la carga inicial
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial 0xFE
Aplicaciones de µC
El timer empieza a contar los cantos dereloj a partir de la carga inicial
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial 0xFF
Aplicaciones de µC
El timer empieza a contar los cantos dereloj a partir de la carga inicial
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial 0x00
Aplicaciones de µC
El timer empieza a contar los cantos dereloj a partir de la carga inicial
Como funciona un sistema genérico??
Timer
Sea el bloque
clock
Carga Inicial 0x00
Aplicaciones de µC
El timer empieza a contar los cantos dereloj a partir de la carga inicial
Cuando llega a 0xFF y pasa a 0x00, se habilita el Flag de Interrupción TMR0IF
Que es un preescalar?
clock
Divisor por 2
Es un mecanismo por el cual pasa previamente el clock antes deingresar al Timer, donde es divido. Por lo general por una potencia de 2
Aplicaciones de µC
Timer
clock
Pre-escalar
Que es un preescalar?
Es un mecanismo por el cual pasa previamente el clock antes deingresar al Timer, donde es divido. Por lo general por una potencia de 2
clock
Divisor por 4
Aplicaciones de µC
Timer
clock
Pre-escalar
Esquema del Timer 0 (simplificado)
MUX
MUX
osc
T0CS
PSA
T0SE
PIN RA4/T0CK TMR0 Reg
Aplicaciones de µC
MUX
MUX
Pre-escalar
PSA
PSA
PSA
WDT Enable bit
WDT time-out
Watchdog Timer
Registros Involucrados
• OPTION (En el manual aparece como OPTION_REG)• INTCON
• Procedimiento– Se debe configurar la operación del módulo en el registro
Aplicaciones de µC
– Se debe configurar la operación del módulo en el registro OPTION
– Se debe configurar el registro INTCON para habilitar las interrupciones
Registro OPTION
RBPU INTEDG T0CK T0SE PSA PS2 PS1 PS0
Registro OPTION
RBPU INTEDG T0CK T0SE PSA PS2 PS1 PS0
Bit que selecciona la fuente de clock
1 Transición el pin TOCK1
0 Clock interno
Registro OPTION
RBPU INTEDG T0CK T0SE PSA PS2 PS1 PS0
Bit que selecciona el canto del clock
1 Incremento del clock con canto de bajada en el pin T0CK1
0 Incremento del clock con canto de subida en el pin T0CK1
Registro OPTION
RBPU INTEDG T0CK T0SE PSA PS2 PS1 PS0
Bits de asignación del preescalar
1 Preescalar asignado al WDT (Watch Dog Timer)
0 Preescalar asignado al Timer0
Registro OPTION
RBPU INTEDG T0CK T0SE PSA PS2 PS1 PS0
Bits que seleccionan el preescalar
000 1:2000 1:2
001 1:4
010 1:8
011 1:16
100 1:32
101 1:64
110 1:128
111 1:256
Registro INTCON
GIE PEIE TMR0IE INTIE RBIE TMR0IF INTIF RBIF
Registro INTCON
GIE PEIE TMR0IE INTIE RBIE TMR0IF INTIF RBIF
Habilita todas las interrupcionesHabilita todas las interrupciones
Registro INTCON
GIE PEIE TMR0IE INTIE RBIE TMR0IF INTIF RBIF
Habilita la interrupción por el TMR0
Registro INTCON
GIE PEIE TMR0IE INTIE RBIE TMR0IF INTIF RBIF
Flag de interrupción del TMR0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
Pre-escalar
osc
T0CS
PSA
T0SE
PIN RA4/T0CK
TMR0 Reg
Watchdog Timer PSA y T0CS son
bits de control
Aplicaciones de µC
MUX
PSA
PSA
WDT Enable bit
WDT time-out
bits de control
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
Pre-escalar
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Watchdog Timer PSA y T0CS son
bits de control
Aplicaciones de µC
MUX
0
0
WDT Enable bit
WDT time-out
bits de control
RBPU INTEDG 0 T0SE 0 PS2 PS1 PS0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
Pre-escalar
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Watchdog Timer PSA y T0CS son
bits de control
Aplicaciones de µC
MUX
0
0
WDT Enable bit
WDT time-out
bits de control
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
Pre-escalar
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG 0 T0SE 0 PS2 PS1 PS0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
Pre-escalar
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:2
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 0 0 0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:4
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 0 0 1
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:8
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 0 1 0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:16
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 0 1 1
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:32
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 1 0 0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:64
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 1 0 1
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:128
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 1 1 0
Esquema del Timer 0 (simplificado)
MUX
MUX
MUX
1:256
osc
0
0
T0SE
PIN RA4/T0CK
TMR0 Reg
Aplicaciones de µC
0
RBPU INTEDG T0CS T0SE PSA 1 1 1
Interrupciones
• Es el mecanismo más eficiente para atender los periféricos.
• Permite generar temporización más precisa.
• Las fuentes pueden ser distintas
Aplicaciones de µC
– Los Clock internos
– Señales externas tales como INT u otros bits definidos
– Periféricos internos de uC tales como la UART o el ADC o el PWM
Como Funcionan las interrupciones
• Cuando un periférico requiere atención, a través de una señal losolicita a la CPU.
• Inmediatamente, el control del programa salta una rutina llamadaRSI o Rutina de servicio de interrupción.
Aplicaciones de µC
• Esta función atiende al periférico y luego retorna al programaprincipal.
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
Funcionamiento General
Rutina de Servicio de Interrupción
Aplicaciones de µC
Programa Principal
interrupción
Periférico
En el uC PIC con CC5X
• Se configura el trabajo con interrupciones en los registros OPTION e INTCON
• Se incluye un archivo de cabecera int16cxx.h proporcionado por el que desarrolló el compilador
• La RSI queda en la dirección 0x0004
Aplicaciones de µC
• Cada vez que se interrumpe se setea un FLAGS de acuerdo a la fuente de interrupción
– INTF : Indica la interrupción por INT– T0IF : Indica la interrupción por Overflow de TMR0– RBIF : Int. Por PORTB– ADIF: Int. Del ADC– RCIF : Int. De Rx UART– TXIF : Int. De tx UART
Se implementa una RSI bajo el formato indicado a continuación
#include "int16CXX.H"#pragma origin 4
interrupt rsi( void){
int_save_registers // W, STATUS (and PCLATH)
Aplicaciones de µC
// En esta zona se debe preguntar por// el flag correspondiente
int_restore_registers // W, STATUS (and PCLATH)}
Se implementa una RSI bajo el formato indicado a continuación
#include "int16CXX.H"#pragma origin 4
interrupt rsi( void){
int_save_registers // W, STATUS (and PCLATH)
if ( T0IF) { /* TMR0 overflow interrupt */
Aplicaciones de µC
T0IF = 0; /* reset flag */}
if(INTF) {
INTF=0; }
if(ADIF){
ADIF=0;}
int_restore_registers // W, STATUS (and PCLATH)}
Esquema de programa
#include "int16CXX.H"
#pragma origin 4
interrupt rsi(void)
{
// codigo
}
Aplicaciones de µC
void main()
{
// Config. Puertos I-O
// Config. Timer
// Config. Interrupciones
while(1) // ciclo for ever
{
}
}
Aplicación con el TMR0
#include "int16CXX.H"
#pragma origin 4
interrupt rsi( void){
int_save_registers // W, STATUS (and PCLATH)
Aplicaciones de µC
if ( T0IF) {/* TMR0 overflow interrupt */TMR0 = 128;
if(PORTB.0==0) PORTB.0=1;else PORTB.0=0;
T0IF = 0; /* reset flag */}
int_restore_registers // W, STATUS (and PCLATH)}
void main(){//TRISB.0=0;PORTB.0=1;
//Programación del TMR0OPTION.5=0; OPTION.3=0; // PSA=0;
Aplicaciones de µC
OPTION.3=0; // PSA=0;OPTION.2=0; // PS2=0;OPTION.1=0; // PS1=0;OPTION.0=0; // PS0=0;TMR0=128; // Carga inicial del Timer
INTCON.5=1; //TMR0IE=1;GIE=1; // INTCON.7=1;
while(1){}
}
Timer 1
• El Timer1 es un módulo de Temp/cont de 16 bits que tiene 2 registros de lectura y escritura TMR1H y TMR1L.
• El registro formado por ambos TMR1H:TMR1L se incrementa desde0000h a FFFFh.
• La Interrupción TMR1 si es habilitada es generada por el overflow el cual
Aplicaciones de µC
• La Interrupción TMR1 si es habilitada es generada por el overflow el cuales capturado por el flag TMR1IF.
• Esta puede ser habilitada o deshabilitada por el TMR1IE.
• El modulo trabaja como:– Timer– Counter
– El modo queda determinado por el bit que selecciona el clock
• En modo Timer, Timer1 se incrementa cada ciclo de instrucción.
• En modo counter, el incremento es en cada canto de subida de una entrada de clock externa
Aplicaciones de µC
de una entrada de clock externa
• El Timer1 se habilita/deshabilita mediante el bit TMR1ON.
• También tiene una entrada de reset
Diagrama Timer1 (Simplificado)
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
Registros Involucrados
T1CKPS1 T1CKPS0 T1OSEN T1SYNC TMR1CS TMR1ON
T1CON
T1CKPS1 T1CKPS0 T1OSEN T1SYNC TMR1CS TMR1ON
T1CON
1:1 0 0
1:2 0 1
1:3 1 0
1:4 1 1
Preescalar
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
T1CON
Selecciona fuente de clock externo
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
T1CON
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
T1CON
Selección de la fuente de clock
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN T1SYNC TMR1CS TMR1ON
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN T1SYNC TMR1CS TMR1ON
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN T1SYNC TMR1CS TMR1ON
TMR1H TMR1L
TMR1ON
T1SYNC
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS0TMR1CS
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS00
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS00
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
Pre-scaler
T1CKPS1:T1CKPS00
RC0
RC1
T1OSCEN
T1CKPS1 T1CKPS0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
0 0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
0 0 T1OSEN 0 0 TMR1ON
TMR1H TMR1L
TMR1ON
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
0 0 T1OSEN 0 0 1
TMR1H TMR1L
1
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
0 0 T1OSEN 0 0 1
TMR1H TMR1L
1
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0x0000
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0x0001
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0xFFFD
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0xFFFE
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0xFFFF
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0x0000
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
TMR1H TMR1L
1
0
TMR1
RC0
0x0000
TMR1IF=1
Fosc/4Clock ext
1:1
0 00
RC0
RC1
T1OSCEN
Top Related