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.

[Bascom] Przerwania i wait

LemuRR 11 09 Lip 2012 17:52 1412 7
  • #1 09 Lip 2012 17:52
    LemuRR 11
    Poziom 26  

    Problem, jest banalny.
    Mianowicie, timer wywołuje przerwanie, z częstotliwością ok 400Hz (multipleksowanie)
    Jednak są też przyciski które służą do powiększenia lub pomniejszenia zmiennej. Aby to się dość wygodnie przyciskało, po dodaniu wartości do zmiennej, powinna być zastosowana instrukcja wait.
    Teraz się zastanawiam, czy jeżeli, wait zastopuje program np na 100ms, to czy również multipleksowanie stanie na to 100ms ? Czy przerwania działają osobno ?

    0 7
  • #2 09 Lip 2012 19:27
    MArSTER_1
    Poziom 18  

    Wait nie stopuje programu. Program nadal się wykonuje.Piszesz trochę niejasno o tym, że timer wywołuje przerwanie z częstotliwoscią około 400 Hz. Czy to znaczy, że przerwanie wykonuje się około 400 razy na sekundę? Zliczasz coś?

    0
  • #3 09 Lip 2012 19:54
    LemuRR 11
    Poziom 26  

    Timer służy do multipleksowania, przerwanie jest wywoływane 400 razy na sekundę.
    Wait, ma spowolnić wciskanie przycisku, aby zmienna nie przybierała na wartości z ogromną prędkością
    Obiło mi się o uszy że wait stopuje procka, na określony czas. W ten sposób również stanęło by multipleksowanie (LED 7 segmentowy).
    Więc mogę zastosować tą instrukcję, bez szkody dla reszty programu ?

    0
  • Pomocny post
    #4 09 Lip 2012 20:00
    MArSTER_1
    Poziom 18  

    Instrukcja Wait nie stopuje procesora. Procesor odlicza czas poprzez zmianę wartości rejestrów a więc działa. A skoro działa to powinien także odczytać informację, że nastąpiła sygnalizacja od przepełnienia Timera. Spróbuj zastosować tą instrukcję. Tylko nie wywołuj jej w obsłudze przerwania a w pętli głównej. Bo gdybyś wywołał jej obsługę w przerwaniu to faktycznie Timer nie został by obsłużony.

    0
  • Pomocny post
    #5 09 Lip 2012 20:36
    landy13
    Poziom 29  

    MArSTER_1 napisał:
    Wait nie stopuje programu.

    To nie całkiem prawda. Wait zatrzymuje główny program. Nie dotyczy to przerwań, które jak sama nazwa wskazuje przerywają działanie programu głównego, a więc i waita.
    Tak więc waity nie przeszkadzają przerwaniom, ale przerwania wydłużają czas waita. Przykład: Przerwanie o częstotliwości 400Hz w ciągu 100ms wykona się 40 razy. Gdyby obsługa przerwania trwała 0.5ms, to łączny czas trwania czterdziestu przerwań wynosi 20ms. O tyle przedłuży się czas trwania waita - ze 100ms do 120ms.

    0
  • #6 09 Lip 2012 20:44
    MArSTER_1
    Poziom 18  

    To prawda, że obsługa przerwania wydłuża czas instrukcji Wait. Tyle, że tutaj instrukcja stosowana w pętli głównej ma spowalniać zwiększanie lub zmniejszanie zmiennej następujące w konsekwencji nacisnięcia przycisku. Kontrola zwiększania lub zmniejszania wartości zmiennej jest jak rozumiem wzrokowa, więc i wydłużenie instrukcji Wait (niewielkie jak sądzę) jest do zaakceptowania. Przecież jeśli okaże się, że została ustawiona za duża zwłoka to operator-programista natychmiast ją zmieni.Przypominam, że pytanie dotyczyło czy w ogóle można zastosować tą instrukcję. Odpowiedź padła , że można.

    0
  • #7 09 Lip 2012 21:28
    LemuRR 11
    Poziom 26  

    Dzięki za odpowiedzi, i pomoc w rozwiązaniu problemu
    Tak jak to kolega MArSTER_1 powiedział, to czy wait trwa 100, czy 120, czy nawet 150 nie ma większego znaczenia.
    Temat do zamknięcia, jeszcze raz dzięki !

    0
  • #8 09 Lip 2012 23:19
    LordBlick
    VIP Zasłużony dla elektroda

    A dlaczego klawiszy nie obsługiwać również w przerwaniu co któreś wywołanie ?
    P.S. Autor tematu ma możliwość samodzielnego zamknięcia.

    0