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 исполняется // — код — //