Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 22

ĐH Sư Phạm Kỹ Thuật TP.

Hồ Chí Minh

Môn học

Thực tập Vi Điều Khiển


Tuần 14 – 15
EUSART

Các chân liên quan đến chức năng giao tiếp nối tiếp :

Các chân truyền nhận UART


EUSART

Khái niệm về giao tiếp nối tiếp bất đồng bộ :


 Các thuật ngữ trong truyền nhận nối tiếp bất đồng bộ :
Thuật ngữ USART trong tiếng anh gọi là :Universal Synchronous và Asynchronous serial Receiver and
Transmitter, nghĩa là bộ truyền nối tiếp đồng bộ và bất đồng bộ. USART hay UART cần phải kết hợp với một thiết
bị chuyển đổi điện áp để tạo nên một chuẩn giao tiếp nào đó. Ví dụ chuẩn Rs232(COM Port ) trên máy tính là sự
kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thường theo mức điện áp: mức
high là +5V, mức slow là 0V. Trong khi đó tín hiệu theo chuẩn RS232 trên máy tính thường là -12v cho mức high,
và +12v cho mức slow .

Cấu trúc một frame truyền


EUSART

 Truyền thông nối tiếp :


Giả sử muốn truyền một dữ liệu 8-bit giữa hai vi điều khiển với nhau, chúng ta có thể nghĩ đến cách đơn giản nhất là
kết nối một PORT (8 bit) của mỗi vi điều khiển với nhau, mỗi đường trên PORT sẽ đảm nhiệm việc truyền/nhận một bit
dữ liệu. Đây gọi là cách giao tiếp song song , cách này đơn giản và truyền nhận dữ liệu cũng không qua bất cứ một giải
thuật truyền nhận nào, và tốc độ truyền nhận cũng rất nhanh.Tuy nhiên, nhược điểm của cách truyền này là số đường
truyền nhiều, dữ liệu truyền càng lớn thì số đường truyền càng nhiều, do đó hệ thống truyền nhận song song thường rất
cồng kềnh và kém hiệu quả. Ngược lại trong truyền thông nối tiếp, dữ liệu được truyền theo từng bit trên một đường
truyền, chính vì vậy dữ liệu cho dù có lớn thì chúng ta cũng chỉ cần có một đường truyền duy nhất .

Sơ đồ truyền nhận 8 bit theo giao thức song song và nối tiếp
EUSART
Các thông số cơ bản trong truyền nhận nối tiếp :

 Baud rate (tốc độ baud ): để truyền nhận nối tiếp xảy ra thành công thì các thiết bị phải thống nhất với nhau về khoảng
thời gian giành cho một bit truyền, hay nói cách khác là tốc độ truyền phải được cài đặt giống nhau, tốc độ này gọi là
tốc độ baud. Tốc độ baud là số bit truyền trong 1 giây. Ví dụ nếu tốc độ baud là 9600 thì thời gian giành cho một bit
truyền là 1/9600(s).

 Frame (khung truyền ) : Khung truyền quy định về số bit trong mỗi lần truyền , các bit báo như start , stop , các bit
kiểm tra như parity , ngoài ra số lượng các bit trong một dữ liệu cũng được quy định bởi khung truyền . Hình trên mô tả
ví dụ về một khung truyền theo UART, khung truyền này được bắt đầu bằng một start bit , tiếp theo là 8 bit, sau đó là
1bit parity dùng để kiểm tra dữ liệu và cuối cùng là 2 bits stop .

 Start bit : start bit là bit đầu tiên được truyền trong một frame , bit này có nhiệm vụ 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. Start bit là bit bắt buộc phải có trong một khung truyền .

 Data : là số dữ liệu mà chúng ta cần phải truyền nhận , data có thể là gói 8 bit hay 9 bit tùy theo yêu cầu truyền nhận
mà ta quy định .Trong truyền thông nối tiếp UART , bit có trọng số nhỏ nhất LSB(Least significant bit ) sẽ được truyền
trước, sau đó bit có trọng số lớn nhất sẽ được truyền sau cùng MSB (Most signnificant bit ).
EUSART
Các thông số cơ bản trong truyền nhận nối tiếp :

 Parity bit : parity dùng để kiểm tra dữ liệu truyền có đúng không, có hai loại parity là parity chẳn (event parity )
