Professional Documents
Culture Documents
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).
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
//******************************************************
void main(void)
{
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.
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)
{
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
void Init_COM(void);
//******************************************************
void main(void)
{
unsigned char State_ON = 1;
unsigned char State_OFF = 1;
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
ConnectBTN.Enabled = False
WriteBTN.Enabled = True
DisConnectBTN.Enabled = True
End Sub
binaryWriter1.Write(x_sent)
End Sub
ConnectBTN.Enabled = True
WriteBTN.Enabled = False
DisConnectBTN.Enabled = False
End Sub