Manejo de Interrupciones
June 8, 2007 at 4:47 pm | Posted in Rutinas, Tutorial | 20 CommentsUna interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego regrese y continue la tarea que estaba realizando antes de que se presentara la interrupción. El pic 16F628 (y el 16F628A) tiene 10 fuentes de interrupción, si las interrupciones están habilitadas cada vez que una de estos acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la interrupción y al termino de la misma continuará ejecutando el programa donde lo había dejado. Las fuentes de interrupción son:
- Interrupción externa RB0/INT
- Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)
- Interrupción por desborde del timer 0 (TMR0)
- Interrupción por desborde del timer 1 (TMR1)
- Interrupción por comparación exitosa exitosa en TMR2
- Interrupción del comparador
- Interrupción del transmisor del USART
- Interrupción del receptor del USART
- Interrupción del módulo CCP
- Interrupción del EEPROM
Aunque el pic cuenta con 10 fuentes distintas de interrupción solamentetiene un vector de interrupción por lo que si se habilitan varias interrupciones al momento de presentarse cualquiera de ellas el programa saltara a la misma rutina de interrupcion y es responsabilidad del programador crear una rutina que identifique la fuente de la interrupcion.
Lea el artículo completo en el blog Circuitos electronicos.
20 Comments »
RSS feed for comments on this post. TrackBack URI
Leave a comment
Blog at WordPress.com.
Entries and comments feeds.
Hola me parece muy bueno este tutorial sobre interrupciones esta muy bien explicado y espero que sigas subiendo ejemplos de interrupciones para otros perifericos
Comment by el diodo— June 10, 2007 #
Para cada periférico que explique trataré de poner un ejemplo de manejo sin interrupciones y otro con interrupciones para que todo quede mas claro.
Comment by micropic— June 11, 2007 #
es muy bueno lo que haces, sigue asi. van mis mas sinceras felicitaciones
Comment by Bajofe— June 12, 2007 #
Muchas gracias por tu comentario Bajofe, espero que está página te sea de ayuda y que continúes visitandola.
Comment by micropic— June 12, 2007 #
hola…muy bueno tu nemonico sobre interrupciones para el puerto B por cambio de nievel…pero quiero saber como hacer para eliminar el rebote para un interrupcion por el pin RB0 ya que este pin tiene conectado un pulsador…es que tengo ese problema en un programa que estoy haciendo…y adema tendo otra interrupcion por el timer cero…Te agradezco tu ayuda…
Comment by alejandro aponte— July 3, 2007 #
Para eliminar el rebote puedes utilizar una rutina como la que aparece en el ejemplo de este tutorial pero revisando el estado del pin RB0.
Antirrebotes
btfsc PORTB,0
goto ANTIRREBOTES
Comment by micropic— July 3, 2007 #
hola a todos, necesito por favor alguien q me pueda ayudar con un proyecto de una alarma, estoy usando el micro 16f877 y como software mplab ide 7.5.
debe ser una alarma codificada, con teclado matricial y LCD….. quien me pueda ayudar por favor escriba…
Gracias
Comment by juan carlos— September 12, 2007 #
de nuevo yo, necesito esa ayuda urgente porfavor, asi q aqui les dejo mi correo a quienes me puedan colaborar, jcudistrital@hotmail.com si me agregan y me desean colaborar, les podre dar mas detalles sobre este proyecto…… claro q si alguien necesita tambn ayuda y les puedo servir en algo, tambn cuenten conmigo…………
Por ultimo saludes desde bogota colombia……
gracias…..
Comment by juan carlos— September 12, 2007 #
holas
Y que pasa al programas en c.
uso el hi-tech picc
mi definicion de interrupcion
es
void interup timer1()
{
//aqui va mis prefgutnas por el timpo de interrupcion //que se dio
}
porque debo de escribir …timer1(), ya que probando si lo modifico parace que busca la funcion de interrupcion y no la encuentra y sale
Comment by yaneth— April 11, 2008 #
Me gusto tu página, te felicito , se que es mucho trabajo.
Por ahora solo entre a la de interrupciones.
Con respecto al “GIE” que lo pones a 0 cuando ocurre una interrupción. Mi pregunta es si esto no lo hace sólo el micro y con el “RECTFIE” la vuelve a poner en 1.
Lo de limpiar la bandera RBIF es CORRECTO. Hay que hacerlo por soft.
Saludos
Guillermo
Comment by Guillermo— June 27, 2008 #
Esta notable la página.
La pregunta es porque estás deshabilitando el GIE cuando entrás a la ISR y lo habilitás al salir (antes de hacer ‘retfie’). El PIC no hace esto de por si?
Saludos,
Diego
Comment by Diego— July 1, 2008 #
no entiendo porque pones esto : goto $+3
en el Checa_Booton.
Comment by daniel— September 21, 2008 #
Hola, muy buen ejemplo de uso de las interrupciones, me sirvió para aclarar alguna dudas que tengo.
El link a el post de “Leer Botones e Interruptotres” lo tenes mal, el correcto es
******************************************************
@Daniel: Ese simbolo indica la linea del codigo en la que esta, es decir, que al poner $+3 estaria llendo el goto a partir de la linea donde esta $ sumandole 3, entonces salta los call
Comment by Ayuda Electronica— October 23, 2008 #
¡Hola a todos!
Estoy haciendo un programa en ensamblador para comunicar un pic con la PC por medio de la USART, pero me esta costando trabajo en configurar la USART y el manejo de interrupciones de Recepción y Transmisión, alguien puede ayudarme o si conocen donde puedo encontrar informacion como esta, por cierto una felicitacion al autor de este blog.
¡gracias!
Comment by Fernando Torres— October 24, 2008 #
Buenas Tardes a Todos.
Muy buena la pagina. Todo Bien,
Yo quería saber si al momento de realizar la interrupción por cambio de flanco de RB4 a RB7 te dio algún problema en el Proteus, es decir, al momento de simularlo. Ya que en mi caso, yo estoy utilizando un P16F877, y no me apaga el bit bandera RBIF, por lo tanto me queda constantemente activándose la interrupción. Yo realice la ejecución del programa con el MPLAB, y si me funciona a la perfección, pero en el Proteus no. Cualquier ayuda se agradece.
Comment by Manuel— July 24, 2009 #
hola , cuando pones goto $+3 , a donde va? muchas gracias
Comment by juan— November 23, 2009 #
Hola!! Oye gracias por el tutorial, me fue de gran ayuda, sigue asi.
Comment by Meche— December 15, 2009 #
que tal oye das excelente informacion pero no podrias dar ejemplos en programacion lenguaje C por favor, ya que siento que es mas sencillo
Comment by Hiram— December 30, 2009 #
interrupcione E/S ejemplos
interrupcion por software ejemplo
Comment by john— January 12, 2010 #
Muchisimas gracias a quien haya escrito este post, no tiene idea de la gran ayuda que me ha sido.
Gracias, y en cuanto adquiera los suficientes conocimientos comenzare a postear, para engrandecer a la comunidad.
Comment by maverick— June 20, 2010 #