Interrupciones Del Pic 16f877a

18
INTERRUPCIONES DEL PIC 16F877A La familia Pic16F877A tiene 13 fuentes de interrupciones los de 28 pines y 14 los de 40 pines. Al aceptarse una interrupción se salva el valor del PC contador de porgrama en la pila y se carga aquel con el valor 0004h, que es el Vector de Interrupcion. La mayoría de los recursos o periféricos de que disponen los Pic16F87x son capaces de ocacionar una interrupción, si se programan adecuadamente los bits de los registros que pasamos a describir a continuación. 1. Desbordamiento del TMR0 2. Activación de la patita de interrupción RB0/INT 3. Cambio de estado de una de las cuatro patitas de mas peso del puerto B 4. Finalización de la escritura de un byte en la EEPROM Registro de Control de Interrupciones (INTCON) Es un registro que podemos leer o escribir y lo lo encontramos en cualquiera de los cuatro bancos, ocupando las direcciones 0x0Bh, 0x8Bh, 0x10Bh, 0x18Bh, respectivamente. Tiene la mision de controlar las interrupciones provocadas por el TMR0, cambio de estado en las cuatro líneas de mas peso de la puerta B y activación de la patita RB0/INT. El bit PEIE actua como una segunda llave parcial de permiso o prohibición de las causas de interrupción que nos estan contenidas en INTCON y que las provocan los restantes periféricos del microcontrolador. GIE es el bit de permiso global de todas las interrupciones. INTCON REGISTER (ADDRESS 0Bh, 8Bh, 10Bh, 18Bh) bit 7 GIE: Bit de permiso global de interrupciones 1 = Enables all unmasked interrupts 0 = Disables all interrupts

Transcript of Interrupciones Del Pic 16f877a

Page 1: Interrupciones Del Pic 16f877a

INTERRUPCIONES DEL PIC 16F877A La familia Pic16F877A tiene 13 fuentes de interrupciones los de 28 pines y 14 los de 40 pines. Al aceptarse una interrupción se salva el valor del PC contador de porgrama en la pila y se carga aquel con el valor 0004h, que es el Vector de Interrupcion. La mayoría de los recursos o periféricos de que disponen los Pic16F87x son capaces de ocacionar una interrupción, si se programan adecuadamente los bits de los registros que pasamos a describir a continuación. 

1. Desbordamiento del TMR02. Activación de la patita de interrupción RB0/INT3. Cambio de estado de una de las cuatro patitas de mas peso del puerto B4. Finalización de la escritura de un byte en la EEPROM

  

Registro de Control de Interrupciones (INTCON) Es un registro que podemos leer o escribir y lo lo encontramos en cualquiera de los cuatro bancos, ocupando las direcciones 0x0Bh, 0x8Bh, 0x10Bh, 0x18Bh, respectivamente. Tiene la mision de controlar las interrupciones provocadas por el TMR0, cambio de estado en las cuatro líneas de mas peso de la puerta B y activación de la patita RB0/INT. El bit PEIE actua como una segunda llave parcial de permiso o prohibición de las causas de interrupción que nos estan contenidas en INTCON y que las provocan los restantes periféricos del microcontrolador. GIE es el bit de permiso global de todas las interrupciones. INTCON REGISTER (ADDRESS 0Bh, 8Bh, 10Bh, 18Bh) 

bit 7 GIE: Bit de permiso global de interrupciones    1 = Enables all unmasked interrupts    0 = Disables all interruptsbit 6 PEIE: Bit de permiso de los perifericos que no se controlan con INTCON    1 = Enables all unmasked peripheral interrupts    0 = Disables all peripheral interruptsbit 5 TMR0IE: Bit de permiso de interrución del TMR0    1 = Enables the TMR0 interrupt    0 = Disables the TMR0 interruptbit 4 INTE : Bit de permiso de la interrución externa por RB0/INT    1 = Enables the RB0/INT external interrupt    0 = Disables the RB0/INT external interruptbit 3 RBIE: Bit de permiso de interrución por cambio en RB4-RB7    1 = Enables the RB port change interrupt    0 = Disables the RB port change interruptbit 2 TMR0IF: Señalizador de desbordamiento en TMR0

