Anda di halaman 1dari 9

Interrupciones

Ing. Milton Tipn


http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/

Memoria RAM

Registros de propsito general

Usados para guardar datos temporales y resultados

Registros de propsito especial (SFR)

Estn conectados a circuitos particulares desde su fabricacin por lo que su cambio durante la
ejecucin del programa afecta a estos

Registros de SFR

La memoria RAM se divide en bancos de memoria que contienen los registros

Formacin de los SFR

Cada uno esta formado por bits con funciones especficas, que permiten cambiar el
funcionamiento del microcontrolador

Interrupcin

Es un subprograma que se ejecuta cuando un evento haya sucedido, los eventos


pueden ser:

Cambio en el pin RB0 (interrupcin externa)

Cambio en el puerto B

Desbordamiento del Timer (interrupcin interna)

Inicio/ finalizacin del la conversin A/D

Inicio/ finalizacin de una comunicacin (USART, USB, I2C , ), entre otros.

http://www.mikroe.com/chapters/view/81/capitulo-3-microcontrolador-pic16f887/

Fuentes de interrupcin y su habilitacin

Registro INTCON

GIE - Global Interrupt Enable bit - (bit de habilitacin de interrupciones globales) controla simultneamente todas las fuentes de interrupciones posibles.

1 - Habilita las interrupciones no enmascaradas.

0 - Deshabilita las interrupciones no enmascaradas.

PEIE - Peripheral Interrupt Enable bit (bit de habilitacin de interrupciones perifricas) es similar al bit GIE, sin embargo controla interrupciones habilitadas por los perifricos. Eso significa que no influye en interrupciones causadas por el
temporizador Timer0 o por el cambio del estado en el puerto PORTB o por el cambio en el pin RB0/INT.

1 - Habilita las interrupciones perifricas no enmascaradas.

0 - Deshabilita las interrupciones perifricas no enmascaradas.

T0IE - TMR0 Overflow Interrupt Enable bit (bit de habilitacin de interrupciones por el desbordamiento del temporizador Timer0) controla interrupciones causadas por el desbordamiento del Timer0.

1 - Habilita interrupciones por Timer0.

0 - Deshabilita interrupciones por Timer0.

INTE - RB0/INT External Interrupt Enable bit (bit de habilitacin de la interrupcin externa en RB0) controla interrupciones causadas por el cambio del estado lgico en el pin de entrada RB0/INT (interrupcin externa).

1 - Habilita interrupciones externas INT.

0 - Deshabilita interrupciones externas INT.

RBIE - RB Port Change Interrupt Enable bit (bit de habilitacin de interrupciones por cambios en el puerto PORTB). Cuando se configuran como entradas, los pines en el puerto PORTB pueden causar una interrupcin al cambiar el estado lgico
(no importa si se produce bajada o subida de tensin, lo que importa es que se produce un cambio). Este bit determina si una interrupcin va a ocurrir.

1 - Habilita interrupciones por cambio en el puerto PORTB.

0 - Deshabilita interrupciones por cambio en el puerto PORTB.

T0IF - TMR0 Overflow Interrupt Flag bit (bit de bandera de interrupcin por el desbor damiento del Timer0) detecta el desbordamiento en el registro del temporizador Timer0, o sea el contador se pone a cero.

1 - En el registro del Timer0 ha ocurrido desbordamiento (esta bandera debe volverse a 0 por software).

0 - En el registro del Timer0 no ha ocurrido desbordamiento.

INTF - RB0/INT External Interrupt Flag bit (bit de bandera de interrupcin externa en INT) detecta el cambio en el estado lgico en el pin INT.

1 - Ha ocurrido una interrupcin externa por INT (esta bandera debe volverse a 0 por software)

0 - No ha ocurrido una interrupcin externa por INT.

RBIF - RB Port Change Interrupt Flag bit (bit de bandera de interrupcin por cambio en el puerto RB) detecta cualquier cambio del estado lgico de alguno de los pines de entrada en el puerto PORTB.

1 - Al menos uno de los pines de E/S de propsito general en el puerto PORTB ha cambido de valor. Despus de leer el puerto PORTB, el bit RBIF debe volverse a 0 por software).

0 - Ninguno de los pines de E/S de propsito general en el puerto PORTB ha cambiado de valor.

Interrupciones en C
//----------------------------------------------------------------------------//Sub rutina de interrupcin
//---------------------------------------------------------------------------void interrupt(void) {
//Se evala el tipo de interrupcin
//sub programa a realizarse en la interrupcin
//Se restablecen las banderas de interrupcin
}
//----------------------------------------------------------------------------//Funcin principal
//---------------------------------------------------------------------------void main(void) {
//Se configuran los puertos.
//Se activan las interrupciones
while(1){
//programa principal
}

Ejemplo de interrupcin
// INTERRUPCIN DEL RB0//
//-------------------------------------// MCU: 16F877A
// OSC: 4 MHz
//--------------------------------------// funcion de interrupcion
//----------------------------------------------------------------------------void interrupt(void) {

// Inicio de la rutina de interrupcin

//Se evala si la interrupcin disparada es externa.


if( INTCON.F1==1 )
{
//Se enciende el led por 2 segundos.
PORTB.F2=0;
delay_ms(2000);
PORTB.F2=1;
//Se apaga la bandera de interrupcin externa.
INTCON.F1=0;
}
}

//----------------------------------------------------------------------------//Funcion principal
//---------------------------------------------------------------------------void main(void) {
//Se configuran los puertos.
TRISB = 0b00000001;
PORTB = 0;
//Se activan las interrupciones globales y externa.
INTCON = 0b10010000;
//programa principal
while(1){
PORTB.F2=1;
}
}

Anda mungkin juga menyukai