21
INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Embed Size (px)

Citation preview

Page 1: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

INTERRUPCIONES Y TEMPORIZADORESProgramación en C para electrónica

Page 2: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Programación en C para electrónica

Interrupciones2

Interrupciones y temporizadores- Programación en C para electrónica

Page 3: 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

Page 4: 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

Page 5: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Registros de interrupción5

Interrupciones y temporizadores- Programación en C para electrónica

Page 6: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Registros de interrupción6

Interrupciones y temporizadores- Programación en C para electrónica

Page 7: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Registros de interrupción7

Interrupciones y temporizadores- Programación en C para electrónica

Page 8: 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

Page 9: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Interrupciones en CCS9

Interrupciones y temporizadores- Programación en C para electrónica

Page 10: 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

Page 11: 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

Page 12: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

level12

Interrupciones y temporizadores- Programación en C para electrónica

Page 13: 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

Page 14: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Programación en C para electrónica

Temporizadores14

Interrupciones y temporizadores- Programación en C para electrónica

Page 15: 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

Page 16: 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

Page 17: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

Timer 1:17

Interrupciones y temporizadores- Programación en C para electrónica

Page 18: INTERRUPCIONES Y TEMPORIZADORES Programación en C para electrónica

T1CON:18

Interrupciones y temporizadores- Programación en C para electrónica

Page 19: 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

Page 20: 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

Page 21: 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