Page 2: Interrupciones Del Pic 16f877a

    1 = TMR0 register has overflowed (must be cleared in software)    0 = TMR0 register did not overflowbit 1 INTF: Señalizador de activación de la patita RB0/INT    1 = The RB0/INT external interrupt occurred (must be cleared in software)    0 = The RB0/INT external interrupt did not occurbit 0 RBIF: Señalizador de cambio en RB4 - RB7    1 = At least one of the RB7:RB4 pins changed state; a mismatch condition will continue to set              the bit. Reading PORTB will end the mismatch condition and allow the bit to be cleared             (must be cleared in software).    0 = None of the RB7:RB4 pins have changed state 

Registro de permiso de interrupciones 1 (PIE1) Contiene los bits que permiten (1) o prohiben (0) las interrupciones provocadas por los periféricos internos del microcontrolador y que no estaban contempladas en INTCON. Ocupa la dirección 8Ch y para que cumplan su función los bits de PIE1 es necesario que PEIE=1 en INTCON <6>. El bit PSPIE solo es valido en los modelos de 40 pines, manteniéndose a 0 en los que tienen 28 pines. PIE1 REGISTER (ADDRESS 8Ch) 

bit 7 PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit(1)

    1 = Enables the PSP read/write interrupt    0 = Disables the PSP read/write interrupt Note 1: PSPIE is reserved on PIC16F873A/876A devices; always maintain this bit clear. bit 6 ADIE : A/D Converter Interrupt Enable bit    1 = Enables the A/D converter interrupt    0 = Disables the A/D converter interruptbit 5 RCIE : USART Receive Interrupt Enable bit    1 = Enables the USART receive interrupt    0 = Disables the USART receive interruptbit 4 TXIE : USART Transmit Interrupt Enable bit    1 = Enables the USART transmit interrupt    0 = Disables the USART transmit interruptbit 3 SSPIE: Synchronous Serial Port Interrupt Enable bit    1 = Enables the SSP interrupt    0 = Disables the SSP interruptbit 2 CCP1IE: CCP1 Interrupt Enable bit

Page 3: Interrupciones Del Pic 16f877a

    1 = Enables the CCP1 interrupt    0 = Disables the CCP1 interruptbit 1 TMR2IE: TMR2 to PR2 Match Interrupt Enable bit    1 = Enables the TMR2 to PR2 match interrupt    0 = Disables the TMR2 to PR2 match interruptbit 0 TMR1IE: TMR1 Overflow Interrupt Enable bit    1 = Enables the TMR1 overflow interrupt    0 = Disables the TMR1 overflow interrupt 

Registro de permiso de interrupciones 2 (PIE2) Contiene los bits de permiso de interrupción de las tres causas que no figuran en PIE1. La de fin de escritura en la EEPROM, colisión de bus en el modo SSP y producción de una captura o una comparación en el módulo CCP2. PIE2 REGISTER (ADDRESS 8Dh) 

bit 7 Unimplemented: Read as '0'bit 6 CMIE: Comparator Interrupt Enable bit    1 = Enables the Comparator interrupt    0 = Disable the Comparator interruptbit 5 Unimplemented: Read as '0'bit 4 EEIE: EEPROM Write Operation Interrupt Enable bit    1 = Enable EEPROM write interrupt    0 = Disable EEPROM write interruptbit 3 BCLIE: Bus Collision Interrupt Enable bit    1 = Enable bus collision interrupt    0 = Disable bus collision interruptbit 2-1 Unimplemented: Read as '0'bit 0 CCP2IE : CCP2 Interrupt Enable bit    1 = Enables the CCP2 interrupt    0 = Disables the CCP2 interrupt 

Registros de los señalizadores de interrupciones 1 y 2 (PIR1 y PIR2) En correspondencia con los bits de permiso/prohibición de las causas de interrupción recogidas en los registros PIE1 y PIE2, existen otros dos registros, PIR1 y PIR2, cuyos bits actuan de señalizadores del momento en el que se origina la causa que provoca la interrupción, independientemente de si está permitida o prohibida. Ocupan las direcciones 0Ch y 0Dh, respectivamente. 

Page 4: Interrupciones Del Pic 16f877a

PIR1 REGISTER (ADDRESS 0Ch) 

