You are on page 1of 16

Giao tiếp USART

BÀI THỰC HÀNH 8:

GIAO TIẾP USART

 MỤC ĐÍCH
Qua bài thực hành này, sinh viên có khả năng:
- Thiết kế và lập trình gửi/nhận dữ liệu nối tiếp đồng bộ/không đồng bộ.
- Biết cài đặt các bit thích hợp cho USART.
- Hiểu rõ tính năng của vi mạch MAX232.
- Biết cách điều chỉnh các bit cấu hình của VĐK phù hợp cho các ứng dụng.
- Nâng cao kỹ năng lập trình dùng phần mềm MPLAB C18 để lập trình các ứng dụng
giao tiếp giữa vi điều khiển PIC 18F4550 và máy tính hoặc thiết bị khác.
- Có thể viết chương trình giao tiếp qua cổng COM trên máy tính bằng ngôn ngữ Visual
Basic.
 THIẾT BỊ VÀ PHẦN MỀM SỬ DỤNG
- Máy vi tính.
- Bộ thực hành BASIC-PIC18F TRAINER.
- Bộ “nạp/gỡ rối” PICKIT3.
- Phần mềm MPLAB IDE V8.92.
- Phần mềm MPLAB C18 V3.41.
- Phần mềm nạp chương trình PICKIT3.
- Phần mềm RS232_Interface (được viết bằng Visual Basic).

8.1 THỰC HÀNH 8-1


 Yêu cầu
Viết chương trình để gửi thông báo “HELLO” đến máy tính qua cổng COM với
tốc độ 9600 baud, 8-bit data và 1 stop bit. Quá trình gửi diễn ra chỉ khi PC gửi ký
tự “T” và PIC 18F4550 nhận biết được ký tự này thì mới cho phép gửi dữ liệu đến
PC.

Biên soạn: GV. Lê Quốc Đán 145


Giao tiếp USART

 Module thực hành trên BASIC-PIC18F TRAINER


- Module 5: PERIPHERAL INTERFACE.
- Module 9: PIC 18F4550.
- Module 4: POWER SUPPLY.
- Bộ chuyển đổi PL2303-HXD.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Gạt hai vị trí của công tắc S5 sang vị trí ON.
Kết nối bộ chuyển đổi PL2303-HXD vào cổng COM trên BASIC-PIC18F và
cổng USB trên PC theo hình 8.1.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 8.1.

146 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

USB cable to PC

PL2303
5V

S5 ở ON

5V

Hình 8.1: nối cáp giữa các module của thực hành 8-1

 Viết và biên dịch chương trình


Viết chương trình bằng MPLAB C18
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Author : The Faculty of E-T, Saigon University
Application: Send letters to PC
Osc Mode : 20 MHz, HS, F(osc) = 20MHz/4
Baud rate : 9600, 8-bit data, 1 bit stop
=====================================================*/
#include <P18F4550.h>
#include <usart.h>
#include <delays.h>

