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

6 views0 comments

Recent Posts

See All

In microcontroller programming we have to write or read certain registers. The questions is how to access these registers ?. The register or a memory location can easily be accessed using pointers