Har funderat på hur det blir när det kommer flera interrupt samtidigt.
Ofta kan man hitta exempel så här:
Kod: Markera allt
static void interrupt ISR(void)
{
if (TMR0IE && TMR0IF) // Interrupt från Timer0
  {
  TMR0IF = 0;         // Återställ flagga för Timer0
  // gör nåt här
  }
else
if (INTE && INTF)     // Interrupt från INT-pin
  {
  INTF = 0; 
  // gör nåt här
  }
else
if (RCIE && RCIF)     // Seriellt tecken kommit in
  { // RCIF           // Denna bit nollställs genom att läsa RCREG
  // gör nåt här
  }
}
Det går också att hitta exempel med fristående if-satser så här:
Kod: Markera allt
static void interrupt ISR(void)
{
if (TMR0IE && TMR0IF) // Interrupt från Timer0
  {
  TMR0IF = 0;         // Återställ flagga för Timer0
  // gör nåt här
  }
if (INTE && INTF)     // Interrupt från INT-pin
  {
  INTF = 0; 
  // gör nåt här
  }
if (RCIE && RCIF)     // Seriellt tecken kommit in
  { // RCIF           // Denna bit nollställs genom att läsa RCREG
  // gör nåt här
  }
}
Då borde man kunna ha en slinga som söker av alla aktuella interrupt-flaggor och utför dem, i samma interrupt-anrop. Så här:
Kod: Markera allt
static void interrupt ISR(void)
{
boolean IFfixad = false;
do
  {
  if (TMR0IE && TMR0IF) // Interrupt från Timer0
    {
    TMR0IF = 0;         // Återställ flagga för Timer0
    // gör nåt här
    IFfixad = true;
    }
  if (INTE && INTF)     // Interrupt från INT-pin
    {
    INTF = 0; 
    // gör nåt här
    IFfixad = true;
    }
  if (RCIE && RCIF)     // Seriellt tecken kommit in
    { // RCIF           // Denna bit nollställs genom att läsa RCREG
    // gör nåt här
    IFfixad = true;
    }
  }
while (IFfixad );
}
Vad sägs ? För och nackdelar ?
				