bit 7 PSPIF: Parallel Slave Port Read/Write Interrupt Flag bit(1)

    1 = A read or a write operation has taken place (must be cleared in software)    0 = No read or write has occurredNote 1: PSPIF is reserved on PIC16F873A/876A devices; always maintain this bit clear. bit 6 ADIF : A/D Converter Interrupt Flag bit    1 = An A/D conversion completed    0 = The A/D conversion is not completebit 5 RCIF : USART Receive Interrupt Flag bit    1 = The USART receive buffer is full    0 = The USART receive buffer is emptybit 4 TXIF : USART Transmit Interrupt Flag bit    1 = The USART transmit buffer is empty    0 = The USART transmit buffer is fullbit 3 SSPIF: Synchronous Serial Port (SSP) Interrupt Flag bit    1 = The SSP interrupt condition has occurred, and must be cleared in software before returning              from the Interrupt Service Routine. The conditions that will set this bit are:            • SPI                - A transmission/reception has taken place.            • I2C Slave                - A transmission/reception has taken place.            • I2C Master                - A transmission/reception has taken place.                - The initiated START condition was completed by the SSP module.                - The initiated STOP condition was completed by the SSP module.                - The initiated Restart condition was completed by the SSP module.                - The initiated Acknowledge condition was completed by the SSP module.                - A START condition occurred while the SSP module was idle (Multi-Master system).                - A STOP condition occurred while the SSP module was idle (Multi-Master system).    0 = No SSP interrupt condition has occurredbit 2 CCP1IF: CCP1 Interrupt Flag bit    Capture mode:    1 = A TMR1 register capture occurred (must be cleared in software)    0 = No TMR1 register capture occurred    Compare mode:    1 = A TMR1 register compare match occurred (must be cleared in software)    0 = No TMR1 register compare match occurred    PWM mode:        Unused in this modebit 1 TMR2IF : TMR2 to PR2 Match Interrupt Flag bit    1 = TMR2 to PR2 match occurred (must be cleared in software)

Page 5: Interrupciones Del Pic 16f877a

    0 = No TMR2 to PR2 match occurredbit 0 TMR1IF: TMR1 Overflow Interrupt Flag bit    1 = TMR1 register overflowed (must be cleared in software)    0 = TMR1 register did not overflow 

PIR2 REGISTER (ADDRESS 0Dh) 

 bit 7 Unimplemented: Read as '0'bit 6 CMIF: Comparator Interrupt Flag bit    1 = The Comparator input has changed (must be cleared in software)    0 = The Comparator input has not changedbit 5 Unimplemented: Read as '0'bit 4 EEIF: EEPROM Write Operation Interrupt Flag bit    1 = The write operation completed (must be cleared in software)    0 = The write operation is not complete or has not been startedbit 3 BCLIF: Bus Collision Interrupt Flag bit    1 = A bus collision has occurred in the SSP, when configured for I2C Master mode    0 = No bus collision has occurredbit 2-1 Unimplemented: Read as '0'bit 0 CCP2IF: CCP2 Interrupt Flag bit    Capture mode:    1 = A TMR1 register capture occurred (must be cleared in software)    0 = No TMR1 register capture occurredCompare mode:    1 = A TMR1 register compare match occurred (must be cleared in software)    0 = No TMR1 register compare match occurredPWM mode:    Unused 

Lógica de Interrupciones:

   

   

Page 6: Interrupciones Del Pic 16f877a

Simular un programa que trabaja la interrupción RB0/INT para ir acumulando los flancos de subida que vayan ingresando por el pin RB0.   

Diagrama de flujo El diagrama de flujo comienza con la configuración del microcontrolador, ingreso al banco 1, allí se configuran los registros INTCON, TRISB y el bit INTEDG del OPTION a fin de detectar pulsos de entrada en RB0/INT por flanco de subida. La rutina de interrupción incrementa la variable CONTADOR en una unidad, y además resetea el flag INTF.

 

Los valores para los bits del registro INTCON son: GIE EEIE T0IE INTE RBIE T01F INTF RBIF1 0 0 1 0 0 0 0 = 0x 90 Código del programa     list p=16f877    include "p16f877.inc"     CONTADOR EQU 0x20 ;POSMEM en la que usaremos una variable     ORG 0 ;Vector de RESET    nop    nop    goto INICIO ;Alta a la direccion donde se inicia el programa    ORG 4 ;Vector de INTERRUPCION    incf CONTADOR,1 ;Contador++    bcf INTCON,INTF ;Resetea el flag de la interrupcion RB0/INT    retfie ;Fin rutina de interupcionINICIO    bcf STATUS,RP0 ;Ir banco 1    bcf STATUS,RP1

