Manejo de Interrupciones

June 8, 2007 at 4:47 pm | Posted in Rutinas, Tutorial | 20 Comments

Una 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

  1. Hola me parece muy bueno este tutorial sobre interrupciones esta muy bien explicado y espero que sigas subiendo ejemplos de interrupciones para otros perifericos

  2. 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.

  3. es muy bueno lo que haces, sigue asi. van mis mas sinceras felicitaciones

  4. Muchas gracias por tu comentario Bajofe, espero que está página te sea de ayuda y que continúes visitandola.

  5. 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…

  6. 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

  7. 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

  8. 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…..

  9. 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

  10. 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

  11. 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

  12. no entiendo porque pones esto : goto $+3
    en el Checa_Booton.

  13. 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

    Leer botones e interruptores

    ******************************************************

    @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

  14. ¡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!

  15. 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.

  16. hola , cuando pones goto $+3 , a donde va? muchas gracias

  17. Hola!! Oye gracias por el tutorial, me fue de gran ayuda, sigue asi.

  18. que tal oye das excelente informacion pero no podrias dar ejemplos en programacion lenguaje C por favor, ya que siento que es mas sencillo

  19. interrupcione E/S ejemplos

    interrupcion por software ejemplo

  20. 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.


Leave a comment

Blog at WordPress.com.
Entries and comments feeds.