According to the datasheet:
we could think that, if we want to have a pin change interrupt for 3 pins, we have to create multiple instances:
ISR(PCINT0_vect){
...
}
ISR(PCINT1_vect){
...
}
ISR(PCINT2_vect){
...
}
void setup(){
GIMSK = 0b00100000;
PCMSK = 0b00000111;
}
However, this does not work, and I read here and here that we have to define just one interrupt function:
ISR(PCINT0_vect){
if (digitalRead(0) == LOW)
...
if (digitalRead(1) == LOW)
...
if (digitalRead(2) == LOW)
...
}
Why is that so? What is PCINT1, 2, 3, ... made for then in this pinout schematics, if we don't have to use it?

PCINT0_vectworks for all the pins 0..5? Then why put "PCINT1", "PCINT2" on the pinout schematics? ThenPCINT0_vectshould be calledPCINT_vect0, don't you think so? Because it's the the "first" vector of pin change interrupts... With a naming likePCINTx_vect, we could think it's relative to the pin x since the pinout schematics showsPCINTxfor every pin x=0..5. – Basj Nov 20 '19 at 14:46PCINT_vect0doesn't exist, because their naming convention is<Interrupt Name>_vectfor the interrupt vectors. For the pin description I think, they wanted to keep it short. On bigger microcontrollers, the PCINT pins are numbered completely though, so on the Atmega328P (from the Uno) there are pins up to PCINT20 – chrisl Nov 20 '19 at 14:52PCINT0_vectcovers which group of pins? Idem forPCINT1_vect? I can imagine they can handle up to 8 pins each? – Basj Nov 20 '19 at 14:55