Skocz do zawartości

Nie rozumiem wyrażenia


Pomocna odpowiedź

Napisano

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

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?😉

  • Pomogłeś! 1

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

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 😅

  • Pomogłeś! 1

Dzięki wielkie:]

Teraz czaje. Jakoś umknęło mi to o wpisywaniu 1 do TOV0, gdy czytałem dokumentację.

Dzięki jeszcze raz

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ę »
×
×
  • Utwórz nowe...