Page 7: Interrupciones Del Pic 16f877a

     clrf TRISA ;PORTA salida    clrf TRISB ;PORTB salida    clrf TRISC ;PORTC salida    clrf TRISD ;PORTD salida    clrf TRISE ;PORTD salida    bsf TRISB,0 ;RB0 como entrada    movlw 0x90    movwf INTCON ;Configura INTCON    bsf STATUS,INTEDG ;Detecta flancos de subida que llegan a RB0/INT     bcf STATUS,RP0 ;Ir banco 0    bcf STATUS,RP1    clrf CONTADOR ;Contador=0 BUCLE    nop ;No operacion    nop    goto BUCLE ;Ir a BUCLE END

Introducción

Una interrupción, como el nombre lo sugiere, es un evento que hace que el microcontrolador deje de realizar lo que está haciendo y pase a ejecutar otra tarea. Al finalizar retorna a su actividad inicial. El PIC16F88 tiene hasta 12 fuentes de interrupciones PIC, el PIC16F628A tiene 10 y el PIC16F877A tiene 15. El registro INTCON (figuras 7.1.1 y 7.1.2) contiene las banderas de interrupciones generadas por diferentes eventos. También contiene los bits de habilitación global y particular de las distintas fuentes de interrupción (observar las diferencias en algunos bits de este registro a lo largo de los siguientes temas).

Page 8: Interrupciones Del Pic 16f877a

Las banderas de interrupciones PIC se activan independientemente del estado de sus bits de habilitación o del bit de habilitación global GIE.El bit GIE del registro INTCON permite habilitar o deshabilitar la generación de interrupciones. Cuando están habilitadas (GIE=1) y el bit de habilitación particular y la bandera correspondiente se activan, se produce un salto al vector de interrupción (dirección 0x0004). Las interrupciones individuales pueden habilitarse/deshabilitarse a través de sus bits de habilitación en diferentes registros. El bit GIE se borra al producirse un reset, por lo tanto la generación de interrupciones está deshabilitada normalmente.La instrucción RETFIE se emplea para salir de la rutina de servicio a la interrupción (ISR), así como rehabilitar la generación de interrupciones.Las banderas de las interrupciones INT, RB y del Timer0 se encuentran en el registro INTCON. Las banderas de interrupción de los periféricos están contenidas en los registros PIR1 y PIR2 (16F877A), mientras que los bits de

Page 9: Interrupciones Del Pic 16f877a

habilitación correspondientes se encuentran en los registros PIE1 y PIE2 (16F877A). El bit de habilitación de interrupciones de periféricos (PEIE) está en el registro INTCON.

Cuando se brinda atención a una interrupción, el bit GIE es borrado para deshabilitar cualquier interrupción adicional, la dirección de retorno es guardada (pushed) en la pila (stack) y el contador de programa (PC) es cargado con el valor 0x0004. Una vez dentro de la ISR, la fuente de la interrupción se puede determinar analizando las banderas de interrupción. Las banderas tienen que ser borradas por software antes de rehabilitar las interrupciones, para evitar interrupciones repetitivas.Las interrupciones externas INT o RB4 RB7 pueden generarse cada cierto tiempo como mínimo, que va desde los tres a cuatro ciclos de instrucción, esto depende del instante en que se genera la interrupción. Las banderas de interrupción se activan independientemente del bit de habilitación particular, del bit PEIE o del bit GIE.

Interrupción INT

La interrupción externa en el pin RB0/INT se activa por flanco ascendente o descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando aparece una transición válida en el pin RB0/INT, la bandera INT0IF del registro INTCON toma un valor de 1. Esta interrupción puede ser habilitada/deshabilitada con el bit INT0IE del registro INTCON. La bandera INT0IF tiene que ser borrada por software dentro de la ISR antes de rehabilitar esta interrupción. La interrupción INT puede despertar al PIC, si el bit INT0IE se programó en 1 antes de ingresar al modo Sleep. El estado del bit GIE determina si se produce o no el salto al vector de interrupción después del despertar (los detalles aparecen en las secciones 6.11 MODO DE BAJO CONSUMO (Sleep) PIC16F88 o 6.19 MODO DE BAJO CONSUMO (Sleep) PIC16F628A y PIC16F877A del libro).

