처음 공부할 때 비트 조작 함수를 보고, 도대체 이것은 무엇인가... 했었죠.
바이트 반환? 무슨 바이트????
비트를 읽어?? 왜??
비트 기록??? 등등 알수 없는 언어 투성이...
자 그래서 이번 포스트에서는 이 비트 조작함수에 대해서 알아보고, 어떻게 쓰는지 알아보겠습니다.
설명은 간단합니다.
오늘 설명할 함수는
lowByte
highByte
bitRead
bitset
bitWrite
bitClear
bit
7가지 입니다.
lowByte(x)
데이터(x)의 최하위(Low) 바이트(Byte)를 반환합니다.
highByte(x)
데이터(x)의 두 번째 최하위 바이트(Byte)를 반환합니다.
bitRead(x, n)
데이터(x)
n: 읽어낼 비트 위치, LSB(Lease Significant Byte)부터 0에서 시작
반환값은 0또는 1의 비트값
bitWrite(x, n, b)
x: 데이터
n: 기록할 비트 위치, LSB(Lease Significant Byte)부터 0에서 시작
b: 0 또는 1의 기록할 비트 값
반환값은 없음.
x의 n번째 비트에 b값(0 or 1)을 쓴다.
bitSet(x, n)
x: 데이터
n: 기록할 비트 위치, LSB(Lease Significant Byte)부터 0에서 시작
반환값은 없음
x의 n번째 비트를 1로 설정함
bitClear(x, n)
x: 데이터
n: 기록할 비트 위치, LSB(Lease Significant Byte)부터 0에서 시작
x의 n번째 비트를 0으로 설정.
반환값 없음
bit(n)
n: 계산하고자 하는 비트의 위치
반환값은 n에 의해 지정된 비트의 비트값을 반환합니다.
즉, 지정된 위치에 해당하는 비트의 비트 값인 2^n 값을 반환합니다.
순서는 위와 같이 LSB(Lease Significant Byte)부터 시작합니다.
코드 예제를 보시죠!
byte outputBufferA[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte outputBufferB[16] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
int TEST = 0x7C; //랜덤 작성
byte hi, lo;
//int bitPosA[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
//int bitPosB[16] = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 };
int bitPosA[8] = {0, 1, 2, 3, 4, 5, 6, 7};
int bitPosB[8] = {0, 1, 2, 3, 4, 5, 6, 7};
int Read=0;
void setup() {
Serial.begin(9600);
Serial.println("READY!");
}
void loop() {
for (int i = 0; i < 16; i++) {
for (int j = 0; j < 8; j++) {
outputBufferA[i] = bitSet(outputBufferA[i], bitPosA[j]); //outputBufferA[i]의 bitPosA[j]번째 비트를 1로 설정합니다.
outputBufferB[i] = bitClear(outputBufferB[i], bitPosB[j]); //outputBufferA[i]의 bitPosA[j]번째 비트를 0으로 설정합니다.
//outputBufferA[i] = bitClear(outputBufferA[i], bitPosA[j], 1); ///outputBufferA[i]의 bitPosA[j]번째 비트를 1로 설정합니다.
//Read = bitRead(outputBufferB[i], bitPosB[j]); //outputBufferA[i]의 bitPosA[j]번째 비트 읽어 변수 Read에 넣습니다.
hi = highByte(TEST); //데이터 TEST의 두 번째 최하위 데이터 반환, hi <== 0x7 반환
lo = lowByte(TEST); // 데이터 TEST의 최하위 데이터 반환, lo <== 0xC 반환
Serial.println(outputBufferA[i], BIN);
Serial.println(outputBufferB[i], BIN);
delay(500);
}
Serial.println();
Serial.print(outputBufferA[i], BIN);
Serial.print('\t');
Serial.print(outputBufferB[i], BIN);
Serial.print('\t');
Serial.print("outputBufferIndex ");
Serial.println(i);
Serial.println();
}
}
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-xvi. 함수 - 인터럽트 함수 (0) | 2021.01.05 |
---|---|
아두이노 소프트웨어-xv. 함수 - 인터럽트 개념 (0) | 2021.01.05 |
아두이노 소프트웨어-xiii. 함수 -난수 생성 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-xii. 함수 -수학 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-xi. 함수 -시간함수 (0) | 2020.12.31 |