miccaldo Napisano Wrzesień 28, 2013 Udostępnij Napisano Wrzesień 28, 2013 Witam, tworzę obsługę czujnika HC-SR04, ale w trakcie naszła mnie pewna wątpliwość co do funkcji warunkowej. Czy w takim przypadku: volatile uint8_t flag = 0; ISR(INT0_vect){ if(flag == 0){ // flag = 0, przerwanie wykonuje funkcję warunkową cnt = 0; LCD_GoTo(0,0); LCD_Int(cnt); flag += 1; MCUCR |= (1<<ISC01); // przerwanie opadajace } if(flag == 1){ // w poprzedniej funkcji if zmienna flag została zwiększona o 1, czy przerwanie od razu przejdzie do następnej funkcji if? Czy zakończy się, a przy następnym wygenerowaniu przerwania zostanie wykonana funkcja if(flag == 1)? MCUCR |= (1<<ISC00)|(1<<ISC01); // przerwanie rosnace cnt = 1; LCD_GoTo(0,0); LCD_Int(cnt); } } Pozdrawiam. Link do komentarza Share on other sites More sharing options...
MirekCz Wrzesień 28, 2013 Udostępnij Wrzesień 28, 2013 Program idzie od góry do dołu, więc jak w pierwszym warunku zrobisz flag += 1 (a flag była 0) to w drugim warunku flaga będzie miała już wartość 1 (bo 0 + 1 = 1). Taki warunek nie miałby sensu (wystarczy przecież wkleić kod z drugiego warunku do pierwszego warunku). Jak rozumiem chodzi Tobie o to, żeby w pierwszym przerwaniu spełnił się pierwszy warunek, a w kolejnych drugi (o ile flaga nie zostanie wyzerowana). W takim wypadku najlepiej użyć konstrukcji: if ( flag == 0 ) ... else if ( flag == 1 ) ... W tej sposób jak pierwszy warunek będzie spełniony to nie zostanie nawet sprawdzony drugi warunek. Link do komentarza Share on other sites More sharing options...
Marooned Wrzesień 30, 2013 Udostępnij Wrzesień 30, 2013 Dodatkowo, ładowanie długich funkcji (np. do obsługi LCD) do funkcji przerwania nie jest dobrym pomysłem. Obsługa przerwania powinna być możliwie najkrótsza. Inaczej będzie to tylko generowało problemy. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »