Bài 7:Thực hiện mạch đo điện áp và hiển thịtrên máy tính giao tiếp qua cổng COM,
viết chương trình điều khiển.
Huớng dẫn: Thiết kế1 textbox đểhiển thị điện áp đo, thiết lập cổng truyền thông nối
tiếp và nhận dữliệu qua cổng COM.
122 trang |
Chia sẻ: chaien | Lượt xem: 2273 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Bài giảng giao tiếp và điều khiển bằng máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khi tiến hành ghi (lưu - Save) nội dung của textbox vào file text, VB.NET sẽ
thực hiện luôn việc tạo ra file mới nếu TenFile chưa thực sự tồn tại. Nhưng nếu TenFile
đang tồn tại thì VB.NET sẽ căn cứ vào thông số False/True nằm sau TenFile, nếu False
thì ghi đè nội dung mới lên nội dung hiện có trong TenFile, nếu True thì ghi tiếp nội
dung mới sau nội dung hiện có trong TenFile, trường hợp sau TenFile để trống (không
có False cũng không có True) thì được hiểu là False.
Cú pháp khai báo luồng ghi đè nội dung mới lên nội dung hiện có trong file text:
Dim TenBien As New System.IO.StreamWriter(TenFile,False)
Dim TenBien As New System.IO.StreamWriter(TenFile)
Cú pháp khai báo luồng ghi nội dung mới tiếp theo nội dung hiện có trong file text:
Dim TenBien As New System.IO.StreamWriter(TenFile,True)
Ghi toàn bộ nội dung textbox
Ví dụ: Ghi nội dung từ textbox ra file text
Imports si = System.IO
Public Class Form1
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button4.Click
Dim tenfile As String = Application.StartupPath & "\Textfileok.txt"
84
Dim ghifile As New si.StreamWriter(tenfile)
ghifile.Write(TextBox1.Text)
ghifile.Close()
End Sub
Lưu ý:
- Sử dụng StreamWriter() để mở luồng ghi lên file.
- Phương thức .Write (nội dung text cần ghi) để ghi toàn bộ nội dung văn bản
lên file.
- Phương thức .Close để đóng luồng sau khi ghi xong.
Ghi từng dòng nội dung text box
Lưu ý:
- VB.NET hiểu từng dòng văn bản trên textbox là một phần tử mảng chuỗi qua
phương thức .Lines của control textbox.
- Phương thức .WriteLine (nội dung dòng text cần ghi) để ghi từng dòng nội
dung văn bản lên file, chính xác hơn là ghi từng phần tử của mảng chuỗi lên file
text.
Ví dụ: Ghi từng dòng của Textbox vào file text
Imports si = System.IO
Public Class Form1
Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button5.Click
Dim tenfile As String = Application.StartupPath & "\Textfileok.txt"
Dim ghidong As New si.StreamWriter(tenfile, True)
Dim tungdong() As String
Dim i As Integer
tungdong = TextBox1.Lines
For i = 0 To (tungdong.Length - 1)
ghidong.Writeline(tungdong(i))
Next
ghidong.Close()
End Sub
4.5 SAO CHÉP FILE TEXT (xem [4 tr 246])
Cú pháp:
85
System.IO.File.Copy(TenFileGoc,TenFileCopy)
Ví dụ: Coppy file Textfileok.txt vào thư mục hiện hành và đặt tên là Coppy of
Textfileok.txt
Imports si = System.IO
Public Class Form1
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
Dim bangoc, bansao As String
bangoc = Application.StartupPath & "\Textfileok.txt"
bansao = Application.StartupPath & "\Coppy of Textfileok.txt"
si.File.Copy(bangoc, bansao)
End Sub
4.6 DI CHUYỂN FILE TEXT (xem [4 tr 247])
Cú pháp:
System.IO.File.Move(ViTriNguonVaTenFileNguon,ViTriDichVaTenFileDich)
Ví dụ: Di chuyển file Textfileok.txt ở thư mục hiện hành vào ổ D:\Tai_Lieu
Imports si = System.IO
Public Class Form1
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button7.Click
Dim vitringuon, vitridich As String
vitringuon = Application.StartupPath & "\Textfileok.txt"
vitridich = "D:\Tai_Lieu" & "\Textfileok.txt"
si.File.Move(vitringuon, vitridich)
End Sub
4.7 XOÁ FILE TEXT (xem [4 tr 247])
Cú pháp:
System.IO.File.Delete(duong_dan_và_ten_FileCanXoa)
Ví dụ: Xoá file Coppy of Textfileok.txt ở thư mục hiện hành
Imports si = System.IO
86
Public Class Form1
Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button8.Click
Dim file As String
file = Application.StartupPath & "\Coppy of Textfileok.txt"
si.File.Delete(file)
End Sub
4.8 CÁC HỘP THOẠI CHUẨN (xem [4 tr 306])
Việc đọc (mở) và ghi (lưu) file text khi thực hiện như các cách trên thì kém trực
quan. Người dùng khi chạy đoạn chương trình lưu file xong thì phải mở chương trình
Windows Explore để xem thử nội dung text đã thực sự được lưu vào file hay chưa. Một
cách khác để thực hiện mở và lưu trực quan hơn là dùng các hộp thoại để chọn tên file
muốn mở hoặc để gõ tên file muốn lưu,
a. Hộp thoại mở file
Cú pháp khai báo một đối tượng kiểu hộp thoại Open file:
Dim TenBien As New OpenFileDialog
Lưu ý:
- Thuộc tính .Filter cho phép hiển thị các kiểu file nào tại mục File of Type trong
hộp thoại Open bằng cách gõ liệt kê ra tên các kiểu file như All file/Word
file/Text file
- Thuộc tính .FilterIndex giúp chọn loại file mặc định.
- Thuộc tính .InitialDirectory giúp hiển thị vị trí mặc định tại mục Look in của
hộp thoại.
- Thuộc tính .FileName lấy đường dẫn và tên file người dùng chọn.
- Phương thức .ShowDialog để hiển thị hộp thoại loại OpenFileDialog.
Ví dụ: Dùng OpenFileDialog để mở và chép nội dung file lên Textbox
Private Sub Button9_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button9.Click
OpenFileDialog1.Filter = "All Files|.*|Word file|*.doc|Text file|*.txt"
OpenFileDialog1.FilterIndex = 2
87
OpenFileDialog1.InitialDirectory = "C:\"
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim docfile As New si.StreamReader(OpenFileDialog1.FileName)
TextBox1.Text = docfile.ReadToEnd
docfile.Close()
End If
End Sub
Hình 4.1: Open File Dialog
b. Hộp thoại lưu file
Cú pháp khai báo một đối tượng kiểu hộp thoại Save file:
Dim TenBien As New SaveFileDialog
Ví dụ:
Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button10.Click
SaveFileDialog1.Filter = "All Files|.*|Word file|*.doc|Text file|*.txt"
SaveFileDialog1.InitialDirectory = "C:\"
If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Dim ghifile As New si.StreamWriter(SaveFileDialog1.FileName)
ghifile.Write(TextBox1.Text)
ghifile.Close()
End If
End Sub
88
Hình 4.2: Save File Dialog
Lưu ý:
- Dim GhiFile As New SI.StreamWriter(TenFile, False,
System.Text.Encoding.UTF8) để lưu file văn bản tiếng Việt theo chuẩn Unicode.
c. Hộp thoại chọn font chữ
Cú pháp khai báo một đối tượng kiểu hộp thoại FontDialog:
Dim TenBien As New FontDialog
Ví dụ:
Private Sub Button11_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button11.Click
If FontDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
TextBox1.Font = FontDialog1.Font
End If
End Sub
Hình 4.3: FontDialog
89
d. Hộp thoại Color chọn màu chữ
Cú pháp khai báo một đối tượng kiểu hộp thoại FontDialog:
Dim TenBien As New ColorDialog
Hình 4.4: Color Dialog
Ví dụ:
Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button12.Click
If ColorDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
TextBox1.ForeColor = ColorDialog1.Color
End If
End Sub
Lưu ý:
- Kích nút Define Custom Color trên hộp màu để mở rộng hộp màu dạng thanh
trượt.
- Ngoài chọn màu cho chữ thì ColorDialog có thể dùng để chọn màu mặt tiền
(ForeColor) hay màu nền (BackColor) cho các loại đối tượng khác trên form.
e. Hộp thoại in ấn
Tương tự các hộp thoại trên, sinh viên tự nghiên cứu.
Luyện tập trên lớp
Câu hỏi lý thuyết
Câu 1: Đường dẫn động là gì?
Câu 2: Tại sao phải dung đường dẫn động?
90
Câu 3: Lệnh kiểm tra sự tồn tại của file?
Câu 4: Các bước save 1 file text từ textbox?
Câu 5: Phương thức StreamReader() có tác dụng gì?
Câu 6: Phương thức .ReadLine có tác dụng gì?
Câu 7: Phương thức .WriteLine có tác dụng gì?
Câu 8: Phương thức .Peek() có tác dụng gì?
Câu 9: Phương thức .Close có tác dụng gì?
Câu 10: Phương thức .Write có tác dụng gì?
Câu 11: Phương thức .Lines có tác dụng gì?
Câu 12: Phương thức Directory.GetCurrentDirectory() có tác dụng gì?
Câu 13: Phương thức Directory.SetCurrentDirectory() có tác dụng gì?
Câu 14: Phương thức .ShowDialog có tác dụng gì?
Câu 15: Hằng vbNewLine có tác dụng gì?
Câu 16: Hằng vbCrLf có tác dụng gì?
Câu 17: Cách ghi đè lên file text?
Câu 18: Cách ghi tiếp nội dung lên file text?
Câu 19: Dòng lệnh Dim TenBien As New System.IO.StreamWriter(TenFile) là gì?
Câu 20: Dòng lệnh Dim TenBien As New System.IO.StreamWriter(TenFile.True) là gì?
Câu 21: Dòng lệnh Dim TenBien As New System.IO.StreamWriter(TenFile.False) là
gì?
Câu 22: Các bước read 1 file text lên textbox?
Câu 23: Cú pháp lệnh sao chép file text?
Câu 24: Cú pháp lệnh xoá 1 file text?
Câu 25: Cú pháp lệnh di chuyển 1 file text?
Câu 26: Common dialog là gì?
Câu 27: Kể tên các Common dialog hay dùng?
Câu 28: Thuộc tính .Filter trong Openfiledialog có tác dụng gì?
Câu 29: Thuộc tính .FilterIndex trong Openfiledialog có tác dụng gì?
Câu 30: Thuộc tính .InitialDirectory trong Openfiledialog có tác dụng gì?
Câu 31: Thuộc tính .FileName trong Openfiledialog có tác dụng gì?
Bài tập luyện tập
Bài 1: Viết chuơng trình VB nhập 1 đoạn văn vào Textbox và Save vào ổ C.
Huớng dẫn: Sử dụng hàm có trong thư viện system.io
Bài 2: Viết chuơng trình VB đọc 1 file text và hiển thị trên Textbox.
Huớng dẫn: Sử dụng hàm có trong thư viện system.io
Bài 3: Viết chuơng trình VB xoá 1 file text trên ổ cứng.
Huớng dẫn: Sử dụng hàm có trong thư viện system.io
Bài 4: Viết chuơng trình VB coppy 1 file text trên ổ cứng.
91
Huớng dẫn: Sử dụng hàm có trong thư viện system.io
Bài 5: Viết chuơng trình VB dùng FontDialog thay đổi font chữ trên textbox.
Huớng dẫn: Sử dụng hộp thoại FontDialog
Bài 6: Viết chuơng trình VB dùng FontDialog thay đổi font chữ trên label.
Huớng dẫn: Sử dụng hộp thoại FontDialog
Bài 7: Viết chuơng trình VB dùng ColorDialog thay đổi màu chữ trên label.
Huớng dẫn: Sử dụng hộp thoại ColorDialog
Bài 8: Viết chuơng trình VB dùng ColorDialog thay đổi màu chữ trên textbox.
Huớng dẫn: Sử dụng hộp thoại ColorDialog
Bài tập về nhà
Bài 1: Viết chuơng trình VB tạo 1 giao diện có chức năng như WordPad trong
Windows.
Huớng dẫn: Tạo giao diện có chức năng soạn thảo văn bản, các chức năng cơ bản như
save, copy, chọn font, chọn màu.
Bài 2: Viết chuơng trình VB tạo 1 giao diện có chức năng như NotePad trong
Windows.
Huớng dẫn: Tương tự Bài 1.
92
PHẦN 2: GIAO TIẾP NGOẠI VI TRONG VB
CHƯƠNG 5: GIAO TIẾP MÁY TÍNH CHUẨN
RS232
Mục đích – Yêu cầu
Sau khi học xong chuơng này sinh viên nắm đuợc:
- Các giao thức truyền nhận nối tiếp qua cổng RS232.
- Thiết kế phần cứng và lập trình board giao tiếp.
Số tiết lên lớp: 20
Bảng phân chia thời luợng
STT NỘI DUNG SỐ
TIẾT
1 Chuẩn RS232 và phần cứng giao tiếp. 2
2 Thiết kế phần cứng giao tiếp VĐK 3
3 Lập trình giao tiếp trên VB NET 10
4 Lập trình giao tiếp trên VĐK 5
Trọng tâm bài giảng
- Chuẩn RS232 và phần cứng giao tiếp.
- Lập trình giao tiếp trên VB NET
- Lập trình giao tiếp trên VĐK
93
5.1 Sơ lược về chuẩn RS-232 (xem [1 tr 75])
Trong kỹ thuật truyền dữ liệu giữa các hệ thống với nhau, người ta có thể phân
loại 2 cách truyền : song song hay nối tiếp. Nhưng do cách truyền song song rất dễ bị
nhiễu tác động nên không thể truyền đi xa được, do đó cũng ít được sử dụng. Truyền
nối tiếp cũng có 2 loại : đồng bộ hay không đồng bộ. Trong cách truyền đồng bộ, dãy
ký tự được truyền sẽ kèm theo ký tự đồng bộ là SYN (mã ASCII là 22). Phương thức
này cho tốc độ truyền khá cao nhưng do mạch xử lý truyền và nhận (bao gồm mạch
thêm ký tự đồng bộ, phát hiện và báo sai) khá phức tạp nên chỉ dùng trong các ứng
dụng có yêu cầu cao về tốc độ truyền. Còn trong các ứng dụng thông thường, nhất là
các ứng dụng trong lĩnh vực điều khiển tự động, thì không có yêu cầu về tốc độ mà yêu
cầu về độ tin cậy nhưng mạch thực hiện đơn giản, rẻ tiền. Khi đó, cách truyền không
đồng bộ rất phù hợp. Theo cách truyền này thì các ký tự được truyền riêng rẽ, phân làm
từng frame có bit bắt đầu, các bit dữ liệu của ký tự cần truyền, bit chẵn lẻ (để kiểm tra
lỗi đường truyền, và các bit kết thúc.
Chuẩn RS-232-C (do EIA đưa ra) là một trong những phương thức truyền nối
tiếp không đồng bộ. Theo chuẩn này thì việc truyền thông được thực hiện ngay tại chỗ
bằng cách truyền và nhận một chuỗi các xung điện áp liên tục tương ứng với các bit.
Dữ liệu ở mức TTL được biến đổi sang các mức điện áp như sau : mức 1 là từ -3V đến -
15V (tiêu chuẩn là -12V), và mức 0 là từ +3V đến +15V (tiêu chuẩn là +12V).
Ta thấy rằng việc truyền và nhận các mức điện áp như vậy được thực hiện rất
đơn giản. Chính vì vậy mà chuẩn RS-232-C đã trở thành giao diện phổ biến rộng rãi
nhất, được trang bị hầu hết trên các máy tính như là một trong những thành phần cấu
thành nên hệ thống.
Các thuật ngữ có liên quan đến giao thức truyền thông RS-232-C :
- Chu kỳ truyền dữ liệu : tốc độ truyền dữ liệu được tính bằng bit/giây, nhưng để
phân biệt với cách truyền đồng bộ, người ta sử dụng đơn vị baud (tương ứng với
bit/giây trong thời gian có dữ liệu truyền) để tưởng nhớ đến nhà khoa học Pháp thế
kỷ 19 là J. M. E. Baudot .
- Trạng thái đánh dấu : là khoảng thời gian không có dữ liệu truyền. Trong suốt thời
gian này, thiết bị phát sẽ giữ đường truyền ở mức cao.
- Bit bắt đầu : một bit thấp cho biết việc truyền dữ liệu sẽ bắt đầu.
- Các bit ký tự : là dòng dữ liệu gồm 5, 6, 7, hay 8 bit mã hóa ký tự được truyền. Bit
có trọng số thấp nhất (LSB) là bit đầu tiên được truyền.
- Bit chẵn lẻ : là một bit tùy chọn (có thể có hay không), được phát đi sau các bit ký
tự dùng để kiểm tra các lỗi truyền dữ liệu. Trong chế độ kiểm tra tính chẵn, thiết bị
phát sẽ bật 1 hay xóa về 0 bit chẵn lẻ để tính tổng các bit 1 của ký tự được truyền và
bit chẵn lẻ là một số chẵn. Còn trong chế độ kiểm tra tính lẻ, bit chẵn lẻ thực hiện
tính tổng các bit 1 phải là một số lẻ.
- Các bit kết thúc : một hay nhiều bit cao được chèn trong dòng truyền để báo việc
kết thúc truyền một ký tự, cũng như cho thiết bị nhận có đủ thời gian chuẩn bị để
sẵn sàng cho việc nhận ký tự kế tiếp.
94
Hình 5.1: Khung truyền trong chuẩn RS232
Trong giao thức RS-232-C, các tham số truyền và nhận được chọn từ một miền
các giá trị chuẩn.
Các đầu nối :
Theo chuẩn RS-232-C, đầu nối phần cứng xác định với 25 chân, gọi là chân cắm
D-Shell hay DB-25. Nhưng không phải tất cả cổng nối tiếp đều sử dụng đầu nối DB-25.
Một số máy tính như PCJr dùng chân cắm BERG 16 chân, máy PC AT thì sử dụng
chân cắm D-Shell 9 chân.
Hình 5.2: Các đầu nối RS232 thông dụng trên máy tính
95
Hình 5.3: Chức năng các chân cổng RS 232
Các sơ đồ khi kết nối dùng cổng nối tiếp:
Hình 5.4: 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:
Hình 5.5: Kết nối trong truyền thông nối tiếp dùng tín hiệu bắt tay
96
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.
MAXIM 232 và họ IC dùng cho biến đổi TTLRS-232-C
Họ IC từ MAX220-MAX249 được sản xuất cho truyền thông EIA/TIA-232E và
V.28/V.24, cụ thể là cho những ứng dụng mà không có sẵn điện áp ±12V. Họ IC này
đặc biệt thích hợp cho những hệ thống dùng pin có công suất thấp, do chúng có chế độ
hạ nguồn làm giảm công suất tiêu tán xuống dưới 5µW. MAX225, MAX233, MAX235,
MAX245-MAX247 không cần các linh kiện phụ bên ngoài, được dùng cho những nơi
tiết kiệm không gian.
Các đặc điểm chính :
Nguồn cung cấp +5V (MAX231/MAX239 dùng nguồn +5V và +12V).
Hạ nguồn công suất thấp nhưng vẫn có thể nhận (MAX223/MAX242e. · Hỗ trợ
chuẫn EIA/TIA-232E và V.28
Nhiều bộ nhận và phát.
Phát hiện đứt mạch đường truyền (MAX243).
Hình 5.6: Sơ đồ chân Max243
97
Hình 5.7: Sơ Đồ Kết Nối RS232
Ta thấy rằng MAX232 cần có 4 tụ mắc ngoài để biến đổi điện áp từ 0V đến 5V
thành -12V đến 12V phù hợp cho truyền thông theo chuẩn RS-232. ngoài ra có 4 bộ
khuếch đại đảo nhằm chuyển từ mức TTL ra chuẩn RS-232.
Trong phép giao tiếp thông thường, chỉ cần 3 dây nối : TXD, RXD, GND là đã đảm bảo
cho giao tiếp.
5.2 Xác Lập Các Thông Số Cho Cổng Truyền Thông Nối Tiếp Trên Visual
Basic (xem [1 tr 86])
VB NET hỗ trợ công cụ phục vụ cho truyền thông nối tiếp là SerialPort. Để đưa
công cụ truyền thông nối tiếp vào Form từ cửa sổ Toolbox tìm mục Components sau đó
chọn biểu tượng SerialPort và kéo vào Form.
Các thuộc tính cần quan tâm:
Thuộc tính PortName có giá trị từ 1->16, giá trị mặc định là 1 khi khởi động.
Thuộc tính DTR Enabled = True (DTE sẵn sàng kết nối) ở mức 1 khi mở cổng,
còn ngược lại DTR ở mức 0.
Thuộc tính Handshaking (giao thức bắt tay)
0: không bắt tay 1: XON/XOFF 2: bắt tay theo RTS/CTS 3: RTS/XON/XOFF
Thuộc tính DiscardNull: cho phép loại bỏ ký tự rỗng.
Thuộc tính ParityReplace: thiết lập ký tự sẽ thay thế khi khi bit kiểm tra chẳn lẻ
phát hiện ra lỗi.
98
Thuộc tính RTSEnabled: = True thì RTS ở mức 1 khi mở cổng, và mức 0 khi
đóng cổng. Nếu False RTS ở mức 0.
Thuộc tính Settings: Thiết lập tốc độ baud, bit chẳn lẻ, số bit truyền và bit stop.
Các giá trị cho phép của Baud rate: 110, 300, 600, 1200, 2400, 9600, 14400,
19200,28800, 38400, 56000, 128000, 256000.
Parity bit: E(even), M(mark), N(none), O(odd)
Data bit: 4, 5, 6, 7, 8
Stop bit: 1, 1.5, 2
Giá trị mặc định khi không thiết lập là: 9600,n,8,1
Ví dụ: Đoạn code điều khiển các chân truyền nhận đơn giản của SerialPort
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
SerialPort1.RtsEnable = True 'or False
SerialPort1.DtrEnable = True 'or False
If SerialPort1.DsrHolding Then MsgBox("Da nhan duoc tin hieu DSR")
If SerialPort1.CtsHolding Then MsgBox("Da nhan duoc tin hieu CTS")
End Sub
Lưu ý:
- RTS và DTR là chân xuất tín hiệu (output)
- DSR và CTS là chân nhận dữ liệu (input)
- Các chân này được dùng làm tín hiệu điều khiển trong giao thức truyền nhận có
bắt tay, khi truyền nhận đơn giản có thể không cần dùng đến.
5.3 Viết chương trình truyền nhận nối tiếp trên VB NET (xem [1 tr 90])
Trước khi bước vào phần lập trình giao tiếp máy tính tôi sẽ hướng dẫn các bạn
cách lập trình trên giao diện Visual Basic
Để dễ hiểu hơn ta đi vào một yêu cầu cụ thể. Giả sử ta có một yêu cầu là lập trình
giao tiếp với card LCD. Ở đây chương trình vi điều khiển có nhiệm vụ nhận dữ liệu trên
máy tính và hiển thị trên màn hình LCD. Chương trình trên máy tính có giao diện cho
phép nhập dữ liệu vào textbox, một nút SEND để gửi dữ liệu xuống VĐK, một textbox
để nhận dữ liệu và một nút STOP để kết thúc.
Sau khi cài đặt VB bạn click vào biểu tượng
Từ màn hình khởi động chọn Creat Project
99
Hình 5.8
Hộp thoại sau xuất hiện:
Hình 5.9
Chọn Windows Forms Application, click OK để vào màn hình soạn thảo sau:
Hình 5.10: Giao diện Form Design
Chọn công cụ
Serial Port và kéo
thả vào Form
1. Click
here
2. Click
here
100
Sau khi đặt vào Form 2 button, 2 textbox, công cụ SerialPort.
Hình 5.11: Giao diện sau khi thiết kế
Sau khi thực hiện xong bạn sẽ thấy giao diện như trên. Bạn có thể đổi tên các đối
tượng bằng cách nhấp 1 lần để chọn nó, đưa chuột qua cửa sổ thuộc tính chọn ô
Text -> đánh vào tên bạn muốn thay thế VD: SEND. Tương tự cho nút STOP. Sau
đó xóa textbox bằng cách chọn Textbox1 vào cửa sổ thuộc tính chọn thẻ Text xóa
chữ Text1, tương tự cho textbox2.
Public Delegate Sub myDelegate() ‘Dùng tham chiếu myDelegate
Đầu tiên viết code cho sự kiện Form load
Ví dụ:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
If SerialPort1.IsOpen Then
SerialPort1.Close()
End If
With SerialPort1
.PortName = "COM5"
.BaudRate = 9600
.Parity = IO.Ports.Parity.None
.DataBits = 8
.StopBits = IO.Ports.StopBits.One
End With
On Error Resume Next
SerialPort1.Open()
End Sub
101
Bây giờ đến phần viết code cho từng công cụ đã chọn. Đầu tiên Chọn nút Send,
nhấp double vào nó cửa sổ soạn code xuất hiện đánh vào đoạn code sau:
Ví dụ:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
SerialPort1.Write(TextBox1.Text)
End Sub
Bây giờ chọn nút Stop và viết vào đoạn code sau
Ví dụ:
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button6.Click
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
Cuối cùng là viết code cho sự kiện Oncom
Ví dụ:
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
TextBox2.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})
End Sub
Public Sub updateTextBox()
TextBox2.AppendText(SerialPort1.ReadExisting)
End Sub
Sau khi thực hiện các bước trên bạn nhấp vào form1 ở cửa sổ quản lý project để về
lại form chính. Nhấn F5 hoặc nút Run trên chương trình để chạy thử.
102
Hình 5.12: Giao diện khi chạy chương trình
Nếu chưa có card giao tiếp ngoại vi bạn có thể nối 2 chân Txd và Rxd trong cổng
Com để gửi thử dữ liệu từ Text1 sang Text2.
Đây là chương trình chúng ta vừa viết. Đương nhiên là còn nhiều thủ thuật khác để
trang trí Form, tạo âm thanh, tạo menu trên Form
Nhưng ở đây chúng ta chỉ đi qua phần giao tiếp máy tính với VĐK nên tôi không
đi sâu vào những phần trên. Các bạn có thể tham khảo giao diện một chương trình sau:
Hình 5.13: Giao diện một chương trình mẫu
103
Một lưu ý rất quan trọng là cần phải nối mass chung giữa VĐK và máy tính, giữa
TxD, RxD của máy tính và VĐK phải qua IC Max232 để chuyển đổi mức điện áp cho
phù hợp.
5.4 Viết chương trình truyền nhận nối tiếp trên VI ĐIỀU KHIỂN 8051
Dùng chuẩn truyền bất đối xứng UART 8bit (xem [1 tr 93])
- Bây giờ tôi sẽ trình bày về cách sử dụng ngắt truyền thông nối tiếp. Trong Vi
Điều Khiển có chức năng ngắt truyền thông nối tiếp để truyền và nhận dữ liệu.
Chân TXD(P3.1 phát) và chân RXD(P3.0 thu). Thanh ghi điều khiển ngắt nối
tiếp là SCON và thanh ghi đệm dữ liệu là SBUF. Địa chỉ véctor ngắt là 023H,
bit cho phép ngắt là ES bit 4 trong thanh ghi IE.
Thanh ghi SCON có 8 bit:
+ Scon.0(RI) địa chỉ 98H cờ ngắt thu được set khi kết thúc việc
thu 1 ký tự
+ Scon.1(TI) địa chỉ 99H cờ ngắt phát được set khi kết thúc việc
phát 1 ký tự
+ Scon.2(Rb8) địa chỉ 9AH bit thu 8. Bit thứ 9 được nhận ở chế độ 9bit
+ Scon.3(Tb8) địa chỉ 9BH bit thu 8. Bit thứ 9 được phát
+ Scon.4(REN) địa chỉ 9CH bit cho phép thu, phải được set=1 để nhận ký
tự
+ Scon.5(SM0) địa chỉ 9DH bit chọn chế độ
+ Scon.6(SM1) địa chỉ 9EH bit chọn chế độ
+ Scon.7(SM2) địa chỉ 9FH bit chọn chế độ
Các Mode truyền nhận nối tiếp của 8051:
SM0 SM1 MODE MÔ TẢ BAUDRATE
0 0 0 Shift Regster Tần số thạch anh/12
0 1 1 8-bit UART Quy định bởi Timer1
1 0 2 9-bit UART Tần số thạch anh/12 or
64
1 1 3 9-bit UART Quy định bởi Timer1
Trong mode 1, baudrate được thiết lập bởi timer 1 có công thức tính như sau:
Baudrate = (timer 1 overflow)/n với n=32 nếu SMOD=0
với n=16 nếu SMOD=1
Smod là bit7 trong thanh ghi PCON.
104
Nếu sử dụng thạch anh 12MHz thì sẽ tồn tại sai số (26.04 ->26), sai số này sẽ
tích lũy và gây nên những sai lệch dữ liệu. Do đó muốn truyền nhận với độ chính xác
cao hơn nên sử dụng thạch anh 11.0592MHz
Quan hệ giữa tốc độ Baurd, thạch anh và sai số như sau:
Sơ đồ kết nối mạch điện như sau:
Hình 5.14: Sơ đồ mạch phần cứng giao tiếp
Ví dụ:
Đoạn code chương trình Vi Điều Khiển như sau
; KHAI BAO BIEN (khai báo các chân trong LCD)
C1
10uF
VCC_5V
D1
LED
C6 33p
AD
4
AD
0
VCC_5V
AD
3
AD
4
VCC
CRYSTAL1
11.0592
R8
330
AD
2
U2
AT89S52
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
1
2
3
4
5
6
7
8
9
10
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.6/WR
P3.7/RD
XTAL2
XTAL1 G
N
D P2.0/A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6/A14
P2.7/A15
PSEN
ALE/PROG
EA/VPP
P0.7/AD7
P0.6/AD6
P0.5/AD5
P0.4/AD4
P0.3/AD3
P0.2/AD2
P0.1/AD1
P0.0/AD0
VC
CP1.0/T2
P1.1/T2EX
P1.2
P1.3
P1.4/SS
P1.5/MOSI
P1.6/MISO
P1.7/SCK
RST
P3.0/RXD
D6
LED
AD
6
D5
LED
R3
330
AD
8
R4
330
R5
330
AD
1
SW1
Reset
AD
2
D4
LED
R10 330
D2
LED
R2
330
C5
10u
AD
8
C4
10u
Q1
A1013
R14
8K2
R6
330
R11 100
C11 33p
J2
SPI PROGRAM
1
2
3
4
AD
1
VCC_5V
LCD 16x2
U1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
VS
S
VD
D
VE
E
R
S
R
W
E D
B0
D
B1
D
B2
D
B3
D
B4
D
B5
D
B6
D
B7
A K
SW2
SW DIP-8/SM
R1
4K7
1
23456789
AD
0
R7
330
C3
10u
AD
7
5V
D7
LED
D8
LED
VCC_5V
D3
LED
P1
CONNECTOR DB9
5
9
4
8
3
7
2
6
1
5V
AD
7
AD
3
U4
MAX232
1
3
4
5
16
15
26
12
9
11
10
13
8
14
7
C1+
C1-
C2+
C2-
VC
C
G
N
D
V+V-
R1OUT
R2OUT
T1IN
T2IN
R1IN
R2IN
T1OUT
T2OUT
VCC_5V
AD
6
R9
330
J1
DATA LED/D0-D7
1
2
3
4
5
6
7
8
C2
10u
Baudrate Thạch anh
(MHz)
SMOD TH1 Baudrate thật Sai số
9600 12.000 1 -7 8923 7%
2400 12.000 0 -13 2404 0.16%
1200 12.000 0 -26 1202 0.16%
19200 11.0592 1 -3 19200 0
9600 11.0592 0 -3 9600 0
2400 11.0592 0 -12 2400 0
1200 11.0592 0 -24 1200 0
105
RS BIT P1.0 ; RS=0 chon thanh ghi lệnh, RS=1 chọn thanh ghi dữ
liệu
RW BIT P1.1 ;RW=0 ghi dữ liệu, RW=1 đọc dữ liệu
EN BIT P1.2 ;sau khi gửi lệnh hay data lên LCD cần tạo 1 xung
lên chân EN
DATA_OUT EQU P2 ;8 đường dữ liệu của LCD được nối với Port2
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP SERIAL
ORG 0030H
MAIN:
MOV PCON,#10000000B ;7 SMOD = 1 TANG TOC DO BAUD; CD
NGHI 1 PD,0 IDL
MOV SCON,#01010001B
MOV TMOD,#00100001B
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
MOV TH1,#-3
MOV IE,#10010000B
SETB TR1
LOOP:
MOV A,#38H ;lệnh tạo ma trận hai dòng 5x7
LCALL OUT_INSTRUCTION ;gọi chương trình con để gửi lênh lên
LCD
MOV A,#1H ;lệnh xóa màn hình LCD
LCALL OUT_INSTRUCTION
MOV A,#80H ;lệnh đưa con trỏ về đầu dòng 1
LCALL OUT_INSTRUCTION
SJMP $ ;nhảy tại chổ (không làm gì)
SERIAL: ;Trình phục vụ ngắt port nối tiếp
JNB RI,$
CLR RI
MOV A,SBUF
LCALL OUT_DATA ;Gọi chương trình xuất dữ liệu lên LCD
RETI
OUT_DATA:
MOV DATA_OUT,A ;đưa nội dung trong thanh ghi A lên LCD
SETB RS ;chọn thanh ghi dữ liệu
106
CLR RW ;chọn lệnh ghi dữ liệu lên LCD
SETB EN ;tạo xung trên chân EN
LCALL DELAY
CLR EN
LCALL DELAY
RET
OUT_INSTRUCTION:
MOV DATA_OUT,A
CLR RS ;Chọn thanh ghi lệnh
CLR RW
SETB EN
LCALL DELAY
CLR EN
LCALL DELAY
RET
DELAY: ;Chương trình con tạo thời gian trì hoãn 12,5ms
MOV 7FH,#50
DL1:
MOV 7EH,#250
DL:
DJNZ 7EH,DL
DJNZ 7FH,DL1
RET
END
Luyện tập trên lớp
Câu hỏi lý thuyết
Câu 1: Chuẩn RS232 là gì?
Câu 2: Truyền nối tiếp có mấy loại?
Câu 3: Truyền nối tiếp đồng bộ là gì?
Câu 4: Truyền nối tiếp không đồng bộ là gì?
Câu 5: Chuẩn RS-232-C là đồng bộ hay không đồng bộ?
Câu 6: Dãy điện áp mức [0] trong chuẩn RS-232-C là bao nhiêu?
Câu 7: Dãy điện áp mức [1] trong chuẩn RS-232-C là bao nhiêu?
Câu 8: Trong phương thức truyền không đồng bộ từ Baud có nghĩa là gì?
Câu 9: Hãy nêu cấu trúc 1 khung truyền trong chuẩn RS232?
Câu 10: Trong chuẩn RS232 bit Parity có tác dụng gì?
Câu 11: Trong chuẩn RS232 bit Start có tác dụng gì?
Câu 12: Trong chuẩn RS232 databit có tác dụng gì?
107
Câu 13: Trong chuẩn RS232 Stopbit có tác dụng gì?
Câu 14: Hãy nêu các giá trị tốc độ Baud cho phép trong chuẩn RS232?
Câu 15: Hãy nêu các giá trị Parity Bit cho phép trong chuẩn RS232?
Câu 16: Hãy nêu các giá trị Start bit cho phép trong chuẩn RS232?
Câu 17: Hãy nêu các giá trị Stop bit cho phép trong chuẩn RS232?
Câu 18: Hãy nêu các giá trị Data bit cho phép trong chuẩn RS232?
Câu 19: Các giá trị mặc định khi thiết lập trong chuẩn RS232?
Câu 20: Kể tên và nêu tác dụng các chân trong chuẩn RS232?
Câu 21: Dãy điện áp trong chuẩn TTL là bao nhiêu?
Câu 22: Dãy điện áp trong chuẩn RS232 là bao nhiêu?
Câu 23: IC chuyển mức điện áp thông dụng cho biến đổi TTLRS-232-C là gì?
Câu 24: Trong chuẩn giao tiếp RS232 3 chân nào là quan trọng nhất?
Câu 25: Trong họ Vi điều khiển 8051 2 chân nào dùng để truyền nhận dữ liệu?
Câu 26: Tại sao khi truyền dữ liệu phải hoà mass chung giữa PC và VĐK?
Câu 27: Tại sao khi truyền dữ liệu phải giữa PC và VĐK phải qua IC Max232?
Câu 28: Thanh ghi điều khiển ngắt nối tiếp trong họ 8051 là gì?
Câu 29: Thanh ghi chứa dữ liệu ngắt nối tiếp trong họ 8051 là gì?
Câu 30: Địa chỉ vector ngắt nối tiếp trong họ 8051 là gì?
Câu 31: Bit cho phép ngắt nối tiếp trong họ 8051 là gì?
Câu 32: Thanh ghi SCON trong họ 8051 có tác dụng gì?
Câu 33: Nêu chức năng các bit của thanh ghi SCON trong họ 8051?
Câu 34: Nêu ảnh hưởng của thạch anh đối với tốc độ truyền như thế nào?
Câu 35: Tốc độ Baud chọn càng lớn càng tốt hay càng nhỏ càng tốt?
Câu 36: Nêu ảnh hưởng của sai số truyền đối với tốc độ truyền như thế nào?
Câu 37: Để tạo tốc độ Baud trong 8051 ta thường dùng timer nào? chế độ gì?
Câu 38: Cờ truyền nối tiếp trong họ 8051 là gì? Có tác dụng gì?
Câu 39: Cờ nhận nối tiếp trong họ 8051 là gì? Có tác dụng gì?
Câu 40: Khi kết nối giữa VĐK và PC thì chân TXD và RXD mắc chéo nhau hay
song song?
Bài tập luyện tập
Bài 1: Viết chuơng trình VB nhập 1 đoạn văn vào textbox và truyền ra cổng COM.
Huớng dẫn:
Tạo giao diện đưa cổng Serial vào, thiết lập chế độ truyền, tốc độ truyền, chọn cổng và
dùng hàm SerialPort1.Write(TextBox1.Text)’
Bài 2: Viết chuơng trình VB nhập 1 số nhị phân vào checkbox và truyền ra cổng COM.
Huớng dẫn:
Tương tự Bài 1 chỉ chuyển số dạng Bin trong checkbox sang số Dec và truyền.
Bài 3: Viết chuơng trình VB nhận dữ liệu từ cổng COM và xuất ra textbox.
Huớng dẫn: Dùng hàm TextBox2.AppendText(SerialPort1.ReadExisting)
108
Bài 4: Viết chuơng trình VB nhận dữ liệu từ cổng COM và xuất ra Label.
Huớng dẫn: Tương tự Bài 3.
Bài 5: Viết chuơng trình VB nhận dữ liệu từ cổng COM và xuất ra mã nhị phân trên
checkbox.
Huớng dẫn: Tương tự Bài 3.
Bài tập về nhà
Bài 1: Thiết kế giao diện giao tiếp nhập thông số Kp, Ki, Kd trên VB truyền xuống
VĐK qua cổng COM.
Huớng dẫn: Thiết kế 3 textbox để nhập thông số, thiết lập cổng truyền thông nối tiếp
và truyền lần lượt qua cổng COM.
Bài 2: Thực hiện mạch điều khiển nhiệt độ giao tiếp với máy tính qua cổng COM, thiết
kế giao diện trên VB, viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để nhập nhiệt độ đặt, 1 textbox để hiển thị nhiệt độ đo,
thiết lập cổng truyền thông nối tiếp và truyền nhận dữ liệu qua cổng COM.
Bài 3: Thực hiện mạch điều khiển động cơ servo giao tiếp với máy tính qua cổng
COM, viết chương trình điều khiển.
Huớng dẫn: Viết chương trình truyền tốc độ, số vòng, chiều thuận nghịch qua VĐK xử
lý.
Bài 4: Thực hiện mạch điều khiển step motor ½ bước giao tiếp với máy tính qua cổng
COM, viết chương trình điều khiển.
Huớng dẫn: Viết chương trình truyền tốc độ, số vòng, chiều thuận nghịch qua VĐK xử
lý.
Bài 5: Thực hiện mạch điều khiển step motor 1 bước giao tiếp với máy tính qua cổng
COM, viết chương trình điều khiển.
Huớng dẫn: Viết chương trình truyền tốc độ, số vòng, chiều thuận nghịch qua VĐK xử
lý.
Bài 6: Thực hiện mạch điều khiển 8 đèn từ xa giao tiếp với máy tính qua cổng COM,
viết chương trình điều khiển.
Huớng dẫn: Viết chương trình điều khiển và cập nhật trạng thái đèn truyền xuống
VĐK, giao tiếp từ xa dùng mạch phát thu RF.
109
Bài 7: Thực hiện mạch đo điện áp và hiển thị trên máy tính giao tiếp qua cổng COM,
viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị điện áp đo, thiết lập cổng truyền thông nối
tiếp và nhận dữ liệu qua cổng COM.
Bài 8: Thực hiện mạch đo dòng điện và hiển thị trên máy tính giao tiếp qua cổng COM,
viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị dòng điện đo được, thiết lập cổng truyền
thông nối tiếp và nhận dữ liệu qua cổng COM.
Bài 9: Thực hiện mạch đo tần số (mạch đo dùng VĐK) và hiển thị trên máy tính giao
tiếp qua cổng COM, viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị tần số đo được, thiết lập cổng truyền thông
nối tiếp và nhận dữ liệu qua cổng COM.
Bài 10: Thực hiện mô hình điều khiển giám sát lò nhiệt hiển thị trên máy tính giao tiếp
qua cổng COM, thiết kế giao diện trên VB, viết chương trình điều khiển.
Huớng dẫn: Thiết kế các textbox để nhập thông số, thiết lập cổng truyền thông nối tiếp
và truyền lần lượt qua cổng COM, đồng thời nhận giá trị nhiệt truyền từ VĐK và hiển
thị lên Textbox.
110
CHƯƠNG 6: GIAO TIẾP MÁY TÍNH QUA CỔNG
LPT
Mục đích – Yêu cầu
Sau khi học xong chuơng này sinh viên nắm đuợc:
- Các giao thức truyền nhận nối tiếp qua cổng LPT.
- Thiết kế phần cứng và lập trình board giao tiếp.
Số tiết lên lớp: 10
Bảng phân chia thời luợng
STT NỘI DUNG SỐ
TIẾT
1 Cấu trúc cổng LPT. 1
2 Hoạt động của parallel port 1
3 Chức năng các Pin trong parallel port 1
4 Lập trình giao tiếp trên VB NET 6
5 IC đệm hỗ trợ giao tiếp LPT 1
Trọng tâm bài giảng
- Chuẩn truyền song song và phần cứng giao tiếp.
- Lập trình giao tiếp trên VB NET
111
6.1 Cấu Trúc Cổng LPT (xem chi tiết [5])
Ða số các máy vi tính đều trao đổi thông tin thông qua các ngã sau đây: Parallel
port, Serial port, USB và Network card. Parallel port là một phần không thể thiếu trong
việc sử dụng computer để giao tiếp với các thiết bị điện tử khác.
Cấu trúc của Parallel port nhìn trên phương diện hardware Parallel port bao gồm
25 pins (chân) được bố trí theo sơ đồ dưới đây, đa số giao diện đầu cắm của Parallel
port đều ở dạng female:
- 8 pins dùng để gởi và nhận data (từ pin số 2 đến số 9. Chú ý một số dòng máy
chỉ có chiều output) gọi là DATA Port. Dữ liệu trao đổi qua 8 pin này được gói
gọn trong 1 byte.
- 5 pins dùng để hiển thị tình trạng hoạt động của parallel port: đang bận, đang
gởi/nhận thông tin...(các pin số 10-13 và pin số 15) gọi là STATUS Port. Dữ liệu
trao đổi qua 8 pin này dùng 5 bit cao của byte.
- 4 pins dùng để điều khiển gọi là CONTROL Port, là các pin số 1, 14, 16 và 17.
Dữ trao đổi qua pnin này dùng 4 bit thấp của byte.
- 8 pins còn lại được dùng tùy theo ý người sử dụng. Nếu không được sử dụng thì
chúng sẽ được grounded (nối đất)
Hình 6.1: Sơ đồ chân cổng LPT
Ðây là cấu hình được thống nhất trong công nghệ vi tính và được công nhận bởi
IEEE (vốn là một tổ chức lớn nhất về qui định hardware quốc tế). Bạn có thể kiểm tra
lại các số pin và đánh dấu bằng cách nhìn rõ hơn vào các dây parallel port cũng như
parallel port phía sau máy vi tính của bạn.
112
6.2 Hoạt động của parallel port (xem chi tiết [5])
DATA port là nơi thông tin sẽ được trao đổi từ computer đến các thiết bị khác
(hai chiều). Khi lập trình ắt hẳn cũng có khi bạn nghe nói đến chuyện viết 1
program/driver cho các hardware. Ở đây driver cho parallel port chính là chương trình
quản lý và điều khiển quá trình trao đổi thông tin này. DATA port có 8 pins tức là 1
bytes.
STATUS port là nơi hiển thị các quá trình vận hành của parallel port. Một ví dụ
đơn giản là giả sử bạn muốn in một bài viết ra printer, nhưng khi nhấn nút "print" thì lại
thấy máy vi tính hiển thị một thông báo hết giấy! Trên thực tế phía sau những hành
động này là một chuỗi phối hợp giữa software và hardware. Khi bạn click "print" tức là
bạn kích hoạt một trong những pins của CONTROL port bằng software để bảo cái
printer in bài ra. Nhưng trước khi thực hiện việc in printer cũng tự biết nó hết giấy và tự
kích hoạt một trong số những pins của STATUS port để báo cho computer biết là hết
giấy. Kết quả là software điều khiển quá trình in kiểm tra (trước khi in) thấy được cho
nên nó hiện thông báo hết giấy cho bạn. Nhiều hoạt động tương tự như printer chưa on,
printer hết mực, printer bị kẹt giấy...cũng do phối hợp giữa những pins này tạo nên.
Bảng địa chỉ LPT Port:
Port
Address
Chú Thích
3BCh - 3BFh
dùng cho prallel port vốn dính vào Video
Card (cách cũ)
378h - 37Fh
khu vực memory thường dùng cho LPT 1
278h - 27Fh khu vực memory thường dùng cho LPT 2
....
6.3 Chức năng các Pin trong parallel port (xem chi tiết [5])
Châ
n
tên signal
(dùng cho
hardware)
Direction/t
ype
(nhìn từ
PC)
Tên signal và
thứ tự
của bit
(dùng cho
software)
Normal signal line function
1 -STROBE OC/Pullup* Control register bit 0
kích hoạt thông báo gởi hoặc nhận data, 0 là
đọc, 1 là viết
113
2 D0 hai chiều Data register bit 0 bit 0 chứa data
3 D1 hai chiều Data register bit 1 bit 1 chứa data
4 D2 hai chiều Data register bit 2 bit 2 chứa data
5 D3 hai chiều Data register bit 3 bit 3 chứa data
6 D4 hai chiều Data register bit 4 bit 4 chứa data
7 D5 hai chiều Data register bit 5 bit 5 chứa data
8 D6 hai chiều Data register bit 6 bit 6 chứa data
9 D7 hai chiều Data register bit 7 bit 7 chứa data
10 -ACK Input Status register bit 6
Pulsed low by printer to acknowledge data
byte
Rising (usually) edge causes IRQ if enabled
11 BUSY Input Status register bit 7 kích hoạt khi printer đang bận (busy)
12 NOPAPER Input Status register bit 5 kích hoạt khi printer hết giấy
13 SELECTED Input Status register bit 4 kích hoạt khi printer đang hoạt động
14 -AUTOFEED OC/Pullup
Control register
bit 1
kích hoạt thông báo data đã sẵn sàng để đọc
hoặc viết
15 -ERROR Input Status register bit 3 kích hoạt khi printer bị lổi (vì nhiều lý do)
16
-
INITIALI
ZE
OC/Pullup Control register bit 2 kích hoạt để printer reset lại vị trí ban đầu
17 -SELECT OC/Pullup Control register bit 3
kích hoạt để đánh dấu printer nhận được valid
address
18 Ground
... Ground chân (18-25) bỏ trống, dùng tùy ý
25 Ground
Chú ý: Ở một số dòng máy Dataport chỉ có chiều output
* OC/Pullup: Ngõ ra để hở cần mắc thêm điện trở kéo lên.
114
6.4 Viết chương trình truyền nhận song song đơn giản trên VB.NET (xem chi
tiết [6])
Trong VB hỗ trợ hàm xuất nhập qua cổng LPT là hàm inpout32.dll
Ta có thể tải hàm này từ internet vào google gõ tên hàm vào hoặc truy cập trực tiếp
vào đường dẫn sau
l
Sau khi tải về giải nén và mở thư mục:
inpout32_source_and_bins\inpout32_source_and_bins\binaries\Dll
Hình 6.2
Copy file inpout32.dll bỏ vào thư mục C:\WINDOWS\system32
Tiếp theo mở một dự án VB và tạo một giao diện như hình sau:
Hình 6.3: Giao diện giao tiếp LPT đơn giản
Bước kế tiếp là tạo 1 module để liên kết với thư viện liên kết động inpout32.dll
vừa tải về. Cách tạo một module như sau: trên thanh menu của VB vào Project -> Add
module cửa sổ sau hiện ra
Hình 6.4: Cách add Module inout32.dll
115
Click chọn nút Add, cửa sổ soạn thảo code cho module hiện ra, đánh đoạn code sau đây
vào:
Ví dụ: Đoạn code cho Module giao tiếp LPT
Module porting
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _
(ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" _
(ByVal PortAddress As Integer, ByVal Value As Integer)
End Module
Đoạn code trên khai báo cho chương trình biết đang sử dụng hàm Inport và outport
trong thư viện "inpout32.dll"
Trở lại giao diện form
Click vào nút READ và viết lệnh sau:
Ví dụ:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'Declare variables to store read information and Address values
Dim intAddress As Integer, intReadVal As Integer
'Get the address and assign
intAddress = 888 'Địa chỉ thanh ghi dữ liệu 378H
'Read the corresponding value and store
intReadVal = porting.Inp(intAddress)
TextBox1.Text = intReadVal.ToString()
End Sub
Click vào nút WRITE và viết lệnh sau:
Ví dụ:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim intVal2Write As Integer
'Read the corresponding value and store
intVal2Write = Convert.ToString(TextBox1.Text)
'porting is the name of the module
porting.Out(888, intVal2Write) 'Địa chỉ thanh ghi dữ liệu 378H
End Sub
Lưu ý:
116
- Ví dụ trên trình bày việc ghi và nhận dữ liệu qua Data Register của cổng LPT.
Ngoài ra ta có thể tác động đến các thanh ghi khác như Control Register, Feedback
Register.
- PortAddress: là địa chỉ của thanh ghi dữ liệu, cũng là địa chỉ của cổng LPT
- PortAddress+1: là địa chỉ của thanh ghi Feedback Register
- PortAddress+2: là địa chỉ của thanh ghi Control Register.
Như ví dụ trên cổng LPT của ta có địa chỉ 378H (hệ DEC là 888), vậy nếu thao tác trên
Data Register ta chọn địa chỉ 888, Feedback Register: 889, Control Register:890
Hình 6.5: Giao diện một chương trình mẫu
6.5 Phần cứng giao tiếp (xem chi tiết [7])
- Khi ghép nối giữa máy tính và thiết bị điều khiển cần phải qua IC đệm để tránh hư
hỏng main máy tính do chập mạch hay những sự cố khác. IC đệm hay dùng trong giao
tiếp LPT là 74LS245.
Hình 6.6: Sơ đồ bên trong và bảng hoạt động IC 74LS245
117
Hình 6.7: Sơ đồ giao tiếp điều khiển 8 led dùng IC đệm
Luyện tập trên lớp
Câu hỏi lý thuyết
Câu 1: Parallel port gồm mấy Port?
Câu 2: Kể tên và chức năng các port trong Parallel port?
Câu 3: Kể tên và chức năng các pin trong Parallel port?
Câu 4: Controlport gồm mấy pin, chức năng các pin?
Câu 5: Dataport gồm mấy pin, chức năng các pin?
Câu 6: Statustport gồm mấy pin, chức năng các pin?
Câu 7: Chân 18-25 trong Parallel port có chức năng gì?
Câu 8: Parallel port truyền theo kiểu song song hay nối tiếp?
Câu 9: Tốc độ truyền của Parallel port so với Serial port như thế nào?
Câu 10: Độ tin cậy của Parallel port so với Serial port như thế nào?
Câu 11: Khoảng cách truyền của Parallel port so với Serial port như thế nào?
Câu 12: Mức điện áp của Parallel port là bao nhiêu?
Câu 13: Mức điện áp của Parallel port so với Serial port như thế nào?
Câu 14: Module inout.dll có tác dụng gì?
Câu 15: Vì sao phải add Module inout.dll vào project giao tiếp LPT?
Câu 16: Hàm porting.Inp(intAddress) có ý nghĩa gì? intAddress là gì?
Câu 17: Hàm porting.Out(888, intVal2Write) có ý nghĩa gì? 888 là gì?
intVal2Write là gì?
Câu 18: Cách xem địa chỉ vector cổng LPT trên PC?
Câu 19: Tại sao phải dùng IC đệm khi giao tiếp thiết bị qua LPT?
Câu 20: IC đệm thông dụng trong giao tiếp thiết bị qua LPT là gì?
Câu 21: Chân DIR trong IC đệm 74LS245 có tác dụng gì?
Câu 22: Chân EN trong IC đệm 74LS245 có tác dụng gì?
D8
LED
D3
LED
VCC
D5
LED
D7
LED
VCC
R3 R
R5 R
R7 R
D2
LED
R2 R
D6
LED
R8 R
SW1
SW DIP-8
D1
LED
U1
74LS245/SO
2
3
4
5
6
7
8
9
19
1
18
17
16
15
14
13
12
11
20 10
A0
A1
A2
A3
A4
A5
A6
A7
G
DIR
B0
B1
B2
B3
B4
B5
B6
B7
VC
C
G
N
D
P1
CONNECTOR DB25
13
25
12
24
11
23
10
22
9
21
8
20
7
19
6
18
5
17
4
16
3
15
2
14
1
R4 R
R6 R
R1 R
SW2
SW KEY-SPDT
D4
LED
118
Câu 23: Có cần nối Mass chung giữa PC và thiết bị điều khiển không?
Bài tập luyện tập
Bài 1: Viết chuơng trình VB nhập 1 đoạn văn vào textbox và truyền ra cổng
LPT.
Huớng dẫn:
Truyền lần lượt ra cổng LPT dùng hàm Out trong thư viện inpout32.dll
Bài 2: Viết chuơng trình VB nhập số nhị phân vào checkbox, truyền ra cổng
LPT.
Huớng dẫn:
Truyền lần lượt ra cổng LPT dùng hàm Out trong thư viện inpout32.dll
Bài 3: Viết chuơng trình VB nhận dữ liệu từ cổng LPT và xuất ra textbox.
Huớng dẫn:
Dùng hàm Inp trong thư viện inpout32.dll
Bài 4: Viết chuơng trình VB nhận dữ liệu từ cổng LPT và xuất ra Label.
Huớng dẫn:
Dùng hàm Inp trong thư viện inpout32.dll
Bài 5: Viết chuơng trình VB nhận dữ liệu từ cổng LPT và xuất ra mã nhị phân
trên checkbox.
Huớng dẫn:
Dùng hàm Inp trong thư viện inpout32.dll
Bài tập về nhà
Bài 1: Viết chương trình VB dùng delay xuất tuần tự 3 ký tự ra cổng LPT.
Huớng dẫn:
Truyền lần lượt ra cổng LPT dùng hàm Out trong thư viện inpout32.dll
Bài 2: Viết chương trình VB dùng ngắt timer xuất tuần tự 3 ký tự ra cổng LPT.
Huớng dẫn: Tương tự Bài 1
Bài 3: Viết chương trình VB dùng delay cho 1 led sáng chạy trên cổng LPT.
Huớng dẫn:
Truyền lần lượt các trạng thái ra cổng LPT dùng hàm Out trong thư viện
inpout32.dll
119
Bài 4: Viết chương trình VB dùng ngắt timer cho 1 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 5: Viết chương trình VB dùng delay cho 1 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 6: Viết chương trình VB dùng ngắt timer cho 1 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 7: Viết chương trình VB dùng delay cho 2 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 8: Viết chương trình VB dùng ngắt timer cho 2 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 9: Viết chương trình VB dùng delay cho 2 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 10: Viết chương trình VB dùng ngắt timer cho 2 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 11: Viết chương trình VB dùng delay cho 3 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 12: Viết chương trình VB dùng ngắt timer cho 3 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 13: Viết chương trình VB dùng delay cho 3 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 14: Viết chương trình VB dùng ngắt timer cho 3 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 15: Viết chương trình VB dùng delay cho 4 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 16: Viết chương trình VB dùng ngắt timer cho 4 led sáng chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 17: Viết chương trình VB dùng delay cho 4 led tắt chạy trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 18: Viết chương trình VB dùng ngắt timer cho 4 led tắt chạy trên cổng LPT.
120
Huớng dẫn: Tương tự Bài 3
Bài 19: Viết chương trình VB dùng delay cho led sáng theo kiểu 10101010-01010101
và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 20: Viết chương trình VB dùng ngắt timer cho led sáng theo kiểu 10101010-
01010101 và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 21: Viết chương trình VB dùng delay cho led sáng theo kiểu 00110011-11001100
và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 22: Viết chương trình VB dùng ngắt timer cho led sáng theo kiểu 00110011-
11001100 và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 23: Viết chương trình VB dùng delay cho led sáng theo kiểu 00001111-11110000
và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 24: Viết chương trình VB dùng ngắt timer cho led sáng theo kiểu 00001111-
11110000 và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 25: Viết chương trình VB dùng delay cho led sáng theo kiểu 11100111-11000011-
10000001-00000000 và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 26: Viết chương trình VB dùng ngắt timer cho led sáng theo kiểu 00011000-
00111100-01111110-11111111 và lặp lại trên cổng LPT.
Huớng dẫn: Tương tự Bài 3
Bài 27: Thực hiện mạch điều khiển động cơ servo giao tiếp với máy tính qua cổng
LPT, viết chương trình điều khiển.
Huớng dẫn: Viết chương trình truyền tốc độ, số vòng, chiều thuận nghịch qua VĐK xử
lý.
Bài 28: Thực hiện mạch điều khiển step motor ½ bước giao tiếp với máy tính qua cổng
LPT, viết chương trình điều khiển.
Huớng dẫn: Viết chương trình truyền tốc độ, số vòng, chiều thuận nghịch qua VĐK xử
lý.
121
Bài 29: Thực hiện mạch điều khiển step motor 1 bước giao tiếp với máy tính qua cổng
LPT, viết chương trình điều khiển.
Huớng dẫn: Tương tự Bài 28
Bài 30: Thực hiện mạch điều khiển 8 đèn từ xa giao tiếp với máy tính qua cổng LPT,
viết chương trình điều khiển.
Huớng dẫn: Viết chương trình điều khiển và cập nhật trạng thái đèn truyền qua cổng
LPT, giao tiếp từ xa dùng mạch phát thu RF.
Bài 31: Thực hiện mạch đo điện áp và hiển thị trên máy tính giao tiếp qua cổng LPT,
viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị điện áp đo và nhận dữ liệu qua cổng LPT.
Bài 32: Thực hiện mạch đo dòng điện và hiển thị trên máy tính giao tiếp qua cổng LPT,
viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị dòng điện đo được và nhận dữ liệu qua cổng
LPT.
Bài 33: Thực hiện mạch đo tần số (mạch đo dùng VĐK) và hiển thị trên máy tính giao
tiếp qua cổng LPT, viết chương trình điều khiển.
Huớng dẫn: Thiết kế 1 textbox để hiển thị tần số đo được và nhận dữ liệu qua cổng
LPT.
122
TÀI LIỆU THAM KHẢO
TIẾNG VIỆT
[1] Phạm Hùng Kim Khánh, Tài Liệu Lập Trình Hệ Thống, Nxb Thống Kê, 2002.
[2] Phạm Đức Lập, Hướng Dẫn Lập trình VB.NET, NXB GTVT, 2006
TIẾNG ANH
[3] Bill Evjen, Professional VB2005, Wiley Publishing, Inc.2006.
[4] Cameron Wakefield, VB.NET Developer’s Guide, Syngress Publishing, Inc.2001.
WEBSITE
[5]
[6]
[7]
Các file đính kèm theo tài liệu này:
- bai_giang_dltm_black_0343.pdf