Interrupción del Timer 0

El desbordamiento del registro TMR0 (desde 0xFF a 0x00) genera una interrupción, lo cual hace que el bit TMR0IF del registro INTCON sea igual a 1. La generación de esta interrupción se puede habilitar/deshabilitar con el bit TMR0IE del registro INTCON. El bit TMR0IF tiene que ser borrado por software dentro de la ISR antes de rehabilitar esta interrupción. Esta interrupción no puede despertar al PIC, ya que el temporizador está apagado durante el modo Sleep.

Page 10: Interrupciones Del Pic 16f877a

Interrupciones RB4 RB7

Un cambio de estado en cualquiera de los pines RB<7:4> genera una interrupción y hace que la bandera RBIF del registro INTCON tome un valor de 1. Esta interrupción puede habilitarse/deshabilitarse con el bit RBIE del registro INTCON. Únicamente los pines configurados como entradas pueden producir esta interrupción. Los pines de entrada RB<7:4> se comparan con el estado anterior que tenían en la última lectura del puerto B. Si no hay coincidencia en todos los pines, se genera la interrupción.

Esta interrupción puede despertar al PIC. El usuario, dentro de la ISR, puede borrar la bandera de interrupción con cualquiera de los métodos siguientes:

Lectura o escritura del registro PORTB. Esto concluye la condición de falta de coincidencia.

Borrar la bandera RBIF.

Esta interrupción se recomienda para despertar al PIC en caso de presionar una tecla o en el caso de que el puerto B se emplee únicamente para las interrupciones RB4 RB7. La lectura continua (Polling) del puerto B no se recomienda mientras se usa la función de interrupción RB.

Manejo de interrupciones en mikroC

Las interrupciones PIC pueden manipularse fácilmente por medio de la palabra reservada interrupt. En mikroC se ha declarado de manera implícita la función interrupt, la cual no puede ser redeclarada. Su prototipo es:

void interrupt(void);

Lo único que el usuario tiene que hacer es escribir la definición de esta función (rutina de servicio a la interrupción ISR) para manejar interrupciones en la aplicación que esté desarrollando. mikroC se encarga de salvar y recuperar de la pila (stack) los registros W, STATUS, FSR y PCLATH.

Se pueden realizar llamadas a funciones desde la función interrupt. El compilador toma en cuenta los registros que se están empleando tanto en la función interrupt como en la función main, y salva únicamente los registros que se emplean en ambas funciones.

Page 11: Interrupciones Del Pic 16f877a

En caso de que haya múltiples interrupciones habilitadas, se debe detectar la fuente de la interrupción por medio de las banderas de interrupción (flags) y proceder a la ejecución del código apropiado.

Ejemplos de programación de las interrupciones PIC

Estos ejemplos corresponden al PIC16F88. El código fuente para los PICs 16F628A y 16F877A se encuentra en las carpetas correspondientes que acompañan a este libro.El siguiente ejemplo fue resuelto en el Capítulo III (LCD1.c) empleando la técnica de lectura continua (Polling) de la entrada RA4; ahora se resolverá con la interrupción INT. Nótese el uso del pin RB0/INT para cumplir dos funciones: como salida de datos hacia el LCD y como entrada para la interrupción INT. El programa se encarga de mantener el valor original del registro TRISB.

Ejemplo-INT1.c: Cada vez que presiona el pulsador conectado en RB0 se incrementa un contador que se visualiza en el centro de la segunda línea de la pantalla (figuras 7.2.1 y 7.2.2). Si la cuenta supera 100, el conteo se reinicia desde 0. En el centro de la primera línea se muestra la palabra “Conteo:”

Page 12: Interrupciones Del Pic 16f877a

Figura 7.2.1 Circuito del problema INT1.c (PIC16F88 y 16F628A)

