INTERRUPCIONES Y 
TEMPORIZADORES 
Programación en C para electrónica
2 Interrupciones 
Programación en C para electrónica 
Interrupciones y temporizadores- Programación en C para 
electrónica
Interrupciones del PIC 16F876A 
 Las interrupciones permiten la interrupción del 
programa a cualquier suceso (interno o 
externo). 
 Al producirse una interrupción el PIC salta a la 
dirección del vector (0004h) de interrupción y 
ejecuta la rutina. 
 Cuando la rutina de manejo de la interrupción 
finaliza (RETFIE) el programa retorna al punto 
donde se interrumpió el programa. 
3 
Interrupciones y temporizadores- Programación en C para 
electrónica
Interrupciones del PIC 16F876A 
 El PIC 16F876A tiene un único vector de 
interrupción y todas las interrupciones 
provocan un salto a ese vector. (0004h) 
 La rutina de manejo de la interrupción debe 
identificar qué evento interrumpió el programa 
para ejecutar la rutina correspondiente. 
 El PIC posee registros con “flags” de 
interrupción que permiten identificar el evento. 
4 
Interrupciones y temporizadores- Programación en C para 
electrónica
Registros de interrupción 
5 
Interrupciones y temporizadores- Programación en C para 
electrónica
Registros de interrupción 
6 
Interrupciones y temporizadores- Programación en C para 
electrónica
Registros de interrupción 
7 
Interrupciones y temporizadores- Programación en C para 
electrónica
Interrupciones en CCS 
 CCS dispone de 
directivas para el 
manejo de 
interrupciones. 
 #int_XXXX. 
 La directiva 
especifica que la 
función que la sigue 
es la función de 
interrupción 
correspondiente. 
 Ejemplo: 
