|
|
따라서:
0xFF = 255 (10진수) = 11111111 (2진수)
AVR에서는 이런 식으로 자주 사용합니다.
DDRA = 0xFF;
이는
DDRA = 0b11111111;
과 같은 의미입니다.
즉 정리하면:
표기의미
| 0b | 2진수 |
| 0x | 16진수 |
| 255 | 10진수 |
그래서 AVR 레지스터를 다룰 때 0b11110000, 0xF0, 240은 모두 같은 값입니다.
오늘 오후 5:21
240 은 어떻게 나오는 것인가?
240은 2진수 11110000을 10진수로 바꾼 값입니다.
각 자리에는 2의 거듭제곱 값이 들어갑니다.
2진수: 1 1 1 1 0 0 0 0 자리값: 128 64 32 16 8 4 2 1
따라서 11110000은:
128 + 64 + 32 + 16 = 240
그래서
0b11110000 = 0xF0 = 240
모두 같은 값입니다.
AVR에서 보면
예를 들어:
DDRA = 0b11110000;
이라고 하면
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 1 1 1 1 0 0 0 0
이므로 상위 4비트는 1, 하위 4비트는 0입니다.
즉 2진수 → 16진수 → 10진수로 표현 방법만 바꾼 것이고 값은 동일합니다.
10진수도 쓰나?
네. AVR C에서도 10진수를 당연히 사용합니다.
특별한 접두사를 붙이지 않으면 기본적으로 10진수입니다.
예를 들어:
PORTA = 240;
여기서 240은 10진수입니다.
그리고 같은 값을 다음처럼 표현할 수 있습니다.
10진수 240 16진수 0xF0 2진수 0b11110000
세 값은 모두 동일한 값입니다.
AVR에서는 보통 용도에 따라 표현을 선택합니다.
PORTA = 240; // 10진수 PORTA = 0xF0; // 16진수 PORTA = 0b11110000; // 2진수
특히 비트 하나하나를 설정할 때는 2진수, 레지스터 값을 간결하게 표현할 때는 16진수를 많이 사용합니다.
예를 들어 DDRA = 0b11110000처럼 쓰면 어느 핀이 입력/출력인지 한눈에 보이기 때문입니다.