tehaceole napisał: WTF??????
tmf czy zmienna ta musi być volatile? W tej chwili "data" nie jest używana poza przerwaniami. Imho - zwykła zmienna globalna z którą nie będzie (nie powinno być) problemu skoro nigdzie indziej jej nie używa.
Masz rację, jakoś mi się uwidziało, że ISR się kończy zaraz po pobraniu danych, a dalej jest main. Oczywiście tak jak piszesz - najlepiej by było cały ten kod skasować i o nim zapomnieć i zabrać się za to jeszcze raz - tym razem porządnie.
Dodano po 3 [minuty]: pawel26021995 napisał: jeżeli napisze
while(data==w1w)
{
PORTB = 0x00;
PORTD = 0x00;
PORTB = 0x04; //b1
_delay_ms(d);
PORTB = 0x00;
PORTD = 0x00;
_delay_ms(e);
break
}
to pętla się wykonuje tylko raz, bez break pętla powinna wykonywać się do czasu gdy jest spełniony warunek a wykonuje się cały czas
Nie wiem co cię dziwi - po natrafieniu na break pętla jest przerywana. Natomiast ponieważ data w obrębie pętli się nie zmienia, to jeśli warunek data==w1w jest prawdziwy to jest prawdziwy zawsze, stąd nieskończona pętla.
Swoją drogą jeśli stosujesz w programie stałe, to dobrą praktyką jest je zapisywać wielkimi literami, np. W1W, dzięki temu można łatwo je odróżnić od zmiennych.