Chuong 4

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 23

TRƯỜNG ĐẠI HỌC PHENIKAA

KHOA ĐIỆN ĐIỆN TỬ

KỸ THUẬT VI XỬ LÝ VÀ VI
ĐIỀU KHIỂN

Chương 4: Truyền thông UART trên Vi điều


khiển

GIẢNG VIÊN: ThS. ĐÀO TÔ HIỆU

Hà Nội, 01/2022
GIỚI THIỆU
UART (Universal Asynchronous Receiver / Transmitter) là bộ
truyền nhận dữ liệu nối tiếp không đồng bộ.
•Baudrate : tốc độ truyền bit – số bit truyền đi trong 1 giây
(bps-Kbps).
•Data Frame: khung truyền dữ liệu, gồm các data bits
thường có độ dài 5-9 bits.
•Quá trình truyền UART được điều khiển bởi 3 thành ghi:
thanh ghi TXSTA (truyền), RCSTA (nhận), BAUDCTL (tốc độ
truyền).

2
GIAO TIẾP UART

Giao tiếp giữa giữa 2 thiết bị Giao tiếp giữa 2 thiết bị khác
tương đồng về điện áp logic biệt về điện áp logic
3
UART VÀ CHUẨN RS232

4
UART VÀ CHUẨN RS232

- RS232 các mức logic được định nghĩa khác với logic
TTL. Mức 1: +3 đến +15 V, mức 0 từ -3 đến -15 V.
- Cổng COM này thường được chia thành 2 loại là 9
chân hoặc 25 chân

5
6
SƠ ĐỒ KHỐI BỘ TRUYỀN DỮ LIỆU

7
THANH GHI ĐIỀU KHIỂN UART (TRUYỀN)
❑ Bit 0: TX9D =>bit địa chỉ/dữ liệu hoặc bit chẵn lẻ.
❑ Bit 1: TRMT => bit trạng thái Thanh ghi dịch truyền (TSR). 1 =
TSR trống, 0 = TSR đủ
❑ Bit 2: BRGH => bit Chọn tốc độ truyền cao CHỈ CHO hoạt
động ở chế độ Không đồng bộ. BRGH=1 (tốc độ cao),
BRGH=0 (tốc độ thấp)
❑ Bit 3: SENDB Gửi ký tự ngừng truyền (chế độ không đồng bộ).
SENDB = 1: Gửi ngắt đồng bộ cho lần truyền tiếp theo
SENDB = 0: Hoàn thành gửi ngắt đồng bộ

8
THANH GHI ĐIỀU KHIỂN UART (TRUYỀN)
❑ Bit 4: SYNC là bit chọn chế độ EUSART
SYNC = 1: chế độ đồng bộ
SYNC = 0: chế độ bất đồng bộ
❑ Bit 5: TXEN=1/0 tương đương cho phép truyền/cấm truyền.
❑ Bit 6 TX9 : TX9=1 truyền data 9 bit, ngược lại truyền data 8 bit
được sử dụng. Bit thứ 9 trong chế độ truyền 9 bit thường được
sử dụng làm bit chẵn lẻ.
❑ Bit 7 CSRC : Bit chọn nguồn đồng hồ, không sử dụng ở chế độ
UART.

9
SƠ ĐỒ KHỐI BỘ NHẬN DỮ LIỆU

10
THANH GHI ĐIỀU KHIỂN UART (NHẬN)

❑ Bit 7: SPEN = 1/0: cho phép/cấm cổng nối tiếp (cấu hình
chân truyền và nhận dữ liệu là chân truyền dữ liệu nối tiếp)
Bit 6: RX9 = 1/0: nhận 9 data bit/8 bit
❑ Bit 5: SREN là bit nhận dữ liệu (chế độ đồng bộ)
❑ Bit 4: CREN là bit cho phép nhận dữ liệu liên tục
Chế độ bất đồng bộ: CREN = 1/0: cho phép/cấm
Chế độ đồng bộ: CREN=1: cho phép cho đến khi bit CREN bị
xóa, CREN=0 không cho phép.

11
THANH GHI ĐIỀU KHIỂN UART (NHẬN)
❑ Bit 3: ADDEN quan tâm khi ở chế độ không đồng bộ
truyền data 9 bits. ADDEN = 1: cho phép bộ xác định địa
chỉ, cho phép ngắt và nạp bộ đệm nhận dữ liệu khi bit
RSR<8> = 1. ADDEN = 0: không cho phép bộ xác định địa
chỉ, tất cả byte được nhận và bit thứ 9 có thể dùng như
parity bit.
❑ Bit 2: FERR=1 báo lỗi khung truyền. FERR=0 không có lỗi
❑ Bit 1: OERR = 1: có lỗi tràn/không lỗi.
❑ Bit 0: RX9D là bit thứ 9 của dữ liệu nhận được, cũng có
thể được dùng như parity bit.

12
THANH GHI TỐC ĐỘ TRUYỀN
❑ Bit 7: Quan tâm khi ở chế độ không đồng bộ. ABDOVF=1/0
tràn timer tạo tốc độ baud tự động/không tràn.
❑ Bit 6: Quan tâm khi ở chế độ không đồng bộ. RCIDL=1 bộ
nhận đang ngừng. RCIDL = 0 đã nhận start bit và bộ nhận
đang nhận.
❑ Bit 4: Chế độ đồng bộ:
SCKP=1: dữ liệu được dịch vào lúc sườn lên xung clock
SCKP=0: dữ liệu được dịch vào lúc sườn xuống xung clock
Chế độ bất đồng bộ:
SCKP = 1: truyền dữ liệu đảo đến chân RB7/TX/CK
SCKP = 0: truyền dữ liệu không đảo đến chân RB7/TX/CK

13
THANH GHI TỐC ĐỘ TRUYỀN

❑ Bit 3: BRG16=1/0: dùng bộ tạo tốc độ truyền 16bits/bits


❑ Bit 1: Quan tâm khi ở chế độ không đồng bộ.
WUE=1: bộ nhận chờ đến sườn xuống (không nhận ký tự
nếu RCIF=1), WUE sẽ tự động xóa sau khi RCIF = 1.
WUE = 0: bộ nhận hoạt động bình thường.
❑ Bit 0: ABDEN=1/0 cho phép/cấm hoạt động với tốc độ baud
tự động (chế độ bất đồng bộ).

14
TÍNH TOÁN TỐC ĐỘ BAUD

Ví dụ: Truyền với 9600 baud ở chế độ không đồng bộ 8


bit, tần số thạch anh của PIC16F887 là 20MHz.
Giải: Cấu hình: SYNC=0 (chế độ không đồng bộ),
BGR16=0 (truyền data 8 bit), BGRH=1.
𝐹𝑜𝑠𝑐 20000000
n= -1 = -1 ≈ 129.02≈ 129
16∗𝑏𝑎𝑢𝑑𝑟𝑎𝑡𝑒 16∗9600
𝐹𝑜𝑠𝑐 20000000
=> Calculated Baudrate = = ≈9615
16∗(𝑛+1) 16∗(129+1)
9615−9600
=> Error = ≈0.16%
9615 15
LẬP TRÌNH UART
❑ Nhận dữ liệu:getc(), gets()
Ví dụ: char ch = getc(); char str[50]; gets(str);
❑ Truyền dữ liệu:
• putc(): Truyền ký tự đặt trong nháy đơn.VD: putc(‘H’);
• printf(): Truyền chuỗi ký tự đặt trong nháy kép.
Ví dụ: printf(“vidieukhien”);
• Truyền tham số:
%c - Định dạng ký tự (kiểu char).
%d - Định dạng số nguyên (kiểu int).
%ld - Định dạng số nguyên dài (kiểu long).
%f - Định dạng số thực đơn (kiểu float).
%lf - Định dạng số thực đôi (kiểu double).
%s - Định dạng chuỗi ký tự (kiểu char*).
Ví dụ: printf(“i =%lf”,125); printf(“i =%.3f”,12.335);
printf(“i =%f”,12.5);
16
LẬP TRÌNH UART

#include <16F887.h> #include <16F887.h>


#device ADC=10 #device ADC=10
#FUSES HS #use delay(crystal=20000000)
#use delay(crystal=20000000) #use
#use rs232(baud=9600,parity=N,xmit=PIN_C6,
rs232(baud=9600,parity=N,xmit=PIN_C6,rc rcv=PIN_C7,bits=8,stream=PORT1,FORCE
v=PIN_C7,bits=8,stream=PORT1,FORCE_ _SW)
SW) void main()
void main() {
{
while(TRUE)
while(TRUE) {
{ char ch[50];
char ch = getc(); gets(ch);
printf("receive: %c \r\n",ch); printf("receive: %s\r\n",ch);
} }
} }

Nhận 1 ký tự và truyền Nhận chuỗi ký tự và truyền

17
GHÉP NỐI PIC VỚI MAX232

18
GHÉP NỐI PIC VỚI CH340

19
GHÉP NỐI PIC VỚI PL2303

20
GHÉP NỐI PIC VỚI ESP8266

21
GHÉP NỐI PIC VỚI BLUETOOTH

22

You might also like