Stap 5: Wat zijn de Interrupts
De functies die worden uitgevoerd heten Interrupt Service Routines (ISR) en zijn min of meer eenvoudige functies, maar die neem geen argumenten.
Laten we zien een voorbeeld, iets als het aantal pulsen tellen. De ATMega328P heeft een Analoge Comparator die een interrupt gekoppeld die wordt geactiveerd wanneer een signaal een referentie spanning overtreft heeft. Allereerst moet u de functie die exectuted worden zal definiƫren:
ISR(ANALOG_COMP_vect)
{
teller ++;
}
Dit is echt eenvoudig, dat de ISR()-instructie is een macro die de compiler vertelt dat de volgende functie een Interrupt Service Routine is. Terwijl ANALOG_COMP_vect Interruptvector heet en het vertelt de compiler welke interrupt is gekoppeld aan die routine. Het is in dit geval de Analoge Comparator onderbreken. Dus iedere keer dat de comparator een signaal ziet groter dan een verwijzing vertelt de microcontroller uit te voeren die code, id est in dit geval te verhogen die variabele.
De volgende stap is het inschakelen van de interrupt verbonden. Wij moeten de bit ACIE (Analoge Comparator Interrupt Enable) van het register ACSR (Analoge Comparator instelling registreren) stellen zodat het:
SBI(ACSR,acie);
We kunnen de lijst van alle onderbreken vectoren zien op de volgende site:
http://www.nongnu.org/avr-libc/User-Manual/group__avr__interrupts.html