| Ваш IP: 44.192.70.216 | Online(33) - гости: 10, боты: 23 | Загрузка сервера: 0.47 ::::::::::::

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

Atmega328


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

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

 

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

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

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

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

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

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

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

 

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

7 6 5 4 3 2 1 0
INT1 INT0

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

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

 

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

7 6 5 4 3 2 1 0
INTF1 INTF0

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

 

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

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

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

 

Пример:

bool i;

void setup(){
  DDRB |= (1 << 5); // PB5 как выход
  DDRD &= ~(1 << 2); // PD2 как вход (INT0)
  PORTD |= (1 << 2); // подтягивающий резистор к PD2 (INT0)
  EICRA |= (1<<ISC01);  //Прерывания INT0 по нисходящему фронту INT0
  EIMSK |= (1<<INT0);   //Разрешить внешние прерывания INT0
  }

void loop(){
  PORTB |= (1 << 5); // PB5 выход 1
 if(i==1)delay(5000);i=0; // как сработает прерывание подождать 5 секунд
  }

ISR(INT0_vect){
  PORTB &= ~(1 << 5); // PB5 выход 0
  i=1;
  }

Светодиод на плате Arduino Uno который подключен к PB5 горит всегда, если кратковременно замкнуть вход INT0 на GND, светодиод погаснет на 5 секунд и загорится вновь.

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

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

Случайные статьи

  • Охранная пьезосирена

    Охранная пьезосирена

    Основа сирены пьезо элемент СП-1, звуковое давление при напряжении 40В на пьезо элементе достигает 110дБ. На VT1 и Т1 собран НЧ генератор возбуждающийся на частоте зависящей от реактивного сопротивления пьезоизлучателя и индуктивности повышающей обмотки. Акустическое излучение приобретает тревожный характер лишь после специальной модуляции монотонного сигнала, это делает электронный манипулятор на …Подробнее...
  • УМЗЧ на TDA2003

    УМЗЧ на TDA2003

    УМЗЧ на TDA2003   TDA2003: Напряжение питания 14,4В, минимальное 8В, максимальное 18В Выходное напряжение покоя 6,1…7,7В в зависимости от напряжения питания Ток покоя при напряжении питания +14,4В 50мА Выходная мощность на нагрузке 4 Ом при частоте 1 кГц 6Вт при КНИ 10% КНИ на частоте 1 кГц 0,15% при номинальной …Подробнее...
  • Триодный двухтактный усилитель мощностью 8 Вт

    Триодный двухтактный усилитель мощностью 8 Вт

    Предложенный усилитель прост в изготовлении и не содержит дефицитных деталей. Главным достоинством данного усилителя является низкий уровень нелинейных искажений даже без введения ООС, так же очень малое выходное сопротивление от 2 до 10 Ом. Усилитель имеет три каскада усиления — предварительный каскад на половине двойного триода 6Н2П, фазоинвертор на основе …Подробнее...
  • Универсальный измерительный прибор на микроконтроллере

    Этот прибор измеряет постоянное напряжение, частоту, емкость, индуктивность, так же способен проверять исправность кварцевых резонаторов и вырабатывает импульсный сигнал с уровнем ТТЛ. Основа прибора микроконтроллер PIC16F873A, в состав его входит АЦП и делитель частоты с верхним пределом 50МГц. Технические характеристики Диапазон измеряемых частот в МГц F1– 0,01…50 F2– 40…500 F3– …Подробнее...
  • LM4861 маломощный миниатюрный  моно усилитель 1.1 Вт

    LM4861 маломощный миниатюрный моно усилитель 1.1 Вт

    ИМС LM4861 представляет собой миниатюрный (корпус SOIC) усилитель звуковой частоты с выходной мощностью 1,1 Вт. ИМС имеет тепловую защиту, КНИ не превышает 1% при сопротивлении нагрузки 8 Ом и выходной мощности 1 Вт. Максимальная выходная мощность 1,5 Вт при КНИ 10%. Усилитель снабжен режимом малого энергопотребления (режим отключения усилителя — …Подробнее...