Sie sind auf Seite 1von 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

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

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

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

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

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

Solucin en CCS (II)


Elegir: Pic: PIC17F877A Frecuencia del oscilador: 4Mhz Fuses: Crystal osc <=4Mhz Memoria de programa: No protegida

(c) Domingo Llorente 2010

Solucin en CCS (III)


En la pestaa de Interrups marcar la casilla de External interrups

(c) Domingo Llorente 2010

Solucin en CCS (IV)


En la pestaa Code podemos ver el cdigo que se aadir en nuestro programa.

(c) Domingo Llorente 2010

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); enable_interrupts(GLOBAL); ext_int_edge(H_TO_L); set_tris_b(0x01); // Habilita la interrupcin en RB0 // Habilitacin general de interrupcin // Config. int. por flanco descendente. (L_TO_H) para ascendente // 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

Das könnte Ihnen auch gefallen