//interrupción timer 1 
#int_TIMER1 
void TIMER1_isr (void) 
{ 
switch (ciclo) 
{ 
case 0: 
.... 
8 
Interrupciones y temporizadores- Programación en C para 
electrónica
Interrupciones en CCS 
9 
Interrupciones y temporizadores- Programación en C para 
electrónica
Funciones para interrupciones 
 El compilador incluye funciones para facilitar 
el manejo de interrupciones en C. 
 enable_interrupts(level) 
 Activa las interrupciones indicadas por 
level. 
 disable_interrupts(level) 
 desactiva las interrupciones indicadas por 
level. 
 clear_interrupts(level) 
 Borra el flag de interrupción indicado. 
10 
Interrupciones y temporizadores- Programación en C para 
electrónica
level 
 Level es una constante definida en el fichero 
de cabecera (#include <16F876A.h>). 
 Genera el código necesario para activar las 
interrupciones correspondientes modificando 
los registros ITCON, PIE1 y PIE2. 
 Cuando se activa alguna interrupción es 
necesario activar “globalmente” las 
interrupciones. 
11 
Interrupciones y temporizadores- Programación en C para 
electrónica
level 
12 
Interrupciones y temporizadores- Programación en C para 
electrónica
Ejemplos: 
 enable_interrupts(INT_TIMER1); 
 enable_interrupts(GLOBAL); 
 disable_interrupts(GLOBAL); 
 clear_interrupts(INT_RTCC); 
 enable_interrupts(GLOBAL | INT_RTCC); 
Nota: Esta ultima solo se puede hacer con interrupciones del mismo registro. 
13 
Interrupciones y temporizadores- Programación en C para 
electrónica
14 Temporizadores 
Programación en C para electrónica 
Interrupciones y temporizadores- Programación en C para 
electrónica
Temporizadores: 
 El PIC 16F876A dispone de tres 
temporizadores/contadores: 
 Timer 0: 8 bits. 
 Timer 1: 16 bits. 
 Timer 2: 16 bits. 
 Pueden funcionar como contadores de 
flancos externos o como temporizador 
(contador de ciclos máquina). 
 Disponen de “prescaler” para ampliar el 
tamaño de la cuenta (hasta x256). 
15 
Interrupciones y temporizadores- Programación en C para 
electrónica
Timer 1: 
 Cuenta de 16 bits en dos registros de 8 bits: TMR1H 
(parte alta) y TMR1L (parte baja) 
 Los registros de cuenta se pueden leer y escribir. 
 Interrupción por desboradmiento de FFFFh a 0000h. 
 Controlado por el registro T1CON. 
 Funcionamiento como: 
 Temporizador (incrementa cada ciclo máquina). 
 Contador síncrono. 
 Contador asíncrono. 
16 
Interrupciones y temporizadores- Programación en C para 
electrónica
Timer 1: 17 
Interrupciones y temporizadores- Programación en C para 
electrónica
T1CON: 18 
Interrupciones y temporizadores- Programación en C para 
electrónica
Timer 1 en C: 
 CCS provee funciones de configuración de los 
teporizadores: 
 setup_timer_X (modo) 
 Programa el modo de funcionamiento del 
timer X 
 get_timerX () 
 Lee el valor de la cuenta. 
 set_timerX (valor) 
 Escribe “valor” en los registros de cuenta. 
19 
Interrupciones y temporizadores- Programación en C para 
electrónica
setup_timer_1(mode) 
 Configura el timer 1. 
 El modo de funcionamiento (mode)es una 
constante definida en el archivo de cabecera. 
 Los modos se pueden agrupar con |. 
20 
Interrupciones y temporizadores- Programación en C para 
electrónica
set_timer1(value) y get_timer1 
 set_timer1 escribe “value” (entero de 16 bits) 
en los registros de cuenta del timer 1 (TMR1H 
yTMR1L). 
 get_timer1() devuelve (16 bits) el valor de 
los registros TMR1H yTMR1L. 
 value=get_timer1(); 
21 
Interrupciones y temporizadores- Programación en C para 
electrónica

Interrupciones y Temporizadores

  • 1.
    INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica
  • 2.
    2 Interrupciones Programaciónen C para electrónica Interrupciones y temporizadores- Programación en C para electrónica
  • 3.
    Interrupciones del PIC16F876A  Las interrupciones permiten la interrupción del programa a cualquier suceso (interno o externo).  Al producirse una interrupción el PIC salta a la dirección del vector (0004h) de interrupción y ejecuta la rutina.  Cuando la rutina de manejo de la interrupción finaliza (RETFIE) el programa retorna al punto donde se interrumpió el programa. 3 Interrupciones y temporizadores- Programación en C para electrónica
  • 4.
    Interrupciones del PIC16F876A  El PIC 16F876A tiene un único vector de interrupción y todas las interrupciones provocan un salto a ese vector. (0004h)  La rutina de manejo de la interrupción debe identificar qué evento interrumpió el programa para ejecutar la rutina correspondiente.  El PIC posee registros con “flags” de interrupción que permiten identificar el evento. 4 Interrupciones y temporizadores- Programación en C para electrónica
  • 5.
    Registros de interrupción 5 Interrupciones y temporizadores- Programación en C para electrónica
  • 6.
    Registros de interrupción 6 Interrupciones y temporizadores- Programación en C para electrónica
  • 7.
    Registros de interrupción 7 Interrupciones y temporizadores- Programación en C para electrónica
  • 8.
    Interrupciones en CCS  CCS dispone de directivas para el manejo de interrupciones.  #int_XXXX.  La directiva especifica que la función que la sigue es la función de interrupción correspondiente.  Ejemplo: //interrupción timer 1 #int_TIMER1 void TIMER1_isr (void) { switch (ciclo) { case 0: .... 8 Interrupciones y temporizadores- Programación en C para electrónica
  • 9.
    Interrupciones en CCS 9 Interrupciones y temporizadores- Programación en C para electrónica
  • 10.
    Funciones para interrupciones  El compilador incluye funciones para facilitar el manejo de interrupciones en C.  enable_interrupts(level)  Activa las interrupciones indicadas por level.  disable_interrupts(level)  desactiva las interrupciones indicadas por level.  clear_interrupts(level)  Borra el flag de interrupción indicado. 10 Interrupciones y temporizadores- Programación en C para electrónica
  • 11.
    level  Leveles una constante definida en el fichero de cabecera (#include <16F876A.h>).  Genera el código necesario para activar las interrupciones correspondientes modificando los registros ITCON, PIE1 y PIE2.  Cuando se activa alguna interrupción es necesario activar “globalmente” las interrupciones. 11 Interrupciones y temporizadores- Programación en C para electrónica
  • 12.
    level 12 Interrupcionesy temporizadores- Programación en C para electrónica
  • 13.
    Ejemplos:  enable_interrupts(INT_TIMER1);  enable_interrupts(GLOBAL);  disable_interrupts(GLOBAL);  clear_interrupts(INT_RTCC);  enable_interrupts(GLOBAL | INT_RTCC); Nota: Esta ultima solo se puede hacer con interrupciones del mismo registro. 13 Interrupciones y temporizadores- Programación en C para electrónica
  • 14.
    14 Temporizadores Programaciónen C para electrónica Interrupciones y temporizadores- Programación en C para electrónica
  • 15.
    Temporizadores:  ElPIC 16F876A dispone de tres temporizadores/contadores:  Timer 0: 8 bits.  Timer 1: 16 bits.  Timer 2: 16 bits.  Pueden funcionar como contadores de flancos externos o como temporizador (contador de ciclos máquina).  Disponen de “prescaler” para ampliar el tamaño de la cuenta (hasta x256). 15 Interrupciones y temporizadores- Programación en C para electrónica
  • 16.
    Timer 1: Cuenta de 16 bits en dos registros de 8 bits: TMR1H (parte alta) y TMR1L (parte baja)  Los registros de cuenta se pueden leer y escribir.  Interrupción por desboradmiento de FFFFh a 0000h.  Controlado por el registro T1CON.  Funcionamiento como:  Temporizador (incrementa cada ciclo máquina).  Contador síncrono.  Contador asíncrono. 16 Interrupciones y temporizadores- Programación en C para electrónica
  • 17.
    Timer 1: 17 Interrupciones y temporizadores- Programación en C para electrónica
  • 18.
    T1CON: 18 Interrupcionesy temporizadores- Programación en C para electrónica
  • 19.
    Timer 1 enC:  CCS provee funciones de configuración de los teporizadores:  setup_timer_X (modo)  Programa el modo de funcionamiento del timer X  get_timerX ()  Lee el valor de la cuenta.  set_timerX (valor)  Escribe “valor” en los registros de cuenta. 19 Interrupciones y temporizadores- Programación en C para electrónica
  • 20.
    setup_timer_1(mode)  Configurael timer 1.  El modo de funcionamiento (mode)es una constante definida en el archivo de cabecera.  Los modos se pueden agrupar con |. 20 Interrupciones y temporizadores- Programación en C para electrónica
  • 21.
    set_timer1(value) y get_timer1  set_timer1 escribe “value” (entero de 16 bits) en los registros de cuenta del timer 1 (TMR1H yTMR1L).  get_timer1() devuelve (16 bits) el valor de los registros TMR1H yTMR1L.  value=get_timer1(); 21 Interrupciones y temporizadores- Programación en C para electrónica