Bài giảng giao tiếp và điều khiển bằng máy tính

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.

pdf122 trang | Chia sẻ: chaien | Lượt xem: 2163 | Lượt tải: 2download
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:

  • pdfbai_giang_dltm_black_0343.pdf
Tài liệu liên quan