Butonla led yakıp söndürme örneği
PCICR =PCIE0 seçersek PCINT 0 -7 (PB0-PB7) arasındaki bitlerin dışardan pin değiştirme kesmesini aktif oluyor,
PCMSK0 registerini PCINT0 ile 7 arasındaki bitleri maskelemek için kullanıyoruz
PCIE1 seçersek PCINT14-8 (PC0-PC6) arasındaki bitlerin pin değiştirme kesmesi aktif oluyor
PCMSK1 registerini PCINT14-8 bitleri maskelemek için kullanıyoruz
PCIE2 seçersek PCINT23-16 (PD0-PD7) arasındaki bitlerin pin değiştirme kesmesi aktif oluyor
PCMSK2 registerini PCINT 23-16 bitleri maskelemek için kullanıyoruz
ISR(PCINT0_vect){} PCINT0-PCINT7 (PB0-PB7) pinlerinden birine buton bağlı ise
ISR(PCINT1_vect){} PCINT8-PCINT14 (PC0-PC6) pinlerinden birine buton bağlı ise
ISR(PCINT2_vect){} PCINT16-PCINT23 (PD0-PD7)pinlerinden birne buton bağlı ise
kullanıyoruz
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define LED_ON PORTB |= (1<<PORTB5)
#define LED_OFF PORTB &= ~(1<<PORTB5)
#define LED_TOGGLE PINB |= (1<<PINB5)
#define BUTON_BASILI_ISE !(PINB & (1<<PINB7))
ISR(PCINT0_vect)
{
if (BUTON_BASILI_ISE)
{
LED_ON;
}
else
{
LED_OFF;
}
}
int main(void)
{
DDRB |= (1<<DDB5);
DDRB &= ~(1<<DDB7);
PCMSK0 |= (1<<PCINT7);
PCICR |= (1<<PCIE0);
sei();
while (1)
{
}
}