và parity lẻ (odd parity ) .
 Stop bit : stop bit là một hoặc các bit báo cho thiết bị rằng các bit đã được gởi xong. Sau khi nhận được stop bit,
thiết bị nhận sẽ tiến hành kiển ra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bit là bit bắt buộc
xuất hiện trong khung truyền .
EUSART
Sơ đồ khối bộ truyền UART
EUSART

 Nguyên tắc hoạt động :

Dữ liệu cần truyền được đặt vào thanh ghi TXREG, baudrate được tạo ra, khi bit TXEN được gán bằng một, dữ
liệu từ thanh ghi TXREG đi vào thanh ghi TSR đồng thời baud rate tác động đến thanh ghi TSR, đẩy dữ liệu cần
truyền ra bộ điệm, sau đó xuất ra chân TX và đi ra ngoài .

Bit TXIF dùng để báo trạng thái trong thanh ghi TXREG, nếu có dữ liệu trong thanh ghi TXREG thì bít này sẽ có
tín hiệu là 1, ngược lại sau khi dữ liệu đã được truyền xuống thanh ghi TSR thì bít TXIF được xóa về không. Tương
tự như bit TXIF, bit TRMT dùng để báo trạng thái của thanh ghi TSR. Quá trình truyền cũng có thể tạo ra ngắt truyền,
mỗi khi dữ liệu truyền đã kết thúc bằng việc đặt bit TXIF=1.
Ngoải ra bộ truyền còn có thể truyền với chế độ 9 bit bằng việc cho bit TX9 =1, và dữ liệu của bit thứ 9 do bit
TX9D quy định .
EUSART
 Thanh ghi quy định chế độ truyền :

SYNC :bit lựa chọn chế độ truyền .


Các bit liên quan đến chế độ truyền nhận bất đồng bộ. − 1:Truyền nhận chế độ đồng bộ.
TX9 :bit cho phép truyền nhận chế độ 9-bit − 0:Truyền nhận chế độ bất đồng bộ.
− 1:Cho phép hoạt động với chế độ 9 bit
BRGH: bit lựa chọn chế độ baud rate
− 0:Hoạt động với chế độ 8bit − 1: tốc độ cao (bất đổng bộ )
TXEN:bit cho phép truyền UART − 0:tốc độ thấp (bất đồng bộ)
− 1:Cho phép truyền.
TRMT : bit hiển thị trạng thái thanh ghi truyền
− 0:Không cho phép truyền . − 1:Thanh ghi TSR trống .
− 0:Thanh ghi TSR có dữ liệu .
TX9D : Dữ liệu bit thứ 9 trong chế độ truyền 9 bit
EUSART

Các bit khởi tạo ngắt truyền UART :


TXIF : cờ ngắt , sau khi thanh ghi TXREG truyền dữ liệu xuống thanh ghi TSR thì bit này tự
động bằng 1 .
TXIE : bit cho phép ngắt truyền , để tạo ra ngắt truyền ta cần phải cho phép bit này bằng 1 .
PEIE : bit cho pháp ngắt ngoại vi.
GIE : bit cho phép ngắt toàn cục.
EUSART

*Bước 6: Gởi dữ liệu cần truyền của bit thứ 9


Các bước khởi tạo chế độ truyền UART :
(nếu sử dụng truyền nhận 9 bit ):
*Bước 1 : Khởi tạo thanh ghi SPBRGH, SPBRG và các bit BRGH
TX9D=…..;
và BRG16 để tạo ra baud rate cần thiết .
*Bước 7 : Gởi dữ liệu cần truyền vào thanh ghi 8
*Bước 2 : Cho phép giao tiếp bất đồng bộ :
bit:
SYNC=0;
TXREG=…..;
SPEN=1;
*Bước 3 : Cho phép chế độ 9 bit (nếu sử dụng truyền nhận 9 bit)
:
TX9=1;
*Bước 4 : Cho phép truyền :
TXEN=1;
*Bước 5 : Nếu sử dụng ngắt thì cần phải khởi tạo :
TXIE=1;
PEIE=1;
GIE=1;
EUSART
Các thanh ghi điều khiển nhận UART:
EUSART

Nguyên tắc hoạt động :


