• Thứ Sáu, 09/01/2004 09:51 (GMT+7)

    Lập trình Visual Basic: Điều khiển phần cứng qua cổng COM

    Lượt xem 5522
    Đánh giá

    Bài toán lập trình điều khiển phần cứng qua cổng COM của máy tính (PC) luôn được nhiều người quan tâm. Bài viết này trao đổi kinh nghiệm sử dụng Visual Basic 6.0 (VB) cho lập trình điều khiển cổng COM.

    VB 6.0 cung cấp một đối tượng điều khiển dưới dạng đóng gói ActiveX: Microsoft Comm Control 6.0 (MsComm). Để sử dụng được nó, yêu cầu tập tin mscomm32.ocx (chế độ 32 bit) phải có mặt tại thư mục \Windows\System. Sử dụng MsComm cho phép can thiệp tới tất cả các đường tín hiệu điều khiển “bắt tay” - RTS, CTS, DTR, DSR, DCD, RI và các đường thu/phát RxD/TxD của cổng COM. Đáng tiếc MsComm chỉ hỗ trợ truyền dữ liệu dạng chuỗi. Trong kỹ thuật điều khiển phần cứng, các byte mã nhận dạng kết thúc chuỗi, điều khiển dòng... cần phải loại bỏ. Để giải quyết vấn đề này, có thể kết hợp một số hàm xử lý chuỗi và ký tự... của Visual Basic 6.0.

    Để minh hoạ, tôi giới thiệu một chương trình nhỏ cho phép giao tiếp giữa PC và một hệ vi điều khiển (VĐK, micro-controller) họ 89C51. PC sẽ lần lượt truyền từng byte mã nhị phân của chương trình dùng để điều khiển hệ VĐK (đã được biên dịch) sang hệ VĐK và thu nhận lại chúng. Sau khi kết thúc truyền file, PC sẽ phát một xung trên đường RTS để RESET hệ VĐK. Lưu ý: cần thiết lập tốc độ và khuôn dạng khung dữ liệu phù hợp. (Trường hợp cụ thể với chương trình này: tốc độ baud 2400; 1 start bit; 8 bit data; 1 stop bit; không có bit parity).

    Tạo một Form đơn giản chỉ gồm hai nút nhấn CmdTruyenfile và CmdExit. Trên Form bắt buộc phải đặt một đối tượng điều khiển MsComm1. Dưới đây là mã nguồn.

     

    Option Explicit

    Dim ByteNumber, STRLength As Long

    Dim FileData As Byte

    Dim FileNumber, i As Integer

    Dim STRReceive, FileName, Buffer As String

     

    Private Sub Form_Load()

    MSComm1.CommPort = 2 ‘ Chọn cổng COM.

    MSComm1.Settings = “2400,N,8,1”

    ‘ Đặt các thông số cổng COM.

    MSComm1.PortOpen = True

    End Sub

     

    Private Sub CmdTruyenfile_Click()

    ‘Gán đường dẫn và tên file cho

    ‘biến FileName.

    FileName = “C:\ThuVien\Hienso.bin” 

    FileNumber = FreeFile

    Open FileName For Binary Access Read As #FileNumber

    ‘Trình tự phát từng byte mã chương trình.

    For ByteNumber = 1 To LOF(FileNumber)

    Get #FileNumber, ByteNumber, FileData

    MSComm1.Output = Chr$(FileData)

    ‘Trình tự thu từng byte mã chương trình.

    Do

    DoEvents

    Loop Until MSComm1.InBufferCount >= 1

    STRReceive = MSComm1.Input

    STRLength = Len(STRReceive)

    For i = 1 To STRLength

    Buffer = Mid(STRReceive, i, 1)

    ‘ Có thể xử lý byte vừa thu được

    ‘...

    Next i

    Next ByteNumber

    Close FileNumber

    ‘Phát một xung trên đường RTS

    ‘của cổngCOM 2 để reset hệ VĐK

    For i = 0 To 3900

    MSComm1.RTSEnable = True

    Next

    For i = 0 To 3900

    MSComm1.RTSEnable = False

    Next

    ‘Xoá các bộ đệm thu/phát.

    MSComm1.InBufferCount = 0

    MSComm1.OutBufferCount = 0

    End Sub

     

    Private Sub CmdThoat_Click()

    End

    End Sub

     

    MsComm còn cho phép sử dụng các đặc tính của sự kiện OnComm để bẫy các sự kiện và lỗi truyền thông. Thực tế cho thấy trong những trường hợp đối tượng điều khiển không quá phức tạp, sử dụng kỹ thuật này có thể gây dừng quá trình ngoài ý muốn. Bạn cũng có thể tham khảo bộ MSDN, \MSDN\2001OCT\1033\vb98 .chm::/html/vbproVBTermVBTermvbp .htm, để tìm hiểu thêm về vấn đề này.

    Bạn có thể cải tiến và phát triển chương trình để phục vụ các mục đích điều khiển khác nhau. Tôi rất vui lòng trao đổi thêm thông tin với những ai cùng quan tâm.

    ThS.  Lương Xuân Cương

    luongxuancuong@goithu.com

    Khoa Kỹ Thuật Cơ Sở

    Trường Sỹ Quan CHKT Thông Tin

    Đồng Đế, Nha Trang, Khánh Hòa

    ID: A0208_96
    Ý kiến của bạn? Ý kiến của bạn?
    Tin ngày :

Thuật ngữ