Programowanie mikroprocesorów ( mikrokontrolerów )

Operacje bitowe

Podczas programowania w języku c mikroprocesorów mikrokontrolerów bardzo przydatną rzeczą mogą okazać się operacje bitowe dzięki którym możemy modyfikować wartość całego portu lub tylko jednego z bitów w prosty sposób. Możemy wyróżnić kilka najważniejszych i najbardziej przydatnych przy programowaniu mikrokontrolerów mikroprocesorów operatorów bitowych takich jak:

operator "|" - bitowa alternatywa (OR)

Operator ten jest bardzo przydatny kiedy chcemy zmienić wartość jednego bądź kilku bitów na wartość "jeden" pozostawiając pozostałe bity bez zmian. Graficzny zapis tej operacji bitowej przedstawiony został poniżej.

0 1 0 1 0 1 0 1 |0 0 1 1 0 0 1 1 =0 1 1 1 0 1 1 1

Aby zastosować tą operacje bitową do ustawienia "jedynek" na wybranych pozycjach bez zmiany wartości pozostałych bitów przyjmijmy że pierwszy argument jest jakąś wartością stanu bitów portu mikrokontrolera. Zależy nam aby 3 i 5 bit ustawić na "jeden" bez zmiany wartości pozostałych bitów. W tym celu należy użyć powyższej operacji bitowej z liczbą która na wybranych miejscach (3 i 5) będzie miała jedynki natomiast na pozostałych miejscach zera aby nie zmienić wartości liczby wejściowej. Jak na przykładzie poniżej:

10010010 | 00101000 = 10110110

Poniżej przedstawiono tabele prawdy dla operatora OR0|0=00|1=11|0=11|1=1

("Ustaw na jeden". Dla drugiego operatora jedynki ustawiają wartość wynikową na jeden, zera przepisują wartość pierwszego operatora.)

operator "&" - bitowa koniunkcja (AND)

Operator ten jest przydatny kiedy chcemy zmienić wartość jednego bądź kilku bitów na wartość "zero" pozostawiając pozostałe bity bez zmian. Graficzny zapis tej operacji bitowej przedstawiony został poniżej.

0 1 0 1 0 1 0 1 &
0 0 1 1 0 0 1 1 =
0 0 0 1 0 0 0 1

Aby zastosować tą operacje bitową do ustawienia "zer" na wybranych pozycjach bez zmiany wartosci pozostałych bitów przyjmijmy że pierwszy argument jest jakąś wartością stanu bitów portu mikrokontrolera. Zależy nam aby 3 i 5 bit ustawić na "zero" bez zmiany wartości pozostałych bitów. W tym celu należy użyć powyższej operacji bitowej z liczbą która na wybranych miejscach (3 i 5) będzie miała zera natomiast na pozostałych miejscach jedynki aby nie zmienić wartości liczby wejściowej. Jak na przykładzie poniżej:

01101101 | 11010111 = 01001001

("Ustaw na zero". Dla drugiego operatora zera ustawiają wartość wynikową na zero, jedynki przepisują wartość pierwszego operatora.)

operator "<<" - przesunięcie w lewo

1 0 0 1 1 0 0 1 << 3 = 1 1 0 0 1 0 0 0

Operator umożliwiający przesunięcie wszystkich wartości bitów portu o X miejsc w lewą stronę. Operacja używana np do szybkiego mnożenia liczby razy wielokrotności wagowe dwójki tzn. Przesuwając o jedno miejsce w lewo uzyskujemy mnożenie wartości portu razy dwa, o dwa miejsca razy cztery, o trzy miejsca razy osiem itd ...

operator ">>" - przesunięcie w prawo

 1 0 0 1 1 0 0 1 >> 5 = 0 0 0 0 0 1 0 0

Operator umożliwiający przesunięcie wszystkich wartości bitów portu o X miejsc w prawą stronę. Operacja używana np do szybkiego dzielenia liczby przez wielokrotności wagowe dwójki tzn. Przesuwając o jedno miejsce w prawo uzyskujemy dzielenie wartości portu przez dwa, o dwa miejsca przez cztery, o trzy miejsca przez osiem itd ...

operator "^" - bitowa alternatywa wykluczająca (XOR)

0 1 0 1 0 1 0 1 ^ 
0 0 1 1 0 0 1 1 =
0 1 1 0 0 1 1 0

Operacja bitowa wykrywająca różnice dla dwóch liczb wejściowych. Tabela prawdy dla funkcji or daje wartość jeden dla dwóch różnych wartości wejściowych natomiast zero dla dwóch tych samych wartości wejściowych tzn porównuje dwie liczby bitowe i na miejscach gdzie jej wartości się różnią daje w wyniku jeden. Gdy bity są równe daje w wyniku zero. Jest to rzadziej używany operator bitowy.

operator "~" - dopełnienie jedynkowe

 ~1 0 0 1 1 0 0 1
= 0 1 1 0 0 1 1 0

Operator dopełnienia jedynkowego to nic innego jak zanegowanie całej zmiennej bitowej tzn wszystkie zera zstąpione zostają jedynkami natomiast jednynki zastąpione zostają zerami.





 
Wszelkie prawa zastrzeżone! Kopiowanie, powielanie i wykorzystywanie zdjęć, treści oraz jej fragmentów bez zgody autora zabronione.
© mikroprocesory.info.pl@gmail.com 2013.