🌱 Bài 16. 8051 Giao tiếp truyền nhận ký tự qua UART

🌱 Bài 16. 8051 Giao tiếp truyền nhận ký tự qua UART

    Để sử dụng UART giao tiếp giữa Vi điều khiển 8051 với các thiết bị hoặc với vi điều khiển khác, chúng ta cần viết các hàm driver quan trọng với mục tiêu tái sử dụng phần mềm cho nhiều bài toán khác nhau.

    Lý thuyết cơ bản về UART có trong Bài 14.

    Các thanh ghi ngoại vi UART của 8051 có trong Bài 15.

  • Hàm khởi tạo UART_Init(): Dùng để khởi tạo Timer, cấu hình các chế độ UART và cho phép truyền/nhận dữ liệu.
  • Hàm truyền dữ liệu UART_Write(): Dùng để gửi một byte dữ liệu qua UART (TX).
  • Hàm nhận dữ liệu UART_Read(): Dùng để nhận và trả về một byte dữ liệu từ UART (RX).

Cách hoạt động của các hàm Driver UART

1. Hàm UART_Init(): Để khởi tạo UART, bạn cần cấu hình các thanh ghi Timer và SCON, đồng thời chọn Baudrate phù hợp với ứng dụng. Ví dụ:

void UART_Init() {
    TMOD = 0x20;    // Sử dụng Timer 1 chế độ 2
    TH1 = 0xFD;     // Tốc độ Baudrate 9600
    SCON = 0x50;    // Chọn chế độ UART 8 bit
    TR1 = 1;        // Kích hoạt Timer 1
}

2. Hàm UART_Write(): Hàm này được sử dụng để gửi một byte dữ liệu qua UART. Dữ liệu được ghi vào thanh ghi SBUF và chờ cờ TI để đảm bảo quá trình truyền hoàn tất:

void UART_Write(char data) {
    SBUF = data;    // Gửi dữ liệu
    while (!TI);    // Chờ quá trình truyền hoàn tất
    TI = 0;         // Reset cờ TI
}

3. Hàm UART_Read(): Hàm này đọc dữ liệu nhận được từ UART. Khi cờ RI được kích hoạt, dữ liệu sẽ sẵn sàng để đọc từ thanh ghi SBUF:

char UART_Read() {
    while (!RI);    // Chờ dữ liệu được nhận
    RI = 0;         // Reset cờ RI
    return SBUF;    // Trả về dữ liệu nhận được
}

Ví dụ thực tế: Giao tiếp giữa 2 Vi điều khiển

Dưới đây là ví dụ về giao tiếp UART giữa hai vi điều khiển 8051. Một vi điều khiển sẽ gửi dữ liệu, trong khi vi điều khiển còn lại sẽ nhận và xử lý dữ liệu:

🌟 Theo dõi các bài viết liên quan 🌟

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

Đăng nhận xét

Mới hơn Cũ hơn