You are on page 1of 13

Interrupciones en C

Prof. Patricio Corts Aburto

Interrupciones

Se define una interrupcin en un PIC cuando ocurre un fenmeno interno o externo que lo saca de su funcionamiento normal, forzndolo a realizar otra rutina previamente definida, para luego volver su funcionamiento normal. Existen 2 fuentes de interrupciones:

Por accin externa (alguno de sus pines) Por accin interna (por algn mdulo interno, timer, conversor anlogo-digital, mdulo de comunicacin, etc.)

Interrupt

Vector de Interrupciones

Cada vez que ocurre una interrupcin, el microcontrolador se dirige hacia la direccin 0x04 de la memoria de programa.

Es ah en donde vamos a escribir el cdigo que el micro deber seguir luego de ocurrir la interrupcin. Otra forma es colocar aqu un salto (goto) a otra posicin para realizar la rutina de interrupcin: a esto se le llama ISR o Rutina de Servicio de Interrupcin

Interrupciones

Existen bit definidos para habilitar o deshabilitar las fuentes de interrupciones (ENABLE) Existen bit que nos muestran el estado de una interrupcin (FLAG)

Interrupciones

El bit GIE (General Interrupt Enable) es la llave maestra para habilitar todas las interrupciones Luego se van habilitando cada fuente interrupcin por separado

Interrupciones

Prof. Patricio Corts

Interrupciones

Cuando se genera una interrupcin, nos vamos al vector de interrupcin (0x04) y desde ah nos pasamos a una subrutina llamada ISR o Rutina de Servicio de Interrupcin (aqu se escribir el cdigo asociado a la interrupcin)

Cada vez que se ejecuta una interrupcin, el bit se borra, evitando que se ejecute otra interrupcin.

Registros de una Interrupcin

INTCON: Registro para el Control de Interrupciones, encargado del manejo de las interrupciones
GIE
Bit 7

PEIE
bit 6

TMR0IE INT0IE
bit 5 bit 4

RBIE
bit 3

TMR0IF INT0IF
bit 2 bit 1

RBIF
bit 0

- GIE:

Global Interrup Enable o Habilitador general de interrupciones. 0: Deshabilita todas las interrupciones 1: Habilita las interrupciones - PEIE: Peripheral Interrupt Enable bit, Habilitacin de interrupciones no controladas por este registro. 0: La deshabilita 1: La habilita - TMR0IE: TMR0 Interrup Enable o Habilitacin de interrupcin del temporizador TMR0. 0: La deshabilita 1: La habilita - INT0IE: INT Interrup Enable o Habilitacin de RB0/INT. 0: La deshabilita 1: La habilita - RBIE: RB Interrup Enable o Habilitacin de la interrupcin por cambio en RB4-RB7. 0: La deshabilita 1: La habilita - TMR0IF: TMR0 Overflow Interrup Flag o Bandera de la interrupcin por desbordamiento del TMR0. Se coloca en 1 cuando el TMR0 pasa de 0FFh a 00h; sta debe ser puesta a 0 por programa. - INT0IF: INT Interrup Flag o Bandera de interrupcin INT. Se coloca en 1 cuando ocurre; sta debe ser puesta cero por programa. - RBIF: RB Port Change Interrup Flag o Bandera de interrupcin por cambio en el puerto B. Se coloca en 1 cuando una de las entradas (RB4 a RB7) cambia; sta debe ser puesta a 0 por programa

Registros de una Interrupcin

OPTION_REG: registro de configuracin mltiple que posee varios bits para configurar el preescalador, la interrupcin externa, el timer y las caractersticas del Puerto B
RBPU
bit 7

INTEDG
bit 6

T0CS
bit 5

T0SE
bit 4

PSA
bit 3

PS2
bit 2

PS1
bit 1

PS0
bit 0

RBPU: Portb Pull-up Enable o Habilitacin de pull-up del puerto B. 0: Habilita las pull-ups internas 1: Las deshabilita INTEDG: INT Interrup Edge Select o Selector de flanco de 0: Flanco de bajada 1: Flanco de subida T0CS: TMR0 Signal Source o Fuente de seal del TMR0. 0: Ciclo de instrucciones interno FOSC/4(Temporizador) 1: Transicin en el pin RA4/TOCKI (Contador) T0SE: TMR0 Signal Edge o Flanco de la seal del TMR0 0: Incremento de transicin de bajo a alto 1: Incremento en transicin PSA: Preescaler Assignment o Asignacin del preescalador(divisor de frecuencias) 0: TMR0 (Contador / Temporizador) 1: WDT (Circuito de vigilancia)

Fuentes de Interrupcin Externas


Cambios efectuado en el pin RB0/INT. Se habilita con el bit 4 (INT0IE) del registro INTCON. El cambio es elegido con el bit 6 (INTEDG) del registro OPTION_REG

Cambios efectuado en los pines desde RB4 a RB7. Se habilita con el bit 3 (RBIE) del registro INTCON. El cambio es elegido con el bit 6 (INTEDG) del registro OPTION_REG

Interrupciones en C

#INT_XXX (donde xxx es la funcin de interrupcin)

PIC16F877

Interrupciones en C

enable_interrupts(nivel)

//nivel es la fuente de interrupcin

ext_int_edge(H_TO_L);

//detecta el canto de bajada en RB0

ext_int_edge(L_TO_H); Ejemplo:

//detecta el canto de subida en RB0

Al hacer enable_interrupt(INT_EXT) se est habilitando la interrupcin asociada a un evento externo en el PIN RB0 En este caso se debe definir si la interrupcin en el pin RB0 ser con canto de bajada o subida Luego se debe habilitar la interrupcin GLOBAL

enable_interrupts(GLOBAL)

// bit GIE = 1

Interrupciones en C

Una vez que se habilitaron las interrupciones, el programa se ir a la subrutina definida como

ext_ isr(){

//hace cualquier cosa)

You might also like