Witam,
najprawdopodobniej za długo siedzę nad blachym tematem i niedowidzę problemu.
Nie wiem dlaczego program w pętli głównej nie wchodzi do warunku if (RC5_detected == 1) po obsłużeniu przerwanie zewnętrzengo. Przerwanie jest wykonywane poprawnie więc RC5_detected jest napewno ustawiane.
Moją ideą jest ustawienie zmiennej w przerwaniu i późniejsze działanie w pętli głównej programu.
Oto mój kawałek kodu, co robię nie tak?
najprawdopodobniej za długo siedzę nad blachym tematem i niedowidzę problemu.
Nie wiem dlaczego program w pętli głównej nie wchodzi do warunku if (RC5_detected == 1) po obsłużeniu przerwanie zewnętrzengo. Przerwanie jest wykonywane poprawnie więc RC5_detected jest napewno ustawiane.
Moją ideą jest ustawienie zmiennej w przerwaniu i późniejsze działanie w pętli głównej programu.
Oto mój kawałek kodu, co robię nie tak?
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define Yellow_ON PORTB &= ~(1<<PB3); // bit na 0 - PB0
#define Yellow_OFF PORTB |= (1<<PB3); // bit na 1
unsigned char RC5_detected;
int main(void)
{
GIMSK |= (1<<INT0); // External Interrupt Request
MCUCR |= (1 << ISC01); // The falling edge of INT0 generates an interrupt request.
DDRB = (1<<DDB0) | (1<< DDB2) | (1<<DDB3); // Logical one = output, PB1 - input
PORTB = (1<<PB0) | (1<<PB2) | (1<<PB3); // PB3 set high (LED OFF)
sei ();
while (1)
{
if (RC5_detected == 1)
{
Yellow_ON;
RC5_detected = 0;
}
}// end while
return 0;
}// end main
/********************************************************************************************
External Interrupt INT0 handling
PIN status change
*********************************************************************************************/
ISR (SIG_INTERRUPT0)
{
RC5_detected = 1;
PORTB ^= (1<<PB0);
}
