Truyền thông nối tiếp không đồng bộ

1. Một số khái niệm

Baudrate:  Số bit truyền đi trong 1s , ví dụ : tôc độ Baud = 9600 => thời gian 0.104ms cho một bit truyền

Frame (khung truyền ): Số bit được gửi đi trong mỗi lần truyền: 1 Start Bit, 1- 2 Stop Bit , 0- 1  Paraty  Bit chẵn hoặc lẻ  , 5,6,7,8, hoặc 9 Data Bit.

Start bit: Bit đầu tiên được truyền trong một frame truyền, chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới

Stop bit : là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc xuất hiện trong khung truyền, trong AVR USART có thể là 1 hoặc 2

Data bit: data hay dữ liệu cần truyền là thông tin chính mà chúng ta cần http://www.viagrabelgiquefr.com/ gởi và nhận. Data không nhất thiết phải là gói 8 bit, với AVR bạn có thể quy định số lượng bit của data là 5, 6, 7, 8 hoặc 9

Parity bit: Là bit dùng kiểm tra dữ liệu truyền đúng không (một cách tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity).

2) Thanh ghi

2.1) UCSRA ( USART Control and Status Register A ): Thanh ghi điều khiển hoạt động của module USART.

10

RXC/TXC : Bit trạng thái báo quá trình truyền nhận kết thúc , có thể dùng báo hiệu ngắt xảy ra.

UDRE: Bit báo dữ liệu trống  được set có nghĩa thanh ghi UDR đang trống sẵn sàng truyền hoặc nhận .

FE: Bit báo khung truyền có lỗi

DOR: Bit báo dữ liệu tràn

PE: Bit báo Paraty lỗi.

U2X: Bit chỉ định gấp đôi tốc độ truyền.

MPCM: Bit chọn mode đa xử lý (multi – processor ).

USART Data Register –  UDR: Thanh ghi dữ liệu ( bộ đệm ) 8 bit nhận và phát của USART.  Khung truyền  5,6 ,7 bit các bit cao UDR không được sử dụng.

9

2.2) UCSRB (USART Control and Status Register B): Thanh ghi điều khiển hoạt động của module USART.

11

RXCIE (Receive Complete Interrupt Enable) : Bit cho phép ngắt khi quá trình nhận kết thúc.

TXCIE (Transmit Complete Interrupt Enable): Bit cho phép ngắt khi quá trình truyền kết thúc.

UDRIE (USART Data Register Empty Interrupt Enable): Bit cho phép ngắt khi thanh ghi dữ liệu UDR trống.

RXEN Receiver Enable: Là một bit quan trọng điều khiển bộ nhận của USART, đề kích hoạt chức năng nhận dữ liệu bạn phải set bit này

TXEN (Transmitter Enable): Là bit điều khiển bộ phát. Set bit này lên 1 bạn sẽ khởi động bộ phát của USART

UCSZ2 (Chracter size): Bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy định độ dài của dữ liệu truyền/nhận.

RXB8 (Receive Data Bit 8): Là bit dữ liệu 8 bit, AVR có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ chín, RXD8 là bit thứ chín này.

TXB8 (Transmit Data Bit 8): Tương tự như bit RXD8, bit TXB8 cũng đóng vai trò bit thứ 9 truyền thông, nhưng bit này được dùng trong lúc truyền dữ liệu.

2.2) UCSRC (USART Control and Status Register C): Thanh ghi này chủ yếu quy định khung truyền và chế độ truyền. Khi URSEL=1, thanh ghi này được chip AVR hiểu là thanh ghi điều khiển UCSRC, nhưng nếu bit URSEL=0 thì thanh ghi UBRRH sẽ được sử dụng.

12

UMSEL (USART Mode Select): Là bit lựa chọn giữa 2 chế độ truyền thông đồng bộ và không đồng bộ. UMSEL=0, chế độ không đồng bộ được chọn, ngược lại nếu UMSEL=1, chế độ đồng bộ được kích hoạt.

13

UPM1 và UPM0: ( Parity Mode) được dùng để quy định kiểm tra pariry. Nếu UPM1:0=00, parity không được sử dụng (mode này khá thông dụng), UPM1:0=01 không được sử dụng, UPM1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ được sử dụng.

14

USBS (Stop bit Select):Là bit Stop trong khung truyền bằng AVR USART có thể là 1 hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi USBS=1 sẽ có 2 Stop bit được dùng.

15

UCSZ1 và UCSZ2: (Character Size) kết hợp với bit UCSZ2 trong thanh ghi UCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền.

16

UCPOL (Clock Pority): Là bit chỉ cực của xung kích trong chế độ truyền thông đồng bộ. nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên của xung nhịp, nếu UCPOL=1, dữ liệu thay đổi ở cạnh xuống xung nhịp. Nếu bạn sử dụng chế độ truyền thông không đồng bộ, hãy set bit này bằng 0.

UBRRL và UBRRH (USART Baud Rate Register): 2 thanh ghi thấp và cao quy định tốc độ baud.

17

Bảng tính tốc độ Baud.

19

Chương trình truyền thông gửi dữ liệu từ vi điều khiển. 

#include <avr/io.h>

#include <avr/delay.h>

#include <stdlib.h>

char A[9] = {‘A’,’T’,’m’,’e’,’g’,’a’,’8′,’l’,’ ‘};

void uartTx(unsigned char ch)

{

       while(bit_is_clear(UCSRA,UDRE));

       UDR = ch;    

}

void khoitao_uart()

{

       UBRRH = 0;

       UBRRL = 16;

       UCSRA = 0x02;

       UCSRC = (1 << URSEL) | (1<<UCSZ1) | (1<<UCSZ0);

       UCSRB = (1<< TXEN); 

}

void send_data()

{

       for(char i = 0; i<9; i++)

       {

              uartTx(A[i]);

              _delay_ms(1000);

       }     

}

int main(void)

{

       khoitao_uart();

    while(1)

    {

        //TODO:: Please write your application code

              send_data();

    }

}

Video 


Đ/C: Ngách 30/18 Tạ Quang Bửu, Bách Khoa, Hai Bà Trưng, Hà Nội.

Điện Thoại: 043 2151 690 hoặc 0985 11 7969.

Website: linhkien360.vn

SupportTeam: linhkien360hotro@gmail.com

Linh kiện 360 luôn cam kết bán hàng tốt nhất !