비트 연산자의 활용

Yoonkyo·2025년 2월 25일

임베디드

목록 보기
1/3

MCU를 사용하다보면 여러 레지스터를 다뤄야 하는데, 기능을 사용하기 위해서는 특정 비트만 활성화하거나 비활성화하는 등의 기능을 수행해야 한다. 예시로는 DC 모터를 구동시키는 코드이다.

void DC_Init() {
	// Fast PWM Mode
	TCCR0 |= (1 << WGM00) | (1 << WGM01);
	// non-inversion
	TCCR0 |= (1 << COM01);
	// prescaler 64로 설정
	TCCR0 |= (1 << CS00) | (1 << CS01);
	
	DDRA |= (1 << PA0) | (1 << PA1);
	
	PORTA |= (1 << PA0);
	PORTA &= ~(1 << PA1);
}

비트 연산으로는 Flip-Flop에서 다뤘던,setclear(reset) 그리고 toggle이 있다.

위의 기능을 수행할 때 유용한 함수들은 다음과 같다.

unsigned int setBit(unsigned int num, unsigned int bitPosition) {
	return num | (1 << bitPosition);
}

unsigned int clearBit(unsigned int num, unsigned int bitPosition) {
	return num & ~(1 << bitPosition);
}

unsigned int toggleBit(unsigned int num, unsigned int bitPosition) {
	return num ^ (1 << bitPosition);
}

unsigned int setBits(unsigned int num, unsigned int start, unsigned int count) {
	return num | ((1 << count) - 1) << start;
}

unsigned int clearBits(unsigned int num, unsigned int start, unsigned int count) {
	return num & ~(((1 << count) - 1) << start);
}

unsigned int toggleBits(unsigned int num, unsigned int start, unsigned int count) {
	return num ^ ((1 << count) - 1) << start;
}
profile
코드로 상상하고, 로봇으로 실현하는 개발자입니다😊

0개의 댓글