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

Atmega 16 - Implementacja przerwań INT0 i INT1 w programie C

MichGX 07 Lis 2013 18:10 2817 3
REKLAMA
  • #1 12926044
    MichGX
    Poziom 11  
    Witam, z góry dzięki za pomoc otóż borykam się z następującym problemem
    muszę napisać program na atmegę 16 który korzystał będzie z 2 przerwań zewnętrznych INT0 oraz INT1
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wiem że nie wolno wyświetlać nic na LCD raczej w procedurach obsługi przerwań gdyż przedłużają one działanie tych procedur a mają one być jak najkrótsze ale zrobiłem tak celowo dla testu. Problem jest następujący, jak uruchomie oba przerwania program po podpięciu masy do pinu portu d 2 (INT0) nie wchodzi do procedury obsługi przerwania 0, natomiast przerwanie 1 obsługuje prawidłowo. Jeśli wykomentowałem linie: GICR = _BV(INT1); //włączenie przerwania INT1
    to program prawidłowo mi obsługiwał przerwanie 0 ale obu naraz nie. Nie mogę wysłać całego programu niestety, gdyż jest on zwyczajnie zbyt długi.
  • REKLAMA
  • #2 12926074
    2rs232
    Poziom 18  
    Brakuje "|"
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 12926209
    dondu
    Moderator na urlopie...
    Kolega wyżej już wyjaśnił ja dodam jeszcze, że tego typu prostych błędów jest więcej:
    http://mikrokontrolery.blogspot.com/2011/04/problemy-c-ustawianie-i-zerowanie-bitow.html

    Druga uwaga, to zdecyduj się - albo stosuj makro _BV(), albo przesunięcia bitowe (1<<x). Ja sugeruję tę drugą wersję.
  • #4 12926362
    MichGX
    Poziom 11  
    Dzięki za szybką odpowiedź ratujecie mi całą nockę w szukaniu głupiego błędu typowego dla nowicjusza :D Temat można zgłosić do zamknięcia
REKLAMA