Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega8 - Przerwanie delay

oko.mar 11 Lis 2012 22:45 1422 2
  • #1 11 Lis 2012 22:45
    oko.mar
    Poziom 9  

    Witam mam jedno pytanie napisalem programik z dwiema diodami i mikroprzelacznikami:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Czy da sie przerwac instrukcje _delay_ms??
    Jak przerywac jedna z instrukcji jezeli wywolamy druga??
    To znaczy jesli wcisne pierwszy przycisk i dioda swieci 2 sekundy, chcialbym ja zgasic jezeli w ciagu tych 2 sekund nacisne drugi przycisk

    0 2
  • #2 11 Lis 2012 22:50
    tmf
    Moderator Mikrokontrolery Projektowanie

    Przerwać delay możesz tylko przerwaniem. Jeśli chcesz mieć możliwość normalnie przerwania delay to rozbij je na sekwencje kilku mniejszych opóźnień pomiędzy którymi sprawdzaj stan przycisków. A najlepiej zrobić to przy pomocy timerów i przerwań.

    0
  • #3 11 Lis 2012 22:59
    piotrva
    Moderator na urlopie...

    1. Jak mówił tmf, poczytaj o tym czym są przerwania i timery, za ich pomocą odmierzaj czas, a programy pisz tak, aby nie zatrzymywały się w pętli głównej ani na moment, jeśli nie jest to rzeczywiście konieczne - taki dobry nawyk (oczywiście czasem można dla prostoty użyć jakichś funkcji _delay_xx();, ale zwykle ich unikamy)
    2. Czytelność Twojego kodu (pomijając brak znaczników syntax) pozostawia wiele do życzenia. Nie pisz definicji bitów typu 0x04 - to jest nieczytelne, zamiast tego zapisz np.: (1<<PD3).
    3. F_CPU definiuj w opcjach projektu (jeśli do AVRStudio) lub w pliku makefile
    4. Rozumiem, że chcesz uzyskać efekt - po wciśnięciu przycisku zapal odpowiednią diodę na 2s (i taka operacja dla 2 diod niezależnie)?

    0