Прерывания
Как будет видно далее, в проекте используются прерывания. Прерывания - это сигналы микроконтроллеру остановить выполнение основного цикла и начать выполнять определенные функции. Рисунки ниже, нагляднее покажут идею прерываний:
Функции, которые выполняются, называются обработчиками прерываний (ISR), это обычные функции без параметров.
Рассмотрим пример, для подсчета импульсов. ATMega328P имеет встроенный компаратор, который имеет прерывание, которое активируется, когда сигнал превышает установленное значение. Прежде всего необходимо объявить функцию-обработчик
ISR(АNАLОG_CОMP_vect)
{
counter++;
}
Инструкция ISR() является макросом, который сообщает компилятору, что данная функция является обработчиком прерывания. АNАLОG_CОMP_vect - вектор прерывания, он сообщает компилятору, какое прерывание будет обрабатываться данным обработчиком. Таким образом, каждый раз, когда компаратор обнаружит, что сигнал выше определенной цифры, переменная counter увеличится.
Далее необходимо разрешить прерывание. Для этого необходимо установить в 1 бит ACIE регистра ACSR:
{
counter++;
}
Инструкция ISR() является макросом, который сообщает компилятору, что данная функция является обработчиком прерывания. АNАLОG_CОMP_vect - вектор прерывания, он сообщает компилятору, какое прерывание будет обрабатываться данным обработчиком. Таким образом, каждый раз, когда компаратор обнаружит, что сигнал выше определенной цифры, переменная counter увеличится.
Далее необходимо разрешить прерывание. Для этого необходимо установить в 1 бит ACIE регистра ACSR:
sbi(ACSR,ACIE);