MICROCONTROLADOR AVR INTERRUPCIONES
El microcontrolador AVR se programa para que realice alguna tarea, el programa esta preparado para que se ejecute instrucción tras instrucción de forma ordenada dentro de un ciclo, a esto se llama el programa principal.
Las interrupciones del microcontrolador AVR son eventos que hacen que el programa principal se detenga para permitir que el microcontrolador AVR se dedique a realizar otras tareas que solo realizará si ocurre la interrupción, mientras no ocurra una interrupción el microcontrolador AVR solo realizará las instrucciones indicadas dentro del programa principal.
Al terminar de realizar la tarea encomendada cuando se produce la interrupción, el microcontrolador AVR vuelve al programa principal, vuelve a la instrucción donde se quedo al responder a la interrupción y el programa principal continuará normalmente.
Cada modelo de microcontrolador AVR está preparado para detectar algunos tipos de interrupciones, para ello el microcontrolador AVR cuenta con registros que se encargarán del control de las interrupciones, entre estos registros están los que permiten habilitar el uso de las interrupciones, y los que permiten detectar que se ha producido una interrupción, lo que nos deja conocer cual ha sido la causa de la interrupción.
MICROCONTROLADOR AVR INTERRUPCIONES CON EL XC8
Para la programación de los microcontroladores AVR y por tanto de las interrupciones con el AVR, se utilizará el XC8 en el MPLABX, o con el MICROCHIP STUDIO con los que se programa en C/C++, se utilizan estos programa porque facilitan mucho la comprensión de la forma de utilizar los registros involucrados en el uso de las interrupciones del microcontrolador AVR.
Una vez que se comprenda el uso de las interrupciones, resulta mas fácil realizar otros programas dedicados a los microcontroladores AVR, de ahí la importancia de este tema, por ende nuestra recomendación es dedicarle mucho esfuerzo y aprender a usar las interrupciones.
Para el uso de las interrupciones con el XC8, en el programa que se esté preparando se tendrá que incluir la librería avr/interrupt.h, para habilitar las interrupciones se utilizará la función sei() y para deshabilitarlas se utilizará la función cli().
Cada microcontrolador AVR tiene un conjunto llamado vectores de interrupciones, que vienen a representar las interrupciones a las cuales responderá; por ejemplo en la hoja de datos del microcontrolador AVR Atmega88 en la sección relativa a las interrupciones se ve que este tiene 26 vectores de interrupciones, o 26 motivos por los que se puede producir una interrupción.
Según el vector de interrupción que se quiera utilizar será necesario programar algunos registros mas, esto se verá cuando se traten las diversas opciones que nos brindan los microcontroladores AVR, por ejemplo la interrupción provocada por el convertidor analógico digita, o las interrupciones provocadas por los temporizadores entre otras.
En el XC8 habrá que crear una función conocida como rutina de atención a las interrupciones, esta función siempre se llamará ISR, en esta función según el microcontrolador AVR utilizado se utilizará como parámetro el nombre del vector de interrupción a utilizar seguido de _vect, por ejemplo para la interrupción externa 0 será así INTO_vect, la función siempre se llamará ISR, la forma general será así.
ISR(nombreVector1_vect){//rutina de atención a las interrupciones
//tareas a realizar durante la interrupción1
}//fin de la interrupción1
ISR(nombreVector2_vect){//rutina de atención a las interrupciones
//tareas a realizar durante la interrupción2
}//fin de la interrupción2
Poe ejemplo para el caso del vector de interrupción INT0, será como sigue.
ISR(INT0_vect){//rutina de atención a la interrupción externa 0
//tareas a realizar durante la interrupción externa 0
}//fin de la interrupción externa 0
Dentro de esta función se programan las tareas que se quiere que haga el AVR cuando ocurre la interrupción.
En tareas a realizar dentro de la rutina de interrupciones hay que procurar en lo posible que sean lo mas cortas posibles, ya que el programa principal estará detenido en ese momento, evitar en lo posible utilizar bucles largos.
Se recomienda revisar la hoja de datos del microcontrolador AVR utilizado para ver cuales son los vectores que pueden provocar interrupciones en ese AVR,
Publicar un comentario