mega328p kesme

Başlatan ido2323, 10 Ağustos 2015, 14:45:01

ido2323

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));
}
}

ido2323


bocek

#2
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);
1 ya da 0. işte 'bit'ün mesele..

ido2323

Hocam teşekkür ederim, sayende çözüldü.

martin13

atmega328p de assembly ile butona basıldığında bilgisayardan yazılanları nasıl  lcd'ye yazarım?

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr