Bitwise operations In Embedded C
In this blog I will explain use of bitwise operators for performing some operations which are often required for microcontrollers programming.
Bitwise operators: & (AND), | (OR) , ~ (NOT) , ^ (XOR) etc.
Writing operation: In microcontroller programming we often have to alter/change some bits of a register/memory location or an I/O port. This can be easily accomplished by using bitwise operators.
Examples:
Let's suppose we have to set (logic 1) port pin no.-1 of a microcontroller without changing any other pins.
lets assume the port is linked with some register " PORT0"
We are assuming that the port contain 16 pins.
PORT0 | = (1<<1);
So this operation is equivalent to : Content of PORT0 register | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
PORT0 | = (3<<1);
PORT0 = PORT0 | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
At this point we know how to set a bit of a register. Now, let's understand how to clear (logic 0) bits without affecting other bits of a register.
Clear bit no 1 and 2 of a register " R0" of a microcontroller.
If we write R0 = 0x0000 then this syntax will clear all the bits of R0. As we need to clear bit no 1 and 2 only so we have to modify our syntax.
R0 & = ~(3<<1);
This operation is equivalent to :
R0 = R0 & 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1
Clear bit no. 4 and 7
R0 & = ~((1<<4) |(1<<7));
Use of ^ (XOR) operator
The ^ operator is used to perform the exclusive or operation between two numbers.
Let's consider a case where we want to toggle the bits of a register R0.
This can easily be done by using the ^ operator.
R0 ^= R0
This is equivalent to R0 = R0 ^R0