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 |