Anda di halaman 1dari 12

INTERRUPCIONES

Muchas veces nos gustara que el procesador para realizar una


tarea, si se produce un evento especfico

Dos mtodos para comprobar si se ha producido este evento:
sondeo:
Verificar continuamente para el evento en varios puntos en el cdigo

Interrupciones:
"Interrumpe" el programa principal y se inicia una rutina de servicio de
interrupcin cuando se produce un evento


SONDEO E
INTERRUPCIONES
EJEMPLO DE SONDE EN
C
RA0 = 1; //Pone en 1 RA0
while(RB0 == 0); //se cicla
mientras
//RB0 sea 0
RA0 = 0; //pone en 0 RA0
RA0 = 1
RB0 = 1
??
RA0 = 0
Yes
No
HABILTANDO
INTERRUPCIONES
El procesador debe ser informado que se usaran las
interrupciones
Un nmero de registros estan destinados a la habilitacin y
configuracn de las interrupciones:
Control de interrupcin (INTCON)
Habilitar interrupcin por periferico 1 (PIE1)
Habilitar interrupcin por periferico 2 (PIE2)
LOGCA DE
INTERRUPCIONES
INTE
RBIE
TMR2IE
ADIE
PEIE
GIE
Interrupt
Otros perifericos
INTF
RBIF
TMR2IF
ADIF
TMR0IF
Timer0
Int.
Externa
Cambio en
Pines del
Puerto B
Interrupcin
global activado
TMR0IE
Nucleo Bits de
interrupcion ubicados en el
registro INTCON
GIE
REGSTRO INTCON
(INTERRUPCIONES DE NUCLEO)
PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF
Habilita interrupcin global GIE
Habilita la interupcin por periferico PEIE
Habilita Interrupcion por TIMER0 TMR0IE
Habililta interrupcin Externa INTE
Habilita interrupcin por cambio en PB RBIE
Descripcin Enable Bits
Flag Int. desbordamiento Timer0 TMR0IF
Flag Int. Externa RB0/INT INTF
Flag Int por cambio en PORTB RBIF
Descripcin Flag Bits
bit 0 bit 7
Debe ser puesto en
1 para usar las
interrupciones
Debe ser puesto en
1 para usar
interrupcin por
periferico
Flags estaran en 1
aunque no se
activen las
interrupciones
GIE
PEIE
TMR0IE
INTE
RBIE
TMR0IF
INTF
RBIF
HABILITANDO UNA INTERRUPCIN
CORE EN C
void main (void)
{
<codigo para configurar>

// initialize INTCON
INTCON = 0b00000000;

//enable an external
//interrupt on the INT pin
INTE = 1;

//enable global interrupts
GIE = 1;

while(1) ; //loop forever
}
void interrupt isr (void)
{ //limpia int ext
//flag para habilitar int.
//despues esta isr
INTF = 0;

//<ISR code>
}
INTCON
GIE
0
Dir de mem de prog
Stack
0 0 0 0 0 0 0 1 1
INTE INTF
1
Contador de
programa
Dir de mem de prog
Bit GIE automaticamente
seteado cuando se
completa ISR
Interrupt detected
on RB0/INT pin
Bit GIE automaticamente
limpiado por hardware
INTERRUPCIN DE PERIFERICOS
Dos registros habilitar las interrupciones de perifricos
Peripheral Interrupt Enable 1 (PIE1)
Peripheral Interrupt Enable 2 (PIE2)

Dos registros muestran los flags de cada interrupcin
por periferico-
Perifrico solicitud de interrupcin 1 (PIR1)
Perifrico solicitud de interrupcin 2 (PIR2)
Flags estaran en 1 si no se activan las interrupciones,
REGISTROS PIE1 AND PIR1
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
PIE1 Register (Peripheral Interrupt Enables)
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
PIR1 Register (Peripheral Interrupt Requests)
ADC conversion completa ADIF ADIE
AUSART buffer de recepcin lleno RCIF RCIE
AUSART buffer de transmisin lleno TXIF TXIE
Interrupcin I
2
C SPI SSPIF SSPIE
Registro Timer1 CCP1IF CCP1IE
Valor de Timer2 y periodo PR2 coinciden en valor TMR2IF TMR2IE
Registro de Timer1 fue desbordado TMR1IF TMR1IE
Condicin Flag Enable
Checa las localizaciones de bits en los diferentes PICS
REGISTROSPIE2 Y PIR2
C2IE C1IE EEIE BCLIE ULPWUIE CCP2IE OSCFIE
Regstro PIE2 (Habilitacin de Interrupcines)
C2IF C1IF EEIF BCLIF ULPWUIF CCP2IF OSCFIF
Registro PIR2 (Flags de Interrupci)
Cambio salida comparador2 C2IF C2IE
Cambio en salida comparador1 C1IF C1IE
Operacion de escritura completacompleted EEIF EEIE
Ha ocurrido colision en BUS MSSP en modo I2C BCLIF BCLIE
Condicin de Wake-up ha ocurrido ULPWUIF ULPWUIE
Timer1 Captura o concidencia ha occurrido CCP2IF CCP2IE
Falla sistema del oscilador OSCFIF OSCFIE
Condicin Flag Enable
1 1
INTCON
GIE PEIE
PIE1
PIR1
TMR1IE
TMR1IF
1
0 1
0
while(1); direccin
while(1); direccin
void interrupt isr (void)
{
//Clear the interrupt flag
TMR1IF = 0;

// <ISR code>
} //ISR completes
void main (void)
{
//clear the interrupt flag
TMR1IF = 0;

//enable Timer 1 interrupt
TMR1IE = 1;

//Enable peripheral and
//global interrupts
PEIE = 1;
GIE = 1;

// <code to set up Timer1>
while(1); //loop forever
}

Contador de pro.
Stack
HBILITANDO UNA INT. POR PERIFERICO
C
(TIMER1)
Bit GIE es automaticamete
seteado cuando ISR se
completa
Desbordamiento
Timer 1
Bit GIE es
autamaticamente limppiado
por hardware
Programacin de Microcontroladores usando XC8. 2013 Mk-Pro Mekatronika 11
PRIORIDAD DE INTERRUPCIN
Familias PIC linea media tratan todas las interrupciones
con la misma prioridad

El programador debe hacer lo siguiente:
Determinar la fuente de interrupcin.
Determinar el orden en que se atendera la interrupcin.

Anda mungkin juga menyukai