13
(c) Domingo Llorente 2010 1 La interrupción externa • La familia 16f87x dispone de hasta 15 fuentes de interrupción. • La interrupciones pueden ser por software o hardware. • Todas las interrupciones provocan un “salto” a la posición 04. (vector de interrupción). • Los registros implicados en el manejo de interrupciones son: OPTION_REG, INTCON, PIE1, PIE2, PIR1 y PIR2. • La interrupción externa está implementada en el pin RB0. • La interrupción 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.

La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

Embed Size (px)

Citation preview

Page 1: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 1

La interrupción externa

• La familia 16f87x dispone de hasta 15 fuentes de interrupción.• La interrupciones pueden ser por software o hardware.• Todas las interrupciones provocan un “salto” a la posición 04. (vector de interrupción).• Los registros implicados en el manejo de interrupciones son: OPTION_REG, INTCON, PIE1, PIE2, PIR1 y PIR2.• La interrupción externa está implementada en el pin RB0.• La interrupción 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.

Page 2: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 2

Habilitación de la interrupción

Para habilitar la interrupción externa hay que poner a unolos bits “GIE” e “INTE” del registro “INTCON”

En CCS usamos las instrucciones:

enable_interrupts(INT_EXT);

enable_interrupts(GLOBAL);

Page 3: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 3

Configuración por flanco de subida o bajada

Para programar la interrupción por flanco de bajada/subida hay que poner a cero/unoel bit INTEDG del registro OPTION_REG

En CCS usamos la instrucción:ext_int_edge(H_TO_L);

o bien:ext_int_edge(L_TO_H);

Page 4: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 4

Conexión hardware

� La interrupción externa está implementada en el pin RB0.� Para usarla hay que colocar el puente JP13 en posición “INT”. � Al usar la interrupción externa no podemos utilizar el led en RB0. � Para generar una interrupción utilizar la clema 3 puenteando 1-2.

Page 5: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 5

Ejemplo de programa

Diseñar un programa que presente un segmento girando en la parte baja del display de la placa de periféricos a intervalos de 300ms. Configurar la interrupción 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 interrupción el segmentodebe seguir girando en la misma posición donde se encontraba.

x3

interrupción

Page 6: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 6

Solución en CCS (I)

Comenzamos utilizando elasistente “PIC Wizard”

Luego hay que crear la carpeta para nuestro proyecto y dar un nombre al archivo con extensión .pjt

Page 7: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 7

Solución en CCS (II)

Elegir:Pic: PIC17F877AFrecuencia del oscilador: 4MhzFuses: Crystal osc <=4MhzMemoria de programa: No protegida

Page 8: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 8

Solución en CCS (III)

En la pestaña de “Interrups” marcar la casilla de “External interrups

Page 9: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 9

Solución en CCS (IV)

En la pestaña “Code” podemos ver el código que se añadirá en nuestro programa.

Page 10: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 10

Solución en CCS (V)

El compilador nos genera la siguiente plantilla.

Función que se ejecutará al producirse la interrupción.

Page 11: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 11

Solución en CCS (VI)

Una posible función de interrupción sería:

Page 12: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 12

Solución en CCS (VII)

El programa principal:

Page 13: La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la interrupción Para habilitar la interrupción externa hay que poner a uno los bits “GIE”e

(c) Domingo Llorente 2010 13

Resumen

Para realizar un programa con la interrupción externa habilitada:

1º.- Antes de la función main();#use fast_io(b)#int_EXTvoid EXT_isr(void) {

// programar aquí la función de interrupción //}

2º.- En la función main() incluir:enable_interrupts(INT_EXT); // Habilita la interrupción en RB0enable_interrupts(GLOBAL); // Habilitación general de interrupción ext_int_edge(H_TO_L); // Config. int. por flanco descendente. (L_TO_H) para ascendenteset_tris_b(0x01); // RB0 entrada, RB1..RB7 salidas

3º.- Programar la función main() según corresponda.

4º.- Cada vez que se genere un flanco de subida o bajada en RB0 se ejecutará la función de interrupción EXT_isr(void) y luego el programa continuará con el programa principal.