-
Data: 2016-03-22 12:34:59
Temat: blokowanie obsługi przycisku a funkcja while
Od: badworm <n...@p...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W ramach tworzonego programu na AVR MEGA8 wymyśliłem sobie, by
opóźnienie niezbędne przy wyłączaniu urządzenia przyciskiem (tak, by z
powrotem się zaraz nie włączało) zrealizować poprzez funkcję while i
Timer 1, którego przerwanie jest generowane co 1 sekundę.
Fragment kodu w funkcji obsługującej długie naciśnięcie przycisku, która
ma wyłączać urządzenie, wygląda tak:
OLED_putString(" Power off! ");
g_off_timer=5;
while(g_off_timer>1);
i dalej zestaw funkcji powodujących wyłączenie zasilania (zdjęcie stanu
wysokiego z odpowiednich pinów)
zmienna g_off_timer jest dekrementowana w ramach obsługi przerwania od
Timera 1 w następujący sposób:
if (g_off_timer>0)
{
g_off_timer--;
PORT(TESTOUT_PORT) ^= (1<<TESTOUT);
}
i to wiem, że działa prawidłowo bo LED podłączony do wyjścia TESTOUT
mruga z częstotliwością 0,5Hz.
Zakładam, że gdy program dojdzie do "while(g_off_timer>1)" to powinien w
tym miejscu utknąć w pętli i czekać, aż z kolejnymi wygenerowanymi
wywołaniami przerwania od Timera 1 wartość tej zmiennej dojdzie do 1,
wówczas warunek w while będzie niespełniony i program poleci dalej.
Program jednak utyka na dobre w tym miejscu, mimo iż zmienna g_off_timer
osiąga wartość 0 - sprawdziłem to dodając prosty warunek w obsłudze
przerwania od Timera 1:
if (g_off_timer==0)
{
PORT(TESTOUT_PORT) |= (1<<TESTOUT);
}
Zgodnie z przewidywaniem, po kilku mrugnięciach LED zapalił się na
stałe. Gdzie mam błąd?
--
Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
GG#2400455 ICQ#320399066
Następne wpisy z tego wątku
- 22.03.16 13:11 J.F.
- 22.03.16 13:24 JDX
- 22.03.16 19:26 badworm
- 23.03.16 18:44 Sebastian Biały
Najnowsze wątki z tej grupy
- Schemat automatyki
- Teoretyczne zagadnienie - ogrzewanie budynku
- Zagadka radiowa
- Prostownik
- Nowy akumulator Donut Lab
- Pilot do zamka/bramy
- Jaka myjka ultradźwiękowa?
- Retro organizer ale współcześnie
- Skąd diody LED 1,5V?
- Apollo Comm
- PICkit3 mnie pokonał
- LEDy na choinkę zdechły
- Wtopa LED
- Miało być zniesienie abonamentu RTV, a jest podwyżka!!!
- Microsoft, C/C++ na Rust - news
Najnowsze wątki
- 2026-01-13 STREFA CZYSTEGO TRANSPORTU. O tym nie mówią nam WŁADZE
- 2026-01-13 To nie koniec
- 2026-01-13 Warszawa => Recruiter 360 <=
- 2026-01-13 Katowice => Key Account Manager <=
- 2026-01-13 Warszawa => Senior Backend Java Developer <=
- 2026-01-13 Wrocław => ERP Implementation Consultant <=
- 2026-01-13 Elektryk a otwieranie drzwi :-)
- 2026-01-12 Schemat automatyki
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.
- 2026-01-12 Teoretyczne zagadnienie - ogrzewanie budynku
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi
- 2026-01-12 Polska Grupa Zbrojeniowa (85% udziałów) Likwiduje Stomil-Poznań - Zakład Działał Od 1928r.
- 2026-01-12 Xiaomi [Chiny - przyp. JMJ] produkuje w całkowitych ciemnościach i bez ludzi




5 Najlepszych Programów do Księgowości w Chmurze - Ranking i Porównanie [2025]