Giải thích cơ chế các lệnh SET BIT, CLEAR BIT và TOGGLE trong lập trình vi điều khiển

Giải thích cơ chế các lệnh SET BIT, CLEAR BIT và TOGGLE trong lập trình vi điều khiển


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:

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.

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.

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.

(Theo Nhật Thương - www.tapit.vn)

Bình Luận
Cùng danh mục: Vi điều khiển - Lập trình

Chia sẻ chương trình đọc ghi thẻ SD bằng MSP430 G2553 phục vụ lưu trữ

17/08/2022 06:20:30 / Lượt xem: 192 / Người đăng: biendt

Chương trình sử dụng vi điều khiển chính là MSP430G2553 (có thể sử dụng vi điều khiển khác cùng họ MSP430) kết nối với module đọc/ghi thẻ nhớ SD card là MODULE MICRO SD CARD để lưu trữ dữ liệu, đọc dữ liệu…Chuẩn bị : 1 KIT MSP430G2553, 1 Module SD Card, 1 Thẻ nhớ SD card : Micro SD <= 2GB hoặc Micro SDHC <= 32GB

Hướng dẫn thiết kế mạch vi điều khiển đơn giản

07/06/2022 06:18:47 / Lượt xem: 298 / Người đăng: biendt

Thiết kế mạch cho vi điều khiển là một việc làm không hề đơn giản đối với những người mới bắt đầu. Có thể bạn phải đọc hàng trăm trang datasheet và tài liệu thiết kế tham khảo, các sơ đồ mạch thiết kế mẫu, các chỉ dẫn layout để có thể hoàn thiện được thiết kế của mình một cách tốt nhất. Hướng dẫn này sẽ chỉ ra những điểm chung mà các bạn cần lưu ý khi thiết kế mạch vi điều khiển

Thiết kế mạch chống nhiễu cho Vi điều khiển (Chíp lập trình hoặc IC)

05/05/2022 06:05:35 / Lượt xem: 615 / Người đăng: biendt

Có mấy phương pháp cho mạch chống nhiễu vi điều khiển : .Sử dụng cách ly quang: để cách ly giữa tín hiệu điều khiển từ VĐK xuất ra và mạch công suất 220v.Sử dụng mạch snubber khi điều khiển tải bằng relay.Sử dụng linh kiện điện tử chính hãng...Sử dụng mạch lọc nguồn AC 220v trước khi cấp cho bộ nguồn 5V nuôi VĐK...Chống nhiễu khi viết code

Ứng dụng vi điều khiển AT89S52 đếm và đặt trước vòng quay từ 0-99 cho máy quấn băng keo máy biến áp xung

21/02/2018 21:32:46 / Lượt xem: 2520 / Người đăng: Nguyễn Thế Trọng Nhân

Đây là bài mô phỏng vi điều khiển AT89S52 đếm và cài đặt vòng quay cho mô tơ hiển thị trên 2 led 7 vach từ 00-99. Áp dụng cho máy quấn keo biến áp xung

Chia sẻ đèn giao thông ngã tư PIC16F877A CCS

24/09/2016 16:09:11 / Lượt xem: 8256 / Người đăng: lam3ngon

Chào các bạn trong bài đăng trước mình đã hướng dẫn các bạn về đèn giao thông ngã tư nhưng là chạy 1 cách tư động nên trong bài này hướng dẫn các bạn điều khiển bằng nút nhấn nha !