티스토리 뷰
이전 OR연산과 비슷한 방식으로 AND연산으로 특정비트를 0으로 만들어보도록 하자.
# 일단 기본 설정은 동일하다.
2진수로 직접 명시해줘서 제어할 경우, 가장 직접적이긴 하지만 매우 불편하다.
# 쉬프트연산과 반전연산을 이용하여 특정비트를 0으로 지정해 줄 수 있다.
OR연산때와 마찬가지로 쉬프트연산을 사용하여 밀고자하는 갯수가 비트의 번호와 일치한다.
그렇기 때문에 2진수로 모든 숫자를 명시해주지 않고도 특정 비트를 제어할때의 수고를 덜 수 있다.
쉬프트연산과 반전연산이 처리되는 과정을 풀어보면
1<<0 : 0b00000001
~(1<<0) : 0b11111110
즉, ~이 모든숫자를 반전을 시켜 0을 1로, 1을 0으로 바꿔준다.
어떤 비트가 1인 값은 해당 비트번호에 상응하는 번호만큼 쉬프트를 해주면 되는데,
어떤 비트가 0인 값을 만들땐 반전을 해줘야한다는것을 알아둬야한다.
그럼 이번에는 특정비트만 0으로 만들어보자.
앞에서는 0이아닌 다른비트는 모두 1로 만들면서 0을 만들어 줬었는데,
이번에는 기존의 값을 유지한 채 특정비트만 0으로 만들어 보도록 하자.
# AND연산의 결과는 위와같이 나타난다.
# 따라서 이렇게 연산을 하게되면
PORTD = PORTD & ~(1<<0) 과 같이 되므로
기존의 값에 0b11111110 을 AND연산시킨 결과가 나타나게 된다.
따라서 앞으로 코드상에서 PORTD &= ~(1<<0); 과 같은 코드를 만나면
기존의 값을 유지한 채 0번 비트만 0으로 바꾼다 는 의미로 알고있어야 한다.
# 반복문을 사용해 AND연산을 통한 비트제어가 가능하다.
이와같이 반복문을 통해 주로 제어되므로 표현에 익숙해 져야한다.
'EMBEDDED > 8-bit AVR' 카테고리의 다른 글
6) OR연산을 이용하여 특정비트 1로 만들기 (0) | 2018.04.21 |
---|---|
5) 이진수 표현과 쉬프트 연산자 사용 (0) | 2018.04.20 |
4) LED 제어 (0) | 2018.04.18 |
3) LED켜기 & 시뮬레이터 디버깅 (0) | 2018.04.18 |
2) Atmel Studio 7.0 설치&프로젝트 생성 (0) | 2018.04.12 |