TRƯỜNG ĐẠI HỌC BÁCH KHOA TP. HCM
Bài tập lớn
ĐỀ BÀI
Sử dụng chuẩn truyền RS232, thiết kế mạch giao tiếp giữa cổng COM máy tính và vi điều khiển.
Máy tính: Viết chương trình xuất/nhập dữ liệu để điều khiển các cơ cấu chấp hành được gắn với
board vi điều khiển.
1 KỸ THUẬT GIAO TIẾP MÁY TÍNH
Sinh viên :
!" #$%
&'()#$%
Lớp : CK07CD2
Vi điều khiển: Vi điều khiển được gắn với 01 màn hình
LCD và 01 bàn phím 16 nút.
Nguyên tắc hoạt động:
1. Khi user gõ vào 1 chữ hoặc 1 chuỗi kí tự trên máy tính và bấm nút Send thì chữ hoặc chuỗi kí
tự này sẽ hiện lên trên LCD.
2. Khi user nhấn 1 phím bất kì trên bàn phím 16 nút thì kết quả phím nào được nhấn sẽ được hiển
thị trên LCD và trên giao diện của chương trình trên máy tính.
PHẦN THỰC HIỆN
1. Cấu trúc cổng nối tiếp
Cổng nối tiếp được sử dụng để truyền dữ liệu hai chiều giữa máy tính và ngoại vi, có các ưu
điểm sau:
- Khoảng cách truyền xa hơn truyền song song.
2 KỸ THUẬT GIAO TIẾP MÁY TÍNH
- Số dây kết nối ít.
- Có thể truyền không dây dùng hồng ngoại.
4 KỸ THUẬT GIAO TIẾP MÁY TÍNH
Sơ đồ chân cổng nối tiếp
Cổng COM có hai dạng: đầu nối DB25 (25 chân) và đầu nối DB9 (9 chân) mô tả như hình trên.
Ý nghĩa của các chân mô tả như sau:
2. Truyền thông giữa hai nút
Các sơ đồ khi kết nối dùng cổng nối tiếp:
5 KỸ THUẬT GIAO TIẾP MÁY TÍNH
Kết nối đơn giản trong truyền thông nối tiếp
Khi thực hiện kết nối như trên, quá trình truyền phải bảo đảm tốc độ ở đầu phát và thu giống
nhau. Khi có dữ liệu đến DTE, dữ liệu này sẽ được đưa vào bộ đệm và tạo ngắt. Ngoài ra, khi
thực hiện kết nối giữa hai DTE, ta còn dùng sơ đồ sau:
Kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay
Khi DTE1 cần truyền dữ liệu thì cho DTR tích cực tác động lên DSR của DTE2 cho biết sẵn
sàng nhận dữ liệu và cho biết đã nhận được sóng mang của MODEM (ảo). Sau đó, DTE1 tích
cực chân RTS để tác động đến chân CTS của DTE2 cho biết DTE1 có thể nhận dữ liệu. Khi thực
hiện kết nối giữa DTE và DCE, do tốc độ truyền khác nhau nên phải thực hiện điều khiển lưu
lượng. Quá trinh điều khiển này có thể thực hiện bằng phần mềm hay phần cứng. Quá trình điều
khiển bằng phần mềm thực hiện bằng hai ký tự Xon và Xoff. Ký tự Xon được DCE gởi đi khi
rảnh (có thể nhận dữ liệu). Nếu DCE bận thì sẽ gởi ký tự Xoff. Quá trình điều khiển bằng phần
cứng dùng hai chân RTS và CTS. Nếu DTE muốn truyền dữ liệu thì sẽ gởi RTS để yêu cầu
truyền, DCE nếu có khả năng nhận dữ liệu (đang rảnh) thì gởi lại CTS.
3. Truy xuất trực tiếp thông qua cổng:
6 KỸ THUẬT GIAO TIẾP MÁY TÍNH
Các cổng nối tiếp trong máy tính được đánh số là COM1, COM2, COM3, COM4 với các địa chỉ
như sau:
Một số giá trị thông dụng xác định tốc độ truyền cho như sau:
SBCB (Set Break Control Bit) =1: cho phép truyền tín hiệu Break (=0) trong khoảng thời gian
lớn hơn một khung
PS (Parity Select):
STB (Stop Bit) = 0: 1 bit stop, =1: 1.5 bit stop (khi dùng 5 bit dữ liệu) hay 2 bit stop (khi dùng 6,
9 KỸ THUẬT GIAO TIẾP MÁY TÍNH
{
ram[vitri]=value;
}
#INT_TIMER1
void SendData()
{
char c;
fprintf("Online\n\r");
putc(c);
delay_ms(100);
}
#INT_RDA
VOID RECEVICE()
{
char y;
y=getc();
fprintf(y);
}
void quet()
{ int b=10;
while(1)
{
output_d(0);
output_high(pin_D5);
if (input(PIN_D1)) {key=1;break;}
if (input(PIN_D2)) { key=4;break;}
if (input(PIN_D3)) { key=7;break;}
if (input(PIN_D4)) { key=11;break;}
output_d(0);
5. Thiết kế giao diện trên máy tính
Ta sử dụng ngôn ngữ lập trình C# để thiết kế giao diện.
Đầu tiên, ta tạo 1 giao diện (form) như sau:
Và đây là code của giao diện trên:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace RS232
{
11 KỸ THUẬT GIAO TIẾP MÁY TÍNH
public partial class Form1 : FORM
{
private int[] values = new int[200];
private int count = 0;
private int maxVal = 200;
public Form1()
{
InitializeComponent();
}
private void Form1_Load_1(object sender, EventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
serialPort1.Open();
private void btnClear_Click(object sender, EventArgs e)
{
txtRead.Text = " ";
}
12 KỸ THUẬT GIAO TIẾP MÁY TÍNH
// hàm ve do thi
private void redraw()
{
Graphics g = panel1.CreateGraphics();
int width = panel1.Width;
int height = panel1.Height;
int space = 10;
g.FillRectangle(Brushes.White, 0, 0, width, height);
g.DrawRectangle(Pens.Black, space, space, width - space * 2,
height - space * 2);
double yFactor = (height - space) / (maxVal + 1.0f);
g.SmoothingMode = SmoothingMode.HighQuality;
float x, y, lastX, lastY;
y = (float)((maxVal - (float)Int32.Parse(txtWrite.Text)) *
yFactor);
g.DrawLine(Pens.DarkBlue, space, y, width - space, y);
// Vẽ các vạch trục Y //
float yFactorDefault = (height - space * 2) / 20;
for (float j = 0; j <= 20; j++)
{
g.DrawLine(Pens.Black, space, space + j * yFactorDefault,
space / 2, space + j * yFactorDefault);
}
// Vẽ các vạch trục X //
float xFactorDefault = (float)(width - space * 2) / 100;
13 KỸ THUẬT GIAO TIẾP MÁY TÍNH
float y = (float)((maxVal - (float)Int32.Parse(txtWrite.Text)) *
yFactor);
g.DrawLine(Pens.DarkBlue, space, y, width - space, y);
g.Dispose();
}
private void panel1_LocationChanged(object sender, EventArgs e)
{
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
}
private void textBox13_TextChanged(object sender, EventArgs e)
{
}
private void textBox15_TextChanged(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
14 KỸ THUẬT GIAO TIẾP MÁY TÍNH