logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyłączyć przerwanie INT1 w uC M32 w Bascomie?

plp 25 Lip 2006 22:54 1140 2
REKLAMA
  • #1 2851429
    plp
    Poziom 15  
    Posty: 216
    Pomógł: 3
    Ocena: 12
    Witam !

    Napotkałem taki problem:

    Mój program wykorzystuje przerwanie z końcówki INT1. uC M32. Program w Bascomie.
    Zdarza się, że na wejściu INT1 pojawia się stałe zero i wtedy przerwanie wykonuje się na okrągło, co powoduje zwis programu i reakcję watchdog'a.

    Próbowałem po wywołaniu przerwania wyłączyć go poprzez Disable INT1 i właczać po pewnym czasie poprzez Enable INT1. Niestety nie ma efektu. Procesor w kółko wykonuje przerwanie, tak jakby Disable INT1 nie działało. Próbowałem również wyłączyć globalny system przerwań, ale również bez efektu.

    Co robię źle ?

    PL
  • REKLAMA
  • #2 2851784
    Andy74
    Poziom 25  
    Posty: 525
    Pomógł: 103
    Ocena: 24
    Witam
    A nie lepiej wyzwalać przerwania zboczem, zamiast poziomem?

    Przykładowo:
    CONFIG INT1 = RISING  'reakcja na zbocze rosnące
    CONFIG INT1 = FALLING 'reakcja na zbocze opadające


    Wtedy procesor obsłuży przerwanie tylko raz po znianie stanu INT1 z wysokiego na niski (jeśli skorzystasz z FALLING oczywiście).

    Co robisz źle to trudno powiedzieć nie widząc programu... ;)

    Pozdrawiam
    Andy
  • #3 2852323
    plp
    Poziom 15  
    Posty: 216
    Pomógł: 3
    Ocena: 12
    Próbowałem ustawić wyzwalanie zboczem FALLING instrukcjami Bascoma, oraz wprost w rejestrach. Nie dawało to nic. Nie wiem, czy dalej wyzwalało się poziomem, czy przyczyna była inna.

    Poniżej fragmenty programu, które według mnie są istotne.
    Może ma tu jakieś znaczenie fakt, że pin INT1 jest w trakcie przerwania zmieniany na wyjście i z powrotem na wejście.

    Config Watchdog = 2048
    Start Watchdog

    Enable Interrupts
    On Int1 Linia_do_zwrotnicy
    Enable INT1

    'Przerwanie INT1 realizujące wyjściową transmisję
    Linia_do_zwrotnicy:

    usunąłem

    Config Pind.3 = Output

    usunąłem

    Config Pind.3 = Input
    Portd.3 = 1

    usunąłem

    Licznik_transmisji = 50
    Disable Int1

    Return

    I w pętli co jakiś czas:

    if Licznik_transmisji>0 then Decr Licznik_transmisji
    If Licznik_transmisji=0 then Enable INT1
REKLAMA