Khi có dữ liệu được truyền tới chân RX, nếu bit SPEN được cho phép, thì dữ liệu sẽ được đồng bộ với khối tạo xung
, vì baund rate giữa hai khối truyền nhận bằng nhau, nên xung baud mang dữ liệu từng bit vào thanh ghi RSR , khi một
frame truyền hoàn tất (dấu hiệu từ bit stop), thì dữ liệu được truyền xuống thanh ghi RCREG, bit thứ 9 được truyền
xuống RX9D (nếu sử dụng chế độ 9 bit), nếu trên đường truyền có lỗi thì các bit OERR, FERR sẽ được hiển thị để báo.
Quá trình nhận củng có thể tạo ra ngắt sau khi kết thúc một frame truyền nhận, bằng việc làm cho bit RCIF =1.
 

Thanh ghi quy định chế độ nhận :


EUSART
CREN : bit cho phép nhận liên tục
Các bit liên quan đến chế độ truyền nhận bất đồng bộ.
− 1: Cho phép .
SPEN : Bit cho phép khởi tạo cổng nối tiếp :
− 0: Không cho phép .
− 1:Cho phép cổng nối tiếp
ADDEN : bit cho phép phát hiện địa chỉ (sử dụng ở chế độ
− 0: Không cho phép cổng nối tiếp
truyền nhận bất đồng bộ 9 bit )
RX9: Bit cho phép nhận 9 bit
− 1:Cho phép phát hiện địa chỉ, cho phép ngắt và tải bộ đệm
− 1: Chế độ nhận 9 bit
nhận khi RSR<8> được set.
− 0: Chế độ nhận 8 bit
− 0:Không cho phép phát hiện địa chỉ, tất cả byte được nhận
và bit thứ 9 dùng làm bit parity
Các bit khởi tạo ngắt nhận UART : FERR : bit báo lỗi frame
RCIF : cờ ngắt , sau khi thanh ghi RCREG nhận được − 1: Có lỗi
dữ liệu thì bit này tự động bằng 1. − 0:Không có lỗi .
RCIE : bit cho phép ngắt nhận, để tạo ra ngắt nhận ta OERR : lỗi OVERRUN
cần phải cho phép bit này bằng 1. − 1:Có lỗi (có thể xóa bằng việc xóa bít CREN)
PEIE : bit cho pháp ngắt ngoại vi. − 0:Không lỗi .
GIE : bit cho phép ngắt toàn cục. RX9D : Bit chứa dữ liệu nhận của bit thứ 9
EUSART
Các bước khởi tạo chế độ nhận UART :
*Bước 5 : Cho phép nhận dữ liệu :
*Bước 1 : Khởi tạo thanh ghi SPBRGH, SPBRG và các bit
CREN=1;
BRGH và BRG16 để tạo ra baund rate cần thiết .
*Bước 6 : Cờ ngắt RCIF = 1 khi dữ liệu chuyển đổi
*Bước 2 : Cho phép giao tiếp bất đồng bộ :
từ RSR tới bộ điệm nhận. Ngắt sẽ được tạo ra nếu
SYNC=0;
RCIE=1.
SPEN=1;
*Bước 7 : Đọc thanh ghi RCSTA để phát hiện các
*Bước 3 : Nếu sử dụng ngắt nhận :
lỗi trong quá trình truyền nhận.
RCIE=1;
*Bước 8 : Nhận 8 bit dữ liệu từ bộ điệm nhận bằng
PEIE=1;
cách đọc thanh ghi RCREG.
GIE=1;
*Bước 9 : Nếu có lỗi overrun xảy ra, xóa cờ OERR bằng
*Bước 4 : Cho phép chế độ 9 bit bằng (nếu sử dụng
cách xóa bit CREN.
truyền nhận 9 bit ) :
RX9=1;
EUSART
Công thức tính tốc độ baud rate :
Trong đó :
FOSC là tần số hoạt động của vi điều khiển .
n=SPBRGH:SPBRG
Ví dụ : Tính tốc độ baud 9600 , với điều kiện các bit khởi tạo như sau :
SYNC=0 ; BRG16=1; BRGH=1; Fosc= 4Mhz
Khi đó theo bảng ta có : 9600= 
n=103
Do đó : SPBRG=103 , SPBRGH=0;
EUSART
Bài 1 :Viết chương trình truyền nhận UART của vi điều khiển với máy tính , điều khiển hoạt động của led theo
yêu cầu sau :
Vi điều khiển nhận một số từ máy tính và điều khiển hai led RE1 va RE2 với 4 trạng thái
 Nhận số 1: Hai led tắt , gởi lên máy tính chuỗi "Number 1".
 Nhận số 2: Hai led sáng, gởi lên máy tính chuỗi "Number 2".
 Nhận số 3: Led RE1 sáng,RE2 tắt, gởi lại máy tính chuỗi "Number 3".
 Nhận số 4: Led RE1 tắt ,RE2 sáng, gởi lại máy chuỗi "Number 4".
 Số khác : Hai led cùng chớp tắt với chu kỳ _delay(100000);gởi lại máy tính chuỗi "Other numbers".
