Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » Microcontroladores » Interrupciones y Temporizaciones (1 de 15)  

.: INTERRUPCIONES:

Una de las características más importante de los microcontroladores y que mencionamos al inicio en nuestro primer tutorial, es que tienen la posibilidad de manejar interrupciones, y qué es esto...???

Muy sencillo, se trata de un acontecimiento que hace que el micro deje de lado lo que se encuentra realizando, atienda ese suceso y luego regrese y continúe con lo suyo.

Pues eso son las interrupciones, pero veamos, hay dos tipos de interrupciones posibles, una es mediante una acción externa (es decir por la activación de uno de sus pines), la otra es interna (por ejemplo cuando ocurre el desbordamiento de uno de sus registros)

En el PIC 16f84 hay 4 fuentes de interrupciones, veamos cuales son...

  • Por el pin RB0/INT, que regresa al PIC del modo SLEEP (interrupción externa).
  • Por los pines RB4 a RB7, configurados como entrada y en caso de que alguno de ellos cambie de estado (interrupción externa).
  • Por desbordamiento del registro TMR0, cuando este registro pasa de 255 a 0 en decimal ó 0xFF a 0x00 en hexa (interrupción interna).
  • Al completar la escritura de la EEPROM de datos (interrupción interna).

El tema es que, debe haber algo que nos indique la fuente de interrupción que se ha producido, y estas son las banderas de interrupciones, cada interrupción tiene su propia bandera y es un bit del registro INTCON, que cambia de estado de 0 a 1 cuando se produce la interrupción, salvo la última que se encuentra en el registro EECON1

Ahora veamos cuales son esas banderas...

  • Para RB0/INT la bandera es INTF (Bit1)
  • Parar los pines RB4 a RB7, es RBIF (Bit0)
  • Para TMR0, es T0IF (Bit2)
  • Para la EEPROM, es EEIF (Bit4) en el registro EECON1.

Si prestas atención, todas estas banderas terminan en F es decir FLAG's, aplausos para mí...!!! :o))

Bien, ahora veremos todo esto en el registro INTCON, aquí va...

REGISTRO INTCON
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

El Bit GIE habilita todas las interrupciones, Los Bit's de fondo gris son las banderas, y los BIT's que se corresponden con cada flag son la habilitación de la fuente de interrupción para que esta cambie, recuerda que el flag de EEIE se encuentra en el registro EECON1.

Y ahora los detalles de cada Bit del registro INTCON.

BIT's L ó E Reset Descripción
Bit 7: GIE
Habilitación General.
L/E 0 1 = Todas las Interrupciones activadas
0 = Todas las Interrupciones desactivadas
Bit 6: EEIE
Int. de Periféricos
L/E 0 1 = Activada
0 = Desactivada
Bit 5: T0IE
Int. del TMR0
L/E 0 1 = Activada
0 = Desactivada
Bit 4: INTE
Int. Externa
L/E 0 1 = Activada
0 = Desactivada
Bit 3: RBIE
Int. por PORTB
L/E 0 1 = Activada
0 = Desactivada
Bit 2: T0IF
Bandera del TMR0.
L/E 0 1 = TMR0 desbordado.
0 = No se ha desbordado
Bit 1: INTF
Bandera - RB0/INT
L/E 0 1 = Ocurrió una interrupción externa
0 = No ha ocurrido interrupción externa
Bit 0: RBIF
Bandera - RB4:RB7
L/E x 1 = Al menos un pin cambio de estado
0 = Ningún pin ha cambiado de estado.


En la tabla, los valores de L ó E son para que sepas si el bit es de lectura o escritura, los valores de Reset son el estado de cada Bit después de producirse un reset o cuando se inicia el micro.

Por cierto y antes de que lo olvide, si bien cada flag cambia o se pone a 1 al producirse una interrupción, es tarea tuya borrarlo o ponerlo a cero nuevamente, ya que si no lo haces el micro estará siempre interrumpido o lo que es lo mismo, creerá que la interrupción se está produciendo continuamente.

Recapitulemos un poco... Ya sabemos como y cuando se produce una interrupción, conocemos las banderas que nos indican la fuente de interrupción producida, conocemos el registro donde se encuentran y los valores que toman cada uno de sus BIT's. Pues bien, ahora hay que atenderlas.

Lo primero que debes saber, es que cuando una interrupción se produce, sea cual fuere la fuente de interrupción, el micro deja todo y salta a la dirección 0x04, éste es el vector de interrupción, si recuerdas de nuestro primer tutorial, siempre saltábamos por encima de esta dirección para iniciar nuestro programa, en esta dirección es donde escribiremos la rutina que dé servicio a todas las interrupciones, o bien haremos un salto a donde se encuentre ese trozo de código, el cual se conoce como ISR (Rutina de Servicio de Interrupción)

El Tiempo de Procesamiento de la ISR debe ser lo más breve posible, para dar lugar a que se ejecuten las otras interrupciones, ya que puedes haber habilitado más de una de ellas.

Lo más crítico de una interrupción es tener que guardar todos los registros importantes con sus respectivos valores, para luego restaurarlos, y así el micro pueda continuar con la tarea que estaba realizando cuando fue interrumpido.

Eso es lo que veremos ahora...



R-Luis...

<-- Anterior   Introducción   Siguiente -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15
Tabla de Referencias


    
--| |--