Girino - snabb Arduino oscilloskop (5 / 26 steg)
Steg 5: Vad är avbrotten
De funktioner som utförs kallas Avbryta tjänsten rutiner (ISR) och är mer eller mindre enkla funktioner, men som inte tar argument.
Låt oss se ett exempel, något som räknar några pulser. ATMega328P har en Analog kontrollapparat som har ett avbrott samband som aktiveras när en signal överträffar en referensspänningen. Först av allt måste du definiera den funktion som kommer att vara exectuted:
ISR(ANALOG_COMP_vect)
{
räknaren ++;
}
Detta är verkligen enkelt, instruktionen ISR() är ett makro som talar om för kompilatorn att följande funktion är en avbryta tjänsten rutin. Medan ANALOG_COMP_vect kallas Avbrottsvektor och det talar om för kompilatorn är vilka avbrott associerad med denna rutin. Det är i detta fall Analog komparator avbryta. Så varje gång som motsvarigheten ser en signal större än en referens det berättar mikrokontroller köra denna kod, id est i detta fall att öka den variabeln.
Nästa steg är att avbrottet samband. Det måste vi ange ACIE (Analog komparator avbryta aktiverar) lite av ACSR (Analog komparator inställningen Register) registret:
SBI(ACSR,ACIE);
I följande webbplats kan vi se listan över alla avbryta vektorer:
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html