La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la...
Transcript of La interrupción externa - IES LUIS DE LUCENAc) Domingo Llorente 2010 2 Habilitación de la...
![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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/1.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/2.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/3.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/4.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/5.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/6.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/7.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/8.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/9.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/10.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/11.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/12.jpg)
(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](https://reader033.fdocuments.in/reader033/viewer/2022051801/5ae372a97f8b9a595d8e6d1a/html5/thumbnails/13.jpg)
(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.