//******************************************************
void main(void)
{

Biên soạn: GV. Lê Quốc Đán 147


Giao tiếp USART

unsigned char Command;

OpenUSART( USART_TX_INT_OFF & // configure USART.


USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 31 );
while(1)
{
while (!DataRdyUSART()); // Wait the Rx buffer ready.
Command = getcUSART(); // Receive value byte from COMPORT.
if (Command == 84) // Code 84 = 'T': Tx.
{
while (DataRdyUSART() = 0); // Check transmitter to be
// not busy.
putcUSART('H');
Delay100TCYx(50); // Delay 1 ms.
putcUSART('E');
Delay100TCYx(50);
putcUSART('L');
Delay100TCYx(50);
putcUSART('L');
Delay100TCYx(50);
putcUSART('O');
}
}
}
/*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/

Biên dịch chương trình bằng MPLAB C18.


 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.

148 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

Chạp phần mềm PICKIT3.


Nhập file.hex.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Hướng dẫn sử dụng phần mềm RS232_18F4550 để kiểm tra việc truyền dữ liệu.
 Kết nối cáp USB giữa cổng USB bất kỳ trên PC đến cổng COM trên BASIC-
PIC18F TRAINER.
 Chạy phần mềm truyền dữ liệu qua cổng COM là RS232-18F4550 trên PC
sẽ có giao diện như hình 8.2.

Hình 8.2: giao diện phần mềm RS232-18F4550

Biên soạn: GV. Lê Quốc Đán 149


Giao tiếp USART

 Chọn thứ tự cổng USB đúng trên PC đã được kết nối, và chọn tốc độ baud
truyền dữ liệu theo hình 8.3.

Hình 8.3: chọn đúng cổng USB và tốc độ baud


 Chọn nút Connect để xác thực kết nối. Sau khi đã thực hiện được kết nối
giữa PC và BASIC-PIC18F TRAINER, nút Connect sẽ chuyển qua màu xám
để thông báo kết nối thành công.
 Trong ô nhập dữ liệu “Transmitted data byte”, hãy gõ vào giá trị 84. Sau đó
hãy nhất nút Write và sẽ nhận được kết quả truyền dữ liệu như hình 8.4.

Hình 8.4: kết quả thực hiện truyền dữ liệu


Quan sát và kiểm tra dữ liệu nhận được trên máy tính.

150 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

8.2 THỰC HÀNH 8-2


 Yêu cầu
Viết chương trình để nhận các byte dữ liệu từ máy tính qua cổng COM với tốc
độ 9600 baud, 8-bit dữ liệu và 1 bit stop. Giá trị các byte dữ liệu nhận được sẽ xuất
ra 8 LED được kết nối với PORTD. Quá trình nhận dữ liệu diễn ra trên BASIC-
PIC18F TRAINER chỉ khi PC gửi dữ liệu tới.
 Module thực hành trên BASIC-PIC18F TRAINER
- Module 5: PERIPHERAL INTERFACE.
- Module 2: LEDs AND SWITCHES LAB.
- Module 9: PIC 18F4550.
- Module 4: POWER SUPPLY.
- Bộ chuyển đổi PL2303-HXD.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Gạt hai vị trí của công tắc S5 sang vị trí ON.
Kết nối bộ chuyển đổi PL2303-HXD vào cổng COM trên BASIC-PIC18F và
cổng USB trên PC theo hình 8.2.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 8.5.

Biên soạn: GV. Lê Quốc Đán 151


Giao tiếp USART

USB cable to PC

J26-J4

PL2303
5V

5V

S5 ở ON

5V

Hình 8.5: nối cáp giữa các module của thực hành 8-2
 Viết và biên dịch chương trình
Viết chương trình bằng MPLAB C18
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Author : The Faculty of E-T, Saigon University
Application: Receive the data bytes from PC
Osc Mode : 20 MHz, HS, F(osc) = 20MHz/4
Baud rate : 9600, 8-bit data, 1 bit stop, Asynchronous
Data bytes : Output to 8 LEDs at PORTD
=====================================================*/
#include <P18F4550.h>
#include <usart.h> // Supported by C18.
#include <delays.h> // Supported by C18.
char message;

void main(void)
{
TRISD = 0x00;
// configure USART
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 31 );
while(1)
{

152 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

while (!DataRdyUSART());// Wait the Rx buffer


// ready.
message = getcUSART(); // Receive value byte from
// COMPORT.
PORTD = ~message; // Output recieved value
// to PORTD.
}
}
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/

Biên dịch chương trình bằng MPLAB C18.


 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Chạy phần mềm RS232_18F4550 trên PC
Quan sát và kiểm tra dữ liệu nhận được trên 8 LED ở module 2 của BASIC-
PIC18F.

Biên soạn: GV. Lê Quốc Đán 153


Giao tiếp USART

8.3 THỰC HÀNH 8-3


 Yêu cầu
Viết chương trình để gửi hai thông báo đến đến cổng COM. Công tắc SW0 được
kết nối tới chân RB0, trạng thái điều khiển của công tắc như sau:
SW0 = 0: gửi thông báo “OFF”
SW0 = 1: gửi thông báo “ON”
Tần số dao động 20 MHz, tốc baud là 9600, 8-bit dữ liệu và 1 stop bit. Lưu ý, sự
đổi trạng thái của SW0 chỉ được gửi về PC có một lần duy nhất và sau đó sẽ chờ
trạng thái mới của SW0.
 Module thực hành trên BASIC-PIC18F TRAINER
- Module 5: PERIPHERAL INTERFACE.
- Module 2: LEDs AND SWITCHES LAB.
- Module 9: PIC 18F4550.
- Module 4: POWER SUPPLY.
- Bộ chuyển đổi PL2303-HXD.
 Hướng dẫn
Trình tự thực hiện theo các bước sau:
 Thực hiện đấu nối phần cứng
Tắt nguồn dc (công tắc S3) trên Module 4.
Ghim dây nguồn vào jack J8.
Gạt hai vị trí của công tắc S5 sang vị trí ON.
Kết nối bộ chuyển đổi PL2303-HXD vào cổng COM trên BASIC-PIC18F và
cổng USB trên PC theo hình 8.6.
Thực hiện nối dây giữa các module theo đúng chỉ dẫn của hình 8.6.

154 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

USB cable to PC

J20-J5

PL2303
5V

5V

S5 ở ON

5V

Hình 8.6: nối cáp giữa các module của thực hành 8-3

 Chương trình mẫu


/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Author : The Faculty of E-T, Saigon University
Application: Detect states of switch on BASIC-PIC18F TRAINER
Osc Mode : 20 MHz, HS, F(osc) = 20MHz/4
Baud rate : 9600, 8-bit data, 1 bit stop, Asynchronous
Switch : SW0 connected to RB0
=====================================================*/
#include <P18F4550.h>
#include <usart.h> // Supported by C18.
#include <delays.h> // Supported by C18.

#pragma config PBADEN = OFF

#define SW0 PORTBbits.RB0 // SW0 = RB0.


#define SW0_dir TRISBbits.TRISB0 // Direction of RB0.

void Init_COM(void);

//******************************************************
void main(void)
{
unsigned char State_ON = 1;
unsigned char State_OFF = 1;

ADCON1 = 0x0F; // Disable all AN pins.


SW0_dir = 1; // RB0 is input.

Biên soạn: GV. Lê Quốc Đán 155


Giao tiếp USART

while(1)
{
if (State_ON == 1)
{
if (SW0 == 1)
{
Init_COM();
Delay100TCYx(50);
// Check transmitter to be not busy.
// while (DataRdyUSART() = 0);
putcUSART('O');
Delay100TCYx(50); // Delay 1 ms.
putcUSART('N');
Delay100TCYx(50);
CloseUSART(); // Close COM.
Delay100TCYx(50);
State_OFF = 1;
State_ON = 0; // Exit condition if.
}
}
if (State_OFF == 1)
{
if (SW0 == 0)
{
Init_COM();
Delay100TCYx(50);
// while (DataRdyUSART() = 0);
putcUSART('O');
Delay100TCYx(50);
putcUSART('F');
Delay100TCYx(50);
putcUSART('F');
Delay100TCYx(50);
CloseUSART();
Delay100TCYx(50);
State_ON = 1;
State_OFF = 0; // Exit condition if.
}
}
}
}
//===================================================
// Open COM
void Init_COM()
{
// Configure USART

156 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

OpenUSART( USART_TX_INT_OFF &


USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH, 31 );
}
/*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/

Biên dịch chương trình bằng MPLAB C18.


 Nạp chương trình vào 18F4550
Tắt nguồn dc bằng công tắc nguồn S3 trên Module 4.
Ghim PICKIT3 đúng chiều quy định (không đúng chiều sẽ làm chết
PIC18F4550 trên bộ thực hành) vào đầu cắm ICD là J15 hoặc J16 trên Module
9.
Chạy phần mềm PICKIT3.
Nhập file.hex.
Đặt các bit cấu hình.
CONFIG1 = 0x0C18; CONFIG2 = 0x1E1E
CONFIG3 = 0x8100; CONFIG4 = 0x0081
Xuất ra file.hex để lưu cả các bit cấu hình vào file mã chương trình.
Chọn Program để tiến hành nạp chương trình (có chứa đựng các bit cấu hình)
vào bộ nhớ Flash của PIC 18F4550.
 Kiểm tra chương trình trên BASIC-PIC18F TRAINER
Rút kit nạp PICKIT3 ra khỏi hệ thống.
Bật công tắc nguồn S3 trên Module 4.
Chạy phần mềm RS232_18F4550 trên PC
Thay đổi vị trí công tắc SW0 (vị trí S2 trên bộ thí nghiệm), quan sát và kiểm tra
dữ liệu nhận được trên PC.

Biên soạn: GV. Lê Quốc Đán 157


Giao tiếp USART

 Luyện tập 8-1:


 Yêu cầu:
Làm lại bài thực hành 8-1 nhưng với tốc độ baud là 4800.
 Viết kết quả thực hiện vào báo cáo thực hành.
 Luyện tập 8-2:
 Yêu cầu:
Từ BASIC-PIC18F TRAINER, hãy thiết kế hệ thống gửi dữ liệu với hai tốc độ
truyền dữ liệu nối tiếp là “Normal Speed” và “High Speed” tới máy tính. Công tắc
được kết nối tới RB0 để quyết định tốc độ truyền:
SW = 0: tốc độ 9600 baud, 8-bit data, 1 stop bit; và gửi “Normal Speed”
SW = 1: tốc độ 38400 baud, 8-bit data, 1 stop bit; và gửi “High Speed”
 Viết kết quả thực hiện vào báo cáo thực hành.
 Luyện tập 8-3:
 Yêu cầu:
Từ BASIC-PIC18F TRAINER, hãy thiết kế ứng dụng thực hiện cả hai bài thực
hành 8-1 và 8-2 cùng lúc.
Đầu tiên là nhận dữ liệu từ PC để điều khiển 8 LED, sau đó từ bộ thí nghiệm
sẽ dữ liệu về PC.
 Viết kết quả thực hiện vào báo cáo thực hành.

8.4 HƯỚNG DẪN LẬP TRÌNH VISUAL BASIC


Sau đây là phần hướng dẫn lập trình truyền dữ liệu qua cổng COM bằng Visual Basic
2013.
Đầu tiên thiết kế có giao diện như hình 8.7.

158 Biên soạn: GV. Lê Quốc Đán


Giao tiếp USART

Hình 8.7: thiết kế giao diện trong Visual Basic 2013


Sau đây là đoạn chương trình được viết bằng Visual Basic 2013 thực hiện việc truyền
và nhận dữ liệu từ PC:
Imports System
Imports System.IO
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel

Public Class Form1


Dim MyPort As Array
Delegate Sub SetTextCallBack(ByVal [text] As String) 'String
Friend binaryReader1 As BinaryReader
Friend binaryWriter1 As BinaryWriter
Dim serialPortStream As Stream

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load


MyPort = IO.Ports.SerialPort.GetPortNames()
SelectComCBX.Items.AddRange(MyPort)
WriteBTN.Enabled = False
End Sub

Private Sub ConnectBTN_Click(sender As Object, e As EventArgs) Handles


ConnectBTN.Click
SerialPort1.PortName = SelectComCBX.Text
SerialPort1.BaudRate = BaudCBX.Text
SerialPort1.Open()

ConnectBTN.Enabled = False
WriteBTN.Enabled = True
DisConnectBTN.Enabled = True
End Sub

Private Sub WriteBTN_Click(sender As Object, e As EventArgs) Handles WriteBTN.Click


Dim x_sent As Byte
x_sent = InputRTBX.Text 'x_sent = InputRTBX.Text & vbCr
serialPortStream = SerialPort1.BaseStream
binaryReader1 = New BinaryReader(serialPortStream)
binaryWriter1 = New BinaryWriter(serialPortStream)

Biên soạn: GV. Lê Quốc Đán 159


Giao tiếp USART

binaryWriter1.Write(x_sent)
End Sub

Private Sub DisConnectBTN_Click(sender As Object, e As EventArgs) Handles


DisConnectBTN.Click
SerialPort1.Close()

ConnectBTN.Enabled = True
WriteBTN.Enabled = False
DisConnectBTN.Enabled = False
End Sub

Private Sub SerialPort1_DataReceived(sender As Object, e As


SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ReceivedText(SerialPort1.ReadExisting()) 'SerialPort1.ReadByte()
End Sub
Private Sub ReceivedText(ByVal [text] As String) 'ByVal [text] As byte
If Me.OutputRTBX.InvokeRequired Then
Dim x As New SetTextCallBack(AddressOf ReceivedText)
Me.Invoke(x, New Object() {(text)})
Else
Me.OutputRTBX.Text &= [text]
End If
End Sub

Private Sub ExitBTN_Click(sender As Object, e As EventArgs) Handles ExitBTN.Click


Close()
End Sub
End Class

160 Biên soạn: GV. Lê Quốc Đán

You might also like