BÀI 20 : GIAO TIẾP UART PIC16F877A XC8

8:58:00 PM
1. Thế nào là giao tiếp UART, giao tiếp UART. UART là viết tắt của Universal Asynchronous Receiver – Transmitter. Thường là một mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính và các thiết bị ngoại vi. Rất nhiều vi điều khiển hiện nay đã được tích hợp UART, vì vấn đề tốc độ và độ điện dụng của UART không thể so sánh với các giao tiếp mới hiện nay nên các dòng PC & Laptop đời mới không còn tích hợp cổng UART. Như các bạn đã biết giao tiếp SPI và I2C có 1 dây truyền dữ liệu và 1 dây được sử dụng để truyền xung clock (SCL) để đồng bộ trong giao tiếp. Với UART thì không có dây SCL, vấn đề được giải quyết khi mà việc truyền UART được dùng giữa 2 vi xử lý với nhau, đồng nghĩa với việc mỗi vi xử lý có thể tự tạo ra xung clock cho chính nó xử dụng.
Để bắt đầu cho việc truyền dữ liệu bằng UART, một START bit được gửi đi, sau đó là các bit dữ liệu và kết thúc quá trình truyền là STOP bit.

Như hình các bạn có thể thấy. Khi ở trạng thái chờ mức điện thế ở mức 1 (high). Khi bắt đầu truyền START bit sẻ chuyển từ 1 xuống 0 để báo hiệu cho bộ nhận là quá trình truyền dữ liệu sắp xảy ra. Sau START bit là đến các bit dữ liệu D0-D7 (Theo hình vẽ các bit này có thể ở mức High or Low tùy theo dữ liệu). Sau khi truyền hết dữ liệu thì đến Bit Parity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền (vấn đề này mình sẽ giải thích rõ hơn trong tài liệu CRC trong thời gian tới). Cuối cùng là STOP bit là 1 báo cho thiết bị rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm báo tính đúng đắn của dữ liệu.
Các thông số cơ bản trong truyền nhận UART:
Baund rate (tốc độ baund ): Khoảng thời gian dành cho 1 bit được truyền. Phải được cài đặt giống nhau ở gửi và nhận.
- Frame (khung truyền ): Khung truyền quy định về số bit trong mỗi lần truyền.
- Start bit : là bit đầu tiên được truyền trong 1 Frame. Báo hiệu cho thiết bị nhận có một gói dữ liệu sắp đc truyền đến. Bit bắt buộc.
- Data : dữ liệu cần truyền. Bit có trọng số nhỏ nhất LSB được truyền trước sau đó đến bit MSB.

- Parity bit : kiểm tra dữ liệu truyền có đúng không.

- Stop bit : là 1 hoặc các bit báo cho thiết bị rằng các bit đã được gửi xong. Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảo tính đúng đắn của dữ liệu. Bit bắt buộc.
Ok mình sẽ giới thiệu sơ lược với các bạn vậy thôi trong bài đăng sau sẽ giới thiệu rõ hơn về UART nên các bạn nhớ theo dõi. Trong bài đăng sau mình sẽ gửi tài liệu cho các bạn xem. Trong bài này mình sẽ hướng dẫn các bạn xuất 1 ký tự và 1 chuỗi ký tự lên của sổ VIRTUAL TERMINAL thôi nha trong bài sau sẽ hướng dẫn giao tiếp giữa 1 PIC.
- Đây là ảnh mô phỏng protues.


uart pic16f877a xc8
- Đây là code chương trình.
#include <stdio.h>
#include <stdlib.h>
#define _XTAL_FREQ 8000000
#include <xc.h>
#include "uart.h"
// CONFIG
#pragma config FOSC = HS        // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
void main(void)
{
    UART_Init(9600);
    while(1)
    {
        __delay_ms(1000);
        UART_Write_Text("WELLCOME TO MY BLOG\n\r");
        __delay_ms(90);
        UART_Write_Text("\n\r");
        __delay_ms(1000); 
        UART_Write_Text("XCVN.BLOGSPOT.COM\n\r");
        __delay_ms(90);
        UART_Write_Text("\n\r");
    }
}
- Link download project Click here

Share this

Related Posts

Previous
Next Post »

1 nhận xét:

Write nhận xét
March 23, 2018 at 7:58 PM delete

a ơi cho e hỏi lệnh mà nhập lên virtual để xuất ra như ý muốn của mình thì ntn ạ

Reply
avatar