Работа с прерываниями INT0 и INT1

ATtiny2313


INT0 и INT1 — это внешние прерывания которые обрабатываются когда возникают внешние события на входах INT0 и INT1. Внешним событием может быть изменение логического состояния на входах INT0 и INT1, а само срабатывание прерывания может происходить как по фронту, так и по уровню входного сигнала.

За внешние прерывания отвечают три регистра.

 

Регистр MCUCR — определяет тип обрабатываемого события

7 6 5 4 3 2 1 0
ICS11 ICS10 ICS01 ICS00

Биты регистра ICS01 и ICS00 отвечают за тип события на INT0,  ICS11 и ICS10 за INT1.

Типы событий при которых происходит прерывание:

  • 00 – Низкий уровень на ножке INT0 или INT1
  • 01 – Любое изменение на ножке INT0 или INT1
  • 10 – нисходящий фронт на ножке INT0 или INT1
  • 11 – восходящий фронт на ножке INT0 или INT1

Пример использования:

MCUCR |= (1<<ISC01); // прерывание происходит при любом изменении на входе INT0

Регистр GIMSK — разрешает прерывания

7 6 5 4 3 2 1 0
INT1 INT0

Пример использования:

GIMSK |= (1<<INT0); // разрешение прерывания на входе INT0

 

Регистр флагов EIFR

7 6 5 4 3 2 1 0
INTF1 INTF0

Регистр отвечает за использование прерывания, если логика на ножке изменилась, то в регистре появляется запись, и вектор прерывания начинает обрабатываться.

 

Обработчики прерывания ISR(INT0_vect) и ISR(INT1_vect) 

Пример использования:

ISR(INT0_vect){ // — код — //} — при возникновении прерывания на входе INT0 исполняется // — код — //


ATtiny2313 + Arduino IDE

Добавить комментарий

Войти с помощью: