Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: ido2323 - 10 Ağustos 2015, 14:45:01

Başlık: mega328p kesme
Gönderen: ido2323 - 10 Ağustos 2015, 14:45:01
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));
}
}
Başlık: Ynt: mega328p kesme
Gönderen: ido2323 - 11 Ağustos 2015, 02:57:42
güncel
Başlık: Ynt: mega328p kesme
Gönderen: bocek - 11 Ağustos 2015, 05:19:56
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);
Başlık: Ynt: mega328p kesme
Gönderen: ido2323 - 11 Ağustos 2015, 10:58:06
Hocam teşekkür ederim, sayende çözüldü.
Başlık: Ynt: mega328p kesme
Gönderen: martin13 - 11 Mayıs 2017, 23:16:18
atmega328p de assembly ile butona basıldığında bilgisayardan yazılanları nasıl  lcd'ye yazarım?
Başlık: Ynt: mega328p kesme
Gönderen: mehmet - 11 Mayıs 2017, 23:49:40
Asembly öğrenerek.