Могу ли я использовать PCINT0 и PCINT1 для всех прерываний контактов на atmega328pb? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сделать так, чтобы затем зажгся светодиод PINB7 (который является булавкой).PINB7 - это PCINT8 на борту.Поэтому я установил

PCICR|=(1<<1);//enable interrupts for pins 14-8
sei();
PCMSK1|=(<<PCINT8); // mask for pin 8

Я не понимаю, какой вектор мне следует использовать в ISR.Из того, что я увидел, я должен просто сделать PCINT8_vect, однако вектор не выделяется, как тогда, когда я использую «TIMER2_COMPB_vect». Так что вектора PCINT8 не существует или есть способ использовать PCINT0 и 1 для этого?

1 Ответ

0 голосов
/ 17 ноября 2018

По-видимому, на mega328pb нет векторов для отдельных прерываний выводов, но есть векторы для PCIE0,1,2,3.0-биты 0: 7 1-8: 14 2-16: 23 3-24: 27

, так что если вы хотите использовать прерывание для контакта b7.PB7 - это PCINT7 (можно увидеть в главе о портах ввода / вывода).Таким образом, id должен включить PCIE0 в регистре PCIRC, исправить маску TMSK0.и использовать ISR (PCINT0_vect).Но если у вас есть прерывания на PCINT6 и PCINT7, вам нужно, если еще в ISR, определить, какое из 2-х контактов вызвало прерывание

...