Hayırlı günler aşağıdaki kodda kesme çalışmıyor. Hangi kısmı kaçırmışım bulamadım.
INT2 kesmesi ile led yakma, referans;
https://sites.google.com/site/qeewiki/books/avr-guide/external-interrupts-on-the-atmega328
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <avr/interrupt.h>
int main(void)
{
DDRD = 0b11111111;
PORTD = 0b00000000;
DDRB = 0b00000000;
PORTB = 0b11111111;
PCICR |= (1 << PCIE0); // set PCIE0 to enable PCMSK0 scan
PCMSK0 |= (1 << PCINT0); // set PCINT0 to trigger an interrupt on state change
PCMSK0 |= (1 << PCINT1); // set PCINT1 to trigger an interrupt on state change
PCMSK0 |= (1 << PCINT2); // set PCINT2 to trigger an interrupt on state change
sei(); // turn on interrupts
while (1)
{
/****/ }
}
ISR(PCINT2_vect)
{
if(PINB &= (1<<PB2))
{
(PORTD |= (1<<PD0));
}
}
güncel
Dikkat et PCINT2 kesmesi B portuna bağlı, D'ye değil. Sende B portu komple çıkış olarak ayarlı.
Sorun o değilmiş.
PCIE0 biti ile PCINT0 kesmesini aktive etmişsin ama kesme fonksiyonu olarak ISR(PCINT2_vect) kullanmışsın.
İlgili satırı şöyle düzeltmelisin:
PCICR |= (1 << PCIE2);
Hocam teşekkür ederim, sayende çözüldü.
atmega328p de assembly ile butona basıldığında bilgisayardan yazılanları nasıl lcd'ye yazarım?
Asembly öğrenerek.