Difference between revisions of "Basics of AVR 'C'"
Line 38: | Line 38: | ||
&0b00010000 | &0b00010000 | ||
\end{array} | \end{array} | ||
+ | |||
+ | It is important to note that even if the value of DDRD was different, only bit 4 would have been set with the operation above without affecting other bits. Now let us write that in the hex notation in a C Statement. | ||
+ | <syntaxhighlight> | ||
+ | DDRD = DDRD | (1 << 4); | ||
+ | </syntaxhighlight> | ||
+ | we can also concatenate the OR operation and write as: | ||
+ | <syntaxhighlight> | ||
+ | DDRD | = (1 << 4); | ||
+ | </syntaxhighlight> | ||
=Clearing a bit= | =Clearing a bit= | ||
=Checking a bit= | =Checking a bit= | ||
=Toggling a bit= | =Toggling a bit= |
Revision as of 10:35, 23 March 2016
Let us look at the basics of 'C' for programming AVR Micrcontrollers in this tutorial. Simple stuff like setting and clearing bits is important to any project you do.
It is often required to set, clear, toggle and check bit status of a Register without affecting any other bits. Also it is important to do in a way that is compiler independent and code can be ported without modifications.
Consider the Data Direction Register (DDRD) shown below. As you know we need to set or clear bits in order to make the corresponding pin output or input respectively.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DDD7 | DDD6 | DDD5 | DDD4 | DDD3 | DDD2 | DDD1 | DDD0 |
Let us also say that there is a switch connected to PORTD2 and LED connected to PORTD4 as shown.
Now what we need to accomplish is this:
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DDD7 | DDD6 | DDD5 | DDD4 | DDD3 | DDD2 | DDD1 | DDD0 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
Setting a bit
Let's set the bit 4 to make the port pin as output. There is no direct bit set or clear instruction in 'C' that we can call to do this. Hence lets start with the simple binary number: $$0b00000001$$ Now lets left shift it 4 times to get $$0b00010000$$ Now if we OR this result with DDRD register which has default value of 0b00000000 we get:
\begin{array}{r} &0b00000000\\ &0b00010000\\ \hline &0b00010000 \end{array}
It is important to note that even if the value of DDRD was different, only bit 4 would have been set with the operation above without affecting other bits. Now let us write that in the hex notation in a C Statement.
DDRD = DDRD | (1 << 4);
we can also concatenate the OR operation and write as:
DDRD | = (1 << 4);