//INT1.c//Declaración de las 12 variables necesarias para la conexión//del módulo LCD.sbit LCD_RS at RB4_bit;sbit LCD_EN at RB5_bit;sbit LCD_D4 at RB0_bit;sbit LCD_D5 at RB1_bit;sbit LCD_D6 at RB2_bit;sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit;sbit LCD_D4_Direction at TRISB0_bit;sbit LCD_D5_Direction at TRISB1_bit;sbit LCD_D6_Direction at TRISB2_bit;sbit LCD_D7_Direction at TRISB3_bit;// Fin de declaración de variables de conexión.

Page 13: Interrupciones Del Pic 16f877a

char contador=0,texto[4], respaldo; 

void main(){ OSCCON=0x40;                //Oscilador interno a 1MHz.while (OSCCON.IOFS==0);//Esperar mientras el oscilador está inestable.ANSEL=0x00;                 //Bits AN6:AN0 como E/S digital.GIE_bit=1;                  //Interrupciones habilitadas.NOT_RBPU_bit=0;             //Pull ups habilitados.INTEDG_bit=0;               //INT por flanco descendente.

Lcd_Init();                 //Inicializa el LCD. Lcd_Cmd(_LCD_CLEAR);        //Borra el display.Lcd_Cmd(_LCD_CURSOR_OFF);   //Apaga el cursor.Lcd_Out(1,6,"Conteo:");ByteToStr(contador,texto);Lcd_Out(2,6,texto);

respaldo=TRISB;             //Guardar el estado de TRISB. TRISB0_bit=1;               //RB0 como entrada.INTE_bit=1;                 //Interrupción INT habilitada.while (1){ asm SLEEP                  //Entra en modo SLEEP. asm NOP                    //Se despierta por INT, ejecuta NOP y                            //salta a "interrupt". ByteToStr(contador,texto); //Retorna de "interrupt" y continúa. TRISB=respaldo;            //Restaurar TRISB. Lcd_Out(2,6,texto); respaldo=TRISB;            //Guardar el estado de TRISB. TRISB0_bit=1;              //RB0 como entrada.}}

void interrupt(void) { Delay_ms(20); if (RB0_bit==0) contador++;  //Pulsador presionado. while (RB0_bit==0);          //Esperar mientras siga presionado. if (contador >100) contador=0; INTF_bit=0;}

Page 14: Interrupciones Del Pic 16f877a

Interrupciones PIC16F877A

INTERRUPCIONES PARA EL PIC 16F877A

Una subrutina de interrupción es aquella que se ejecuta cada vez que se solicita

una interrupción.

El PIC 16F877A tiene la particularidad de manejar 13 fuentes de interrupción

diferentes, de las cuales haremos aplicaciones para dos de ellas:

  1. Activación de la patita de interrupción RB0/INT

  2. Desbordamiento del TMR0

  3. Cambio de estado de una de las cuatro patitas de mas peso del puerto B

  4. Finalización de la escritura de un byte en la EEPROM

  5. Desbordamiento del Timer1

  6. Desbordamiento del Timer2

  7. Captura o comparación en el módulo CCP1

  8. Captura o comparación en el módulo CCP2

  9. Transferencia en la puerta serie Síncrona

  10. Colisión de bus en la puerta serie Síncrona

  11. Fin de la transmisión en el USART

  12. Fin de la recepción en el USART

  13. Fin de la conversión en el convertidor A/D

  14. Transferencia en la puerta paralela esclava

Hasta la opción 4 las tiene el PIC 16F84A, uno de los PICS de la familia 16FXX.

Iniciaremos con la opción 1: interrupción por la terminal RB0.

Al aceptarse una interrupción se salva el valor del contador de programa PC en la

pila y se carga el PC con el valor 0004h, que es el Vector de Interrupción. Cuando

se solicita la interrupción, el programa se “va” a la dirección 0004h.

REGISTRO DE CONTROL DE INTERRUPCIONES (INTCON)

Es un registro de lectura y escritura que se encuentra en los cuatro bancos de

memoria del PIC, ocupando las direcciones 0x0Bh, 0x8Bh, 0x10Bh, 0x18Bh. Tiene

la misión de ser usado para controlar las interrupciones provocadas por el TMR0,

cambio de estado en las cuatro líneas de más peso del puerto B y activación de la

terminal RB0/INT. GIE es el bit de permiso global de todas las interrupciones.