Pin Change Interrupt Nedir?

Pin Change Interrupt Nasıl Ayarlanır?

Pin Change Interrupt’ları kullanmak için üç temel adım izlenir:

  1. İlk olarak Portu seçeriz portu ise: PCICR (Pin Change Interrupt Control Register) register’ı ile ayarlarız.
Pin Change Interrupt - PCICR Pin Change Interrupt - PCICR
void setup() {
PCICR = B00000001;  
/* PCIE0 bitini 1 yaparak PORT B'yi seçtik */
}
  1. Seçtiğimiz Portta hangi pinlerin kullanacağımızı ise: PCMSK (Pin Change Mask) register’ı ile ayarlarız.
void setup() {
PCMSK0 = B00000101;
/* 
0 Olan yere hangi Portu kullanıyorsak onun bit sırasını yazarız.
Ben Port B'den 8 ve 10. Pinleri seçtim. 
Her bit bir pini temsil eder:
Bit 0 = Pin 8, Bit 1 = Pin 9, Bit 2 = Pin 10, 
*/
}
Pin Change Interrupt - Portlar Pin Change Interrupt - Portlar Pin Change Interrupt - PCMSK0 Pin Change Interrupt - PCMSK0 Pin Change Interrupt - PCMSK1 Pin Change Interrupt - PCMSK1 Pin Change Interrupt - PCMSK2 Pin Change Interrupt - PCMSK2
  1. Kesme Nerde Gerçekleşeceğini Belirleme: Kesme olduğunda çalışacak ISR (Interrupt Service Routine) yazılır.
/* Port B */
ISR(PCINT0_vect) {
 /* Kesme Burada Olur */
}
 
/* Port C */
ISR(PCINT1_vect) {
 /* Kesme Burada Olur */
}
 
/* Port D */
ISR(PCINT2_vect) {
 /* Kesme Burada Olur */
}
 

Örnek Kullanım

/* Port B ile Port D'yi aktif yaptım */
/* Port B'den 8. Pin ile Led Yakıcam, Port D'den 7. Pin ile Led'i Söndüreceğim */
void setup(){
 PCICR = B00000101;
 PCMSK0 = B00000001;
 PCMSK2 = B10000000;
 pinMode(7, INPUT_PULLUP);
 pinMode(8, INPUT_PULLUP);
 pinMode(13, OUTPUT);
}
 
void loop()
{
}
 
ISR(PCINT0_vect){
if(digitalRead(8) == 0){
digitalWrite(13,1);
}
}
 
ISR(PCINT2_vect){
if(digitalRead(7) == 0){
digitalWrite(13,0);
}
}

attachInterrupt Bağlantı Şeması


İlgili Konular: