Está en la página 1de 13

La interrupcin externa

La familia 16f87x dispone de hasta 15 fuentes de interrupcin.


La interrupciones pueden ser por software o hardware.
Todas las interrupciones provocan un salto a la posicin 04.
(vector de interrupcin).
Los registros implicados en el manejo de interrupciones son:
OPTION_REG, INTCON, PIE1, PIE2, PIR1 y PIR2.
La interrupcin externa est implementada en el pin RB0.
La interrupcin externa se habilita activando el bit INTE y el
GIE del registro INTCON.
Se puede configurar para que se genere por flanco de subida o
por flanco de bajada.

(c) Domingo Llorente 2010 1


Habilitacin de la interrupcin
Para habilitar la interrupcin
externa hay que poner a uno
los bits GIE e INTE del
registro INTCON

En CCS usamos las


instrucciones:

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);

(c) Domingo Llorente 2010 2


Configuracin por flanco de subida o bajada
Para programar la
interrupcin por flanco
de bajada/subida hay
que poner a cero/uno
el bit INTEDG del
registro OPTION_REG

En CCS usamos la
instruccin:
ext_int_edge(H_TO_L);

o bien:
ext_int_edge(L_TO_H);

(c) Domingo Llorente 2010 3


Conexin hardware

 La interrupcin externa est implementada en el pin RB0.


 Para usarla hay que colocar el puente JP13 en posicin INT.
 Al usar la interrupcin externa no podemos utilizar el led en RB0.
 Para generar una interrupcin utilizar la clema 3 puenteando 1-2.

(c) Domingo Llorente 2010 4


Ejemplo de programa
Disear un programa que presente un segmento girando en la parte baja del display de
la placa de perifricos a intervalos de 300ms. Configurar la interrupcin externa,
generada por flanco de bajada, para que cuando se produzca parpadee la parte baja del
display tres veces a intervalos de 200ms. Cuando termine la interrupcin el segmento
debe seguir girando en la misma posicin donde se encontraba.

x3

interrupcin

(c) Domingo Llorente 2010 5


Solucin en CCS (I)

Comenzamos utilizando el
asistente PIC Wizard

Luego hay que crear la carpeta para


nuestro proyecto y dar un nombre al
archivo con extensin .pjt

(c) Domingo Llorente 2010 6


Solucin en CCS (II)
Elegir:
Pic: PIC17F877A
Frecuencia del oscilador: 4Mhz
Fuses: Crystal osc <=4Mhz
Memoria de programa: No protegida

(c) Domingo Llorente 2010 7


Solucin en CCS (III)
En la pestaa de Interrups marcar
la casilla de External interrups

(c) Domingo Llorente 2010 8


Solucin en CCS (IV)
En la pestaa Code podemos ver
el cdigo que se aadir en nuestro
programa.

(c) Domingo Llorente 2010 9


Solucin en CCS (V)
El compilador nos genera la siguiente plantilla.

Funcin que se ejecutar al producirse la interrupcin.

(c) Domingo Llorente 2010 10


Solucin en CCS (VI)

Una posible funcin de interrupcin sera:

(c) Domingo Llorente 2010 11


Solucin en CCS (VII)
El programa principal:

(c) Domingo Llorente 2010 12


Resumen
Para realizar un programa con la interrupcin externa habilitada:

1.- Antes de la funcin main();


#use fast_io(b)
#int_EXT
void EXT_isr(void)
{
// programar aqu la funcin de interrupcin //
}

2.- En la funcin main() incluir:


enable_interrupts(INT_EXT); // Habilita la interrupcin en RB0
enable_interrupts(GLOBAL); // Habilitacin general de interrupcin
ext_int_edge(H_TO_L); // Config. int. por flanco descendente. (L_TO_H) para ascendente
set_tris_b(0x01); // RB0 entrada, RB1..RB7 salidas

3.- Programar la funcin main() segn corresponda.

4.- Cada vez que se genere un flanco de subida o bajada en RB0 se ejecutar la
funcin de interrupcin EXT_isr(void) y luego el programa continuar con el programa
principal.
(c) Domingo Llorente 2010 13

También podría gustarte