Jest zaraz za INT0/INT1. W skrócie:
- każde wyprowadzenie mikrokntrolera atmega88pa ma przypisaną funkcję PCINx (x=0...23). Dla PB x=0..7, dla PC x=8...14(15-nie ma bo nie ma PC7) i dla PD x=16...23
- jest tylko 3 wektory przerwań PCINT0_vect, PCINT1_vect i PCINT2_vect i każdy obsługuje po 8 (7) wejść
- które wejścia będą generować przerwanie wybieramy w rejestrach PCMSK0, PCMSK1, PCMSK2 ustawiając bity o nazwach PCINTx
- jeśli są wybrane przykładowo 2 wyprowadzenia z jednej grupy/portu to zmiana na którymkolwiek z nich generuje przerwanie, które jest wspólne dla całej grupy. Jeśli projektujemy urządzenie to rozsądnie wybierać wyprowadzenia z różnych portów, bo to uprości funkcję obsługi przerwania, gdyż nie trzeba wtedy dodatkowo np. w pętli głównej sprawdzać stanu pinów
- przerwania odblokowuje się w rejestrze PCICR za pomocą bitów PCIE0, PCIE1 i PCIE2
- rozsądnie skasować flagi przerwań w rejestrze PCIFR wpisując 1 na pozycje PCIFx
- każda zmiana stanu z wysokiego na niski i z niskiego na wysoki generuje przerwanie
- PCINTx podobnie jak INTx można wykorzystać do generowania przerwania programowego (wystarczy skonfigurować przerwanie i zmienić stan wyjścia). Można również zresetować w ten sposób mikrokontroler jeśli przerwanie jest ustawione, ale nie ma funkcji do jego obsługi
Przykład zastosowania
Jeśli potrzebujesz budzić mikrokontroler za pomocą USARTu jak to jest w najnowszych mikrokontrolerach to wystarczy pinowi, który pełni funkcję RXD dodać dodatkową funkcję PCINT16 i niemożliwe staje się możliwe. Tracimy jeden znak, ale to nic.