Bits and Bytes

Bits and Bytes trong Arduino

Arduino cung cấp các hàm để làm việc với bit và byte. Dưới đây là mô tả, giải thích, và ví dụ về các hàm như bit(), bitClear(), bitRead(), bitSet(), bitWrite(), highByte(), và lowByte().

1. bit()

Mô tả:
  • Tạo ra một giá trị với một bit duy nhất được bật (1) tại vị trí được chỉ định.
Cú pháp:
unsigned int bit(int n);
Giải thích:
  • n: Vị trí bit (bắt đầu từ 0).
  • Trả về giá trị dạng số nguyên với bit thứ n được bật.
Ví dụ:
void setup() {
  Serial.begin(9600);
  Serial.println(bit(3), BIN);  // In ra: 1000
}

void loop() {}

2. bitClear()

Mô tả:
  • Xóa (đặt thành 0) một bit cụ thể trong giá trị.
Cú pháp:
bitClear(x, n);
Giải thích:
  • x: Giá trị ban đầu.
  • n: Vị trí bit cần xóa.
Ví dụ:
void setup() {
  Serial.begin(9600);
  byte x = 0b1111;  // 15 trong nhị phân
  bitClear(x, 2);   // Xóa bit thứ 2
  Serial.println(x, BIN);  // In ra: 1011
}

void loop() {}

3. bitRead()

Mô tả:
  • Đọc giá trị (0 hoặc 1) của một bit tại vị trí chỉ định.
Cú pháp:
bitRead(x, n);
Giải thích:
  • x: Giá trị cần đọc.
  • n: Vị trí bit cần đọc.
Ví dụ:
void setup() {
  Serial.begin(9600);
  byte x = 0b1010;  // Giá trị nhị phân
  Serial.println(bitRead(x, 1));  // In ra: 1
  Serial.println(bitRead(x, 0));  // In ra: 0
}

void loop() {}

4. bitSet()

Mô tả:
  • Bật (đặt thành 1) một bit cụ thể trong giá trị.
Cú pháp:
bitSet(x, n);
Giải thích:
  • x: Giá trị ban đầu.
  • n: Vị trí bit cần bật.
Ví dụ:
void setup() {
  Serial.begin(9600);
  byte x = 0b0000;  // 0 trong nhị phân
  bitSet(x, 2);     // Bật bit thứ 2
  Serial.println(x, BIN);  // In ra: 100
}

void loop() {}

5. bitWrite()

Mô tả:
  • Ghi giá trị (0 hoặc 1) vào một bit cụ thể trong giá trị.
Cú pháp:
bitWrite(x, n, b);
Giải thích:
  • x: Giá trị ban đầu.
  • n: Vị trí bit cần ghi.
  • b: Giá trị cần ghi (0 hoặc 1).

Ví dụ:

void setup() {
  Serial.begin(9600);
  byte x = 0b1010;  // Giá trị ban đầu
  bitWrite(x, 1, 0); // Ghi giá trị 0 vào bit thứ 1
  Serial.println(x, BIN);  // In ra: 1000
}

void loop() {}

6. highByte()

Mô tả:
  • Trích xuất byte cao (high byte) từ một giá trị 16-bit.
Cú pháp:
byte highByte(int x);
Giải thích:
  • Trả về byte cao (8 bit bên trái) của giá trị 16-bit.
Ví dụ:
void setup() {
  Serial.begin(9600);
  int x = 0xABCD;  // Hexadecimal
  Serial.println(highByte(x), HEX);  // In ra: AB
}

void loop() {}

7. lowByte()

Mô tả:
  • Trích xuất byte thấp (low byte) từ một giá trị 16-bit.
Cú pháp:
byte lowByte(int x);
Giải thích:
  • Trả về byte thấp (8 bit bên phải) của giá trị 16-bit.
Ví dụ:
void setup() {
  Serial.begin(9600);
  int x = 0xABCD;  // Hexadecimal
  Serial.println(lowByte(x), HEX);  // In ra: CD
}

void loop() {}

Tóm tắt bảng

Hàm Mô tả Ví dụ Kết quả
bit() Bật một bit tại vị trí chỉ định. bit(3) 8 (1000)
bitClear() Xóa một bit cụ thể trong giá trị. bitClear(15, 2) 11 (1011)
bitRead() Đọc giá trị của một bit tại vị trí chỉ định. bitRead(10, 1) 1
bitSet() Bật một bit cụ thể trong giá trị. bitSet(0, 2) 4 (100)
bitWrite() Ghi giá trị (0 hoặc 1) vào một bit cụ thể. bitWrite(10, 1, 0) 8 (1000)
highByte() Lấy byte cao từ giá trị 16-bit. highByte(0xABCD) 0xAB
lowByte() Lấy byte thấp từ giá trị 16-bit. lowByte(0xABCD) 0xCD