GIẢI THÍCH CÁC LỆNH SET BIT, CLEAR BIT và TOGGLE.
Thường được sử dụng trong Lập trình Vi điều khiển
A, Lệnh SET BIT: |=
Lệnh SET BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó có giá trị logic 1 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó.
Ví dụ: Lệnh P1IN |= BIT0 sẽ cho kết quả là bit thứ 0 trong thanh ghi P1IN có mức logic 1. Các bit còn lại không thay đổi. Trong đó P1IN là một thanh ghi 8 bit.
Cần lưu ý:
BIT0 = 0b00000001
BIT1 =0b00000010
BIT2 =0b00000100
…….
BIT7 =0b10000000
(BIT0 = 0b00000001 Tất cả các bit bằng 0, bit thứ 0 bằng 1, tương tự BIT1 -> BIT7).
P1IN |= BIT0 chính là P1IN = PIN | BIT0
Toán tử OR (|) có bảng chân trị như sau:
Ta có: 0|1 = 1 và 1|1 =1 vậy nên sau khi thực hiện phép toán với BIT0 thì bit thứ 0 của thanh ghi P1IN bằng 1:
Vậy bit thứ 0 của thanh ghi P1IN đã bằng 1, mục tiêu tiếp theo là không làm thay đổi các bit còn lại trong thanh ghi P1IN.
Ta có BIT0 (0b00000001) là bit thứ 0 bằng 1, còn các bit còn lại bằng 0. Dựa vào bảng chân trị ta thấy:
0|0 =0 và 1|0 =1. Vậy nên nếu trước đó giá trị các bit còn lại (từ bit thứ 1 đến bít thứ 7 của thanh ghi P1IN) bằng 0 hay 1 gì đi nữa thì sau khi or với 0 thì giá trị cũng không đổi vì 0|0 =0 và 1|0=1:
Bit thứ 7 | Bit thứ 6 | Bit thứ 5 | Bit thứ 4 | Bit thứ 3 | Bit thứ 2 | Bit thứ 1 | Bit thứ 0 | |
P1IN |
x |
x |
x |
x |
x |
x |
x |
x |
BIT0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
P1IN |=BIT0 |
x |
x |
x |
x |
x |
x |
x |
1 |
Vậy kết quả thực hiện của phép toán SET BIT (|=) là làm cho bit mong muốn bằng 1 và giữ nguyên các bit còn lại. Để hiểu phép toán này ta cần biết bảng chân trị của toán tử OR và định nghĩa BIT 0 = 0b00000001, tương tự với BIT1, BIT2, …BIT7.
B. Lệnh CLEAR BIT &= ~
Lệnh CLEAR BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó.
Ví dụ: Lệnh P1OUT &= ~BIT0 sẽ cho kết quả là thứ 0 trong thanh ghi P1OUT có mức logic 0. Các bit còn lại không thay đổi. Trong đó P1OUT là một thanh ghi 8 bit.
Cần lưu ý:
BIT0 = 0b00000001
BIT1 =0b00000010
BIT2 =0b00000100
…….
BIT7 =0b10000000
(BIT0 = 0b00000001 Tất cả các bit bằng 0, bit thứ 0=1, tương tự BIT1 -> BIT7).
P1OUT &= ~BIT0 chính là P1OUT = POUT & (~BIT0)
Toán tử NOT(~) có bảng chân trị như sau:
Vậy (~BIT0) = 0b11111110 (Tất cả các bit bằng 1 , bit thứ 0 bằng 0).
Toán tử AND(&) có bảng chân trị như sau:
Ta có 0&0 =0 và 1&0=0, nghĩa là nếu trước đó giá trị bit =1 hay bit=0 thì sau khi AND với 0 thì kết quả sẽ bằng 0.
Và ta cũng có: 1&1 =1 và 0&1 =0 nên nếu như giá trị các bit còn lại từ bit thứ 1 đến bit thứ 7 có bằng 0 hay bằng 1 thì sau khi and với 1 thì giá trị đó cũng không thay đổi.
Bit thứ 7 | Bit thứ 6 | Bit thứ 5 | Bit thứ 4 | Bit thứ 3 | Bit thứ 2 | Bit thứ 1 | Bit thứ 0 | |
P1OUT |
x |
x |
x |
x |
x |
x |
x |
x |
~BIT0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
POUT&=~BIT0 |
x |
x |
x |
x |
x |
x |
x |
0 |
Vậy kết quả thực hiện của phép toán CLEAR BIT (&=~) là làm cho bit mong muốn bằng 0 và giữ nguyên các bit còn lại. Để hiểu phép toán này ta cần biết bảng chân trị của toán tử AND và toán tử NOT và định nghĩa BIT 0 = 0b00000001, tương tự với BIT1, BIT2, …BIT7.
C. Lệnh TOGGLE (Đảo bít) ^=
Lệnh TOGGLE BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 nếu trước đó nó có giá trị logic 1 và ngược lại, đồng thời không làm thay đổi giá trị các bit còn lại của thanh ghi đó.
Ví dụ: Lệnh P1OUT ^= BIT0 sẽ cho kết quả là thứ 0 trong thanh ghi P1OUT có mức logic 0 nếu trước đó nó đã có giá trị là 1 và ngược lại . Đồng thời các bit còn lại không thay đổi. Trong đó P1OUT là một thanh ghi 8 bit.
Cần lưu ý:
BIT0 = 0b00000001
BIT1 =0b00000010
BIT2 =0b00000100
…….
BIT7 =0b10000000
(BIT0 = 0b00000001 Tất cả các bit bằng 0, bit thứ 0=1, tương tự BIT1 -> BIT7).
P1OUT ^ BIT0 chính là P1OUT = POUT ^ BIT0
Toán tử XOR(^) có bảng chân trị như sau:
Ta có: 0 ^1 = 1 và 1^1=0 (hình trên)nên phép xor với 1 sẽ làm đảo giá trị bit trước đó 0 thành 1 và 1 thành 0.
Ta có: 0^0 = 0 và 1^0=1 (hình dưới) nên nếu xor với 0 thì giá trị bit trước đó sẽ giữ nguyên không đổi.
Bit thứ 7 | Bit thứ 6 | Bit thứ 5 | Bit thứ 4 | Bit thứ 3 | Bit thứ 2 | Bit thứ 1 | Bit thứ 0 | |
P1OUT |
x |
x |
x |
x |
x |
x |
x |
x |
BIT0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
POUT ^=BIT0 |
x |
x |
x |
x |
x |
x |
x |
~x |
Vậy kết quả thực hiện của phép toán TOGGLE BIT (^=) là làm đảo giá trị của bit mong muốn và giữ nguyên các bit còn lại. Để hiểu phép toán này ta cần biết bảng chân trị của toán tử XOR và định nghĩa BIT 0 = 0b00000001, tương tự với BIT1, BIT2, …BIT7.
[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]
Nhật Thương