[임베디드/C] 비트연산자, 매크로

1 분 소요

마이크로컨트롤러에서 자주 사용되는 비트연산자

입출력장치 등 다양한 장치가 레지스터를 통해 제어되고 이에 따라 비트연산자가 자주 사용된다.

  • 비트 세트
  • 비트 클리어
  • 비트 반전
  • 비트 검사/읽기

비트 세트

or 연산자를 사용하면 원하는 비트를 1로 만들고 그 이외에는 이전의 값을 유지시키도록 할 수 있다.

register |= 0b00000100; // 또는
register |= 0x04; //제일 자주 사용하는 코드는
#define registerBit 2
register |= (1 << registerBit);

여기서 0x04를 마스크라고 한다.

비트 클리어

& 연산자를 사용하면 원하는 비트를 0으로, 그 이외에는 이전의 값을 유지시키도록 할 수 있다.

register &= 0b00000100; // 또는
register &= 0x04; //제일 자주 사용하는 코드는
#define registerBit 2
register &= ~(1 << registerBit);

비트 반전

^(xor연산자)연산자를 사용하면 특정 비트를 반전시킬 수 있다.

register ^= 0b00000100; // 또는
register ^= 0x04; //제일 자주 사용하는 코드는
#define registerBit 2
register ^= (1 << registerBit);

비트 검사/읽기

&연산자를 사용하면 특정 비트를 읽을 수 있다.

BIT = register & 0b00000100; // 또는
BIT = register & 0x04; //제일 자주 사용하는 코드는
#define registerBit 2
BIT = register & (1 << registerBit);

비트 연산 매크로

sfr_defs.h파일에 비트연산 매크로가 몇가지 들어있다.

#define _BV(bit) (1 << (bit))
#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))
#define bit_is_clear(sfr, bit) (!(_SFR_BYTE(sfr) & _BV(bit)))

첫 번째는 원하는 위치에 세트, 두 번째는 원하는 위치의 비트가 세트되어있는지, 세 번째는 원하는 위치릐 비트가 클리어되어있는지 말해준다.
이외에도 특정 비트가 세트 또는 클리어될 때까지 기다리는 매크로 함수도 있다.

댓글남기기