Witajcie otóż mam taki problem potrzebuję zrobić inkrementację oraz dekrementację zmiennej w przerwaniach zewnętrznych INT0 oraz INT1 na Atmedze644, wyzwalanie przerwania zrobiłem za pomocą przycisków zwieranych do masy (przerwania na zbocze opadające) i rzeczywiście po wciśnięciu jednego przycisku zmienna się inkrementuję a po przyciśnięciu drugiego przycisku zmienna się dekrementuję ale nie o 1 tak jak bym chciał. Założenie jest takie że jak wcisne przycisk jeden raz to do zmiennej doda się liczba 1, jak wcisnę drugi przycisk to od zmiennej odejmię się 1 jednak zmienna ta nieraz inkrementuje się o jeden ale nieraz o dwa, trzy itp. a ja chce żeby za każdy było to o wartość jeden.
Poniżej kod
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
czy przerwania dobrze ustawiłem w rejestrach czy może o czymś zapomniałem?
nie bardzo rozumiem do czego służy rejestr EIFR ale czy go ustawie czy nie to reakcja jest taka sama
Proszę o pomoc
jeszcze jedno w nocie katalogowej Atmegi644 na stronie 67 jest rejestr EIMSK w którym załącza się przerwanie i w rejestrze tym bit numer 0 jest to IINT0 nie wiem czy jest to błąd w nocie czy co ale jak widać występują tutaj na początku dwie litery "I" czyli IINT0 ale w kodzie to nie działa bo jest błąd, działa jak wpiszę się jedną literkę "I" czyli INT0
i na koniec ciekawostka na początku w kodzie źle skonfigurowałem kierunki pinów bo zapomniałem o nawiasach i przesunięciu bitowym czyli wyglądało to tak
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a reszta kodu była tak jak wyżej, i była dziwna reakcja program się skompilował bez błędu i wgrał do procka jednak zmienna nie inkrementowała sie ani dekrementowała po przycisnięciu przycisków ale gdy zbliżałem palec do przycisków bez ich przyciskania to zmienna się zwiększała o losowe wartości hm troche to dla mnie dziwne już chciałem lecieć po księdza żeby odprawił egzorcyzmy nad moim zestawem uruchomieniowym gotronik