rzorrz Napisano Grudzień 2, 2008 Udostępnij Napisano Grudzień 2, 2008 Witam:] Zaczynam programowanie AVR w języku C i natknąłem się na taka instrukcję: TIFR=1<<TOV0; //KASOWANIE FLAGI PRZEPEŁNIENIA Jak to wyrażenie kasuję tę flagę? Wiem, że operator << oznacza przesunięcie. Ktoś może mi wyjaśnić ten zapis?? Dzięki z gory
drukarz Grudzień 2, 2008 Udostępnij Grudzień 2, 2008 Chodzi o to że do rejestru TIFR w miejsce bitu TOV0 wpisywana jest jedynka. Za TOV0 wpisywany jest nr tego bitu. Zamiast szukać który to bit rejestru i pisać TIFR=1<<(nr bitu TOV0); wpisujemy TIFR=1<<TOV0; Tak jest czytelniej. W razie czego nie trzeba szukać co to za bit ma ten nr tylko od razu mamy nazwę bitu. Nie zamieszałem? 1
rzorrz Grudzień 3, 2008 Autor tematu Udostępnij Grudzień 3, 2008 Dzięki:] już trochę czaję, ale mam jeszcze takie pytanka: 1. Dlaczego do TOV0 trzeba wpisać 1 żeby wyzerować tę flagę? Przecież gdy licznik osiągnie odpowiednią wartość, to ustawiana jest ta właśnie flaga- wpisywana jest tam jedynka. Zawsze myślałem, że kasowanie TOV0 robi się przez wpisanie 0. 2. Po czym odróżnić w takim wyrażeniu: TIFR=1< że chodzi o podstawienie 1 do TOV0 a nie o przesunięcie bitowe? Szukałem ale nie znalazłem odpowiedzi. Dzięki
abxyz Grudzień 3, 2008 Udostępnij Grudzień 3, 2008 To proste, zacznę od początku TOV0 to bit numer 1 w rejestrze TIFR (w atmega8 przynajmniej), bity numeruje się zaczynając od zera 00000001 - liczba 1 przedstawiona dwójkowo TIFR = (00000001 << TOV0 ) preprocesor języka C, przed kompilacją zamienia w kodzie każdy napis "TOV0" na "1" TIFR = (00000001 << 1 ) = 00000010 Wpierw wartość 00000001 zostaje przesunięta o jedną pozycję w lewo, następnie do TIFR trafia wartość 00000010, czyli ustawiany jest bit nr. 1(licząc od zera) A czemu w rejestrze TIFR kasuje się bit TOV0 wpisują wartość bitu "1", a nie "0" Bo tak i już. Fragment z atmega8 datasheet: "The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0. TOV0 is cleared by hardware when executing the corresponding interrupt Handling Vector. Alternatively, TOV0 is cleared by writing a logic one to the flag." Czasem tak bywa. Kiedyś widziałem na filmie jak gaszono płonący szyb naftowy wysadzając go w powietrze 1
rzorrz Grudzień 3, 2008 Autor tematu Udostępnij Grudzień 3, 2008 Dzięki wielkie:] Teraz czaje. Jakoś umknęło mi to o wpisywaniu 1 do TOV0, gdy czytałem dokumentację. Dzięki jeszcze raz
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »