Home »
C programs »
C preprocessors programs
Define Macros to SET and CLEAR bit of a PIN in C
Here, we will learn how to define Macros to SET and CLEAR bit of a given PIN in C programming language?
By IncludeHelp Last updated : March 10, 2024
Given a PIN (value in HEX) and bit number, we have to SET and then CLEAR given bit of the PIN (val) by using Macros.
Macros definitions
#define SET(PIN,N) (PIN |= (1<<N))
#define CLR(PIN,N) (PIN &= ~(1<<N))
Here,
- SET and CLR are the Macro names
- PIN is the value whose bit to set or/and clear
- N is the bit number to set or/and clear
Example
#include <stdio.h>
#define SET(PIN,N) (PIN |= (1<<N))
#define CLR(PIN,N) (PIN &= ~(1<<N))
int main(){
unsigned char val = 0x11;
unsigned char bit = 2;
printf("val = %X\n",val);
//set bit 2 of val
SET(val,bit);
printf("Aftre setting bit %d, val = %X\n", bit, val);
//clear bit 2 of val
CLR(val,bit);
printf("Aftre clearing bit %d, val = %X\n", bit, val);
return 0;
}
Output
val = 11
Aftre setting bit 2, val = 15
Aftre clearing bit 2, val = 11
Explanation
- Initially val is 0x11, its binary value is "0001 0001".
- In the example, we are setting and clear bit 2 (please note start counting bits from 0 i.e. first bit is 0, second bit is 1 and third bit is 2).
- After calling Macro SET(val,bit), the bit number 2 (i.e. third bit) will be set/hight and the value of val will be "0001 0101" that will be 0x15 in Hexadecimal.
- And then, we are calling CLR(val,bit), after calling this Macro, the bit number 2 (i.e. third bit) will be cleared and the value of val will be "0001 0001" again, that is 0x11 in Hexadecimal.
C Preprocessors Programs »