Vi điều khiển sử dụng thạch anh nội 4MHz, tốc độ baund : 9600 , truyền nhận 8 bit .
EUSART
{
switch(data)
#include <htc.h> {
#include <stdio.h> case 1:
__CONFIG(…); RE1=RE2=…….;send_string("Number 1\r"); //Hai led tắt
void send_string(char *s); break;
void send_char(char c); case 2:
RE1=RE2=…….;send_string("Number 2\r"); //Hai led sáng
char data ;
break;
void main()
case 3:
{ RE1=0;RE2=…….;
ANS6=ANS7=…….;TRISE1=TRISE2=…….; //Khởi tạo RE1,RE2 là ngõ ra số send_string("Number 3\r"); //RE1 tắt , RE2 sáng
//Cấu hình truyền UART break;
TXEN=…….; //Cho phép truyền case 4:
SYNC=…….; RE1=…….;RE2=…….;
//Cấu hình nhận UART send_string("Numer 4\r"); //RE2 tắt , RE1 sáng
SPEN =…….; //Cấu hình chân RX,TX ở chế độ truyền nhận UART break;
CREN=…….; default:
//Khởi tạo tốc độ baund 9600=Fosc/(4*(n+1)) với n=SPBRGH:SPBRG RE1^=…….;RE2=RE1;
//Hai led cùng chớp tắt.
BRG16=1; //(--------1----------)
send_string("Other numbers\r");
BRGH=1; //(--------2----------)
break;
SPBRG=103;SPBRGH=0; //(--------3----------) }
//Khởi tạo ngắt nhận _delay(100000);
RCIE =…….; }
PEIE =…….; }
GIE =…….;
while(1)
EUSART

void interrupt isr()


{
if(RCIF)
{
data=RCREG;
}
}
void send_char(char c)
{
while(!TXIF);
TXREG=c;
}
void send_string(char *s)
{
while(*s)
send_char(*s++);
}
EUSART
Bài 2 : Làm lại bài 1 với tốc độ baud 14400

Bài 3 : Viết chương trình truyền nhận UART của vi điều khiển với máy tính, hiển thị kết quả lên lcd theo sơ đồ
phần cứng
Yêu cầu : Truyền một chuỗi số (tối đa 5 chữ số xxxxx) từ máy tính xuống vi điều khiển, vi điều khiển hiển thị số vừa
nhận được từ máy tính lên lcd, đồng thời gởi lại máy tính số vừa nhận cộng thêm 10. Thạch anh 4Mhz hoặc 20Mhz,
baud 9600, truyền nhận 8-bit, phần cứng kết nối lcd theo thư viện lcd.h .
EUSART
Bài 4 : Viết chương trình truyền nhận giữa vi điều khiển và máy tinh với các yêu cầu sau :
 Máy tính truyền xuống vi điều khiển kí tự ‘S’ , động cơ start.
 Máy tính truyền xuống vi điều khiển kí tự ‘P’ , động cơ stop.
 Máy tính truyền xuống vi điều khiển kí tự ‘B-xxx’ , động cơ quay thuận, với xxx là độ rộng xung PWM 8 bit .
 Máy tính truyền xuống vi điều khiển kí tự ‘F-xxx’ , động cơ quay nghịch, với xxx là độ rộng xung PWM 8 bit .
EUSART

Bài 5 : Viết chương trình truyền nhận giữa máy tính và vi điều khiển với yêu cầu sau : máy tính hiển thị vận tốc
động cơ trên Terminal, baud 9600, Fosc = 4Mhz hoặc 20Mhz.

You might also like