Tak ustawiasz flagę nie zmieniając wartości wcześniej ustawionych tego rejestru.Dawid2379 pisze:Gdzieś widziałem że flagę kasuje się tak |=
Kasuję się ustawiając na logiczne zero "0" chyba, że będzie odwrotnie w dokumentacji, jednak domyśle chodzi ustawić na "0" poprzez kasowanie. Odwrotnie chodzi "ustawić flagę" - a więc ustawić bit na "1".
Kasuję się poprzez
Kod: Zaznacz cały
&=~Powyższy cytat przetłumaczonej dokumentacji technicznej mikrokontrolera dotyczy GIFR - General Interrupt Flag Register.Dawid2379 pisze:Cytat:
INTF0 - Flaga zewnętrznego przerwania 0.
Kiedy zdarzenie na pinie INT0 wywoła przerwanie, flaga INTF0 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz ustawiony bit INT0 w GICR, mikrokontroler skoczy do odpowiedniego wektora przerwania. Flaga INTF0 jest kasowana kiedy wykonywana jest procedura obsługi przerwania. Możliwe jest „ręczne” jej wykasowanie przez wpisanie do niej 1.
Nawet po Polsku nie łapię tego, zgłoszenie przerwanie - flaga ustawiona na 1, kasowanie w każdym momencie to wpisanie do niej 1? jest kasowana kiedy wykonywana jest obsługa przerwań? jakby kiedy jej się chce?
Może mi ktoś objaśnić łopatologicznie co i jak?
I jak operować tymi flagami
Bit 6 w tym rejestrze to INTF0: External Interrupt Flag.
Przetłumaczę Ci polski na polski:
Rejestr GIFR odpowiedzialny jest za zaznaczanie, że właśnie teraz trwa przerwanie wywołane jakimś stanem na pinie INT. Jeśli owe przerwanie zostanie wywołane pojawieniem się jakiegoś stanu na pinie INT0 to wtedy w tym rejestrze bit 6 INTF0 ustawia się na "1" (domyślnie jest na 0). Jeśli jest ustawiony na "1" oznacza to, że trwa przerwanie - jest ono obsługiwane, czyli wykonuje się to co napisałeś INT0_vect. Kiedy to się wykona automatycznie zmienia się na "0", czyli już nie ma przerwania.
A więc flaga to nic innego jak znacznik. Wyobraź sobie, że ktoś podnosi czerwoną flagę do góry, aby powiadomić kogoś o czymś.
Koledze chodzi, że ustawić Sense Control. Czyli to co ma wywoływać przerwanie na tym pinie. W tym wypadku zbocze opadające. Uruchamia się wtedy obsługa przerwania. I w tym przerwaniu ma być jakaś zmienna inkrementowana (++). Na przykład w pętli for zmienna "i".c4v2 pisze:Można ustawiać flagę w przerwaniu INT0 że nadszedł impuls opadający następnie odmierzać czas timerem (inkrementacja jakiejś zmiennej zegarowej) do pojawienia się zbocza narastającego i jeżeli czas jest dłuższy od 2ms ustawić flagę synchronizacji, czy zresetować licznik serw (biorąc pod uwagę poziom logiczny impulsu).
Jednak myślę, że z flagą synchronizacji to chodzi o flagę robioną programowo. To znaczy znów jakaś zmienna jest definiowana jest zmienna globalna volatile. Na przykład zmienna Flag. W przerwaniu do tej zmiennej wpisywana jest wartość "1". A w pętli głównej programu zwykłe odpytanie tej zmiennej przez if.
Zobacz też: http://mikrokontrolery.blogspot.com/201 ... wania.html
Wybacz za taki chaos, ale ja też się dopiero co uczę o mikrokontrolerach.
Pozdrawiam.