Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0

Chào các bạn.

Để cho website của mình thêm phong phú, nên mình cập nhật thêm một số tài liệu mà mình đã viết ở các diễn đàn điện tử. Có thể bản quyền vẫn thuộc về diễn đàn, nhưng mình nghĩ đây chỉ là sự chia sẻ cho những người chưa biết, chưa hiểu sâu về vấn đề đó nên chắc là cũng không có vấn đề gì.

Đây là TUT mình viết từ năm thứ 3 trong chương trình đào tạo Moderator của www.picvietnam.com, hướng dẫn viết chương trình giao tiếp máy tính qua cổng RS232 bằng ngôn ngữ Visual C++ 6.0. Đã có nhiều thảo luận về vấn đề giao tiếp nối tiếp tại 2 diễn đàn:

Ngô Hải Bắc, Serial Port - lập trình giao tiếp nối tiếp, www.dientuvietnam.net, 2005

Ngô Hải Bắc, Giao tiếp RS232 trên PC bằng Visual Basic 6.0, www.dientuvietnam.net

Phạm Thái Hòa, Terminal - chương trình cực cool để test cổng COM, www.dientuvietnam.net

Ngô Hải Bắc, Giao tiếp RS232 trên PC qua Matlab, www.picvietnam.com

Ngô Hải Bắc, Giao tiếp RS232 trên PC, www.picvietnam.com

Mình xin gửi các bạn Tutorial này.

TUT01.03.PVN.NOHB.100106.pdf

{ 37 comments… add one }

  • Long October 23, 2008, 1:43 am

    chào anh, em đang làm một BTL môn KT vi xử lý, em đang bí phần giao tiếp qua cổng COM. BTL làm led matrix. Về mạch thì em đã làm được, nếu add code điều khiển trực tiếp vào 89c51 thì đèn đã sáng và có thể hiện chữ cố định.
    Nhưng hiện tại em đang cần 1 chương trình để điều khiển hiện chữ đó, tức là software cho phép nhập chữ và khi nhập chữ thì led hiển thị chữ đó. Em không biết phải lập trình cho chip như thế nào để nó có thể nhận dạng được tín hiệu gửi vào để điều khiển các chân khác.
    Hiện tại ý tưởng của em là chip nhận 1 tín hiệu gì đó sau đó tương ứng tín hiệu đó sẽ truyền giá trị cho các chân khác
    VD : máy tính truyền chữ ‘a’, max232 chuyển thành tín hiệu bit, chân RxD nhận tín hiệu và so sánh với 1 loạt điều kiện, đúng là chữ ‘a’ thì sẽ cho thực hiện câu lệnh hiển thị chữ a lên led matrix.
    Mạch như sau :

    Reply
  • tuan October 23, 2008, 8:00 am

    Mình muốn viết chương trình bằng ngôn ngữ C nhận dữ liệu qua cổng com. Bạn có thể cho mình biết các hàm có liên quan được không? Chứ viết bằng VB thì dễ quá nhưng ứng dụng nó vào thực tiễn liên kết các chương trình lớn thì không nhiều!
    Chờ thư bạn.
    Cảm ơn!

    Reply
  • Long October 28, 2008, 12:57 pm

    Em đã cho giao tiếp được giữa PC và 89c51 qua max232, nhưng em không biết giá trị của biến nhậnn được như thế nào để xử lý tiếp.
    Về máy tính em dùng C#, sử dụng hàm serialPort1 .WriteLine (textBox1.Text); để gửi 1 chữ cái đi.
    Về VXL thì em viết = C :
    void receive_data() interrupt 4
    { if(RI==1){
    RI=0;
    uart_data_receive=SBUF;
    }}

    nhưng em không biết sau khi nhận thì uart_data_receive có giá trị như thế nào để thực hiện tiếp lệnh : if(uart_data_receive==’a’) P1_7=0×00;

    ———————
    Ngoài ra, với hàm gửi dữ liệu của VXL :
    void send_data(char uart_data)
    {
    TI=0;
    SBUF=0x00;
    SBUF=uart_data;
    while(TI==0){}
    TI=0;
    }
    main()
    { dataa='a';
    send_data(dataa);
    }

    và hàm nhận của C# :
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(dulieuden);
    private void dulieuden(object sender, SerialDataReceivedEventArgs e)
    { data = "";
    data = serialPort1.ReadExisting();
    textBox2.Text = data;
    }

    thì textbox2 toàn ra dấu ‘?’ hoặc ‘&’

    ————————————–
    Anh chỉ cho em 2 vấn đề này với.
    Mạch nối của em như sau :
    http://img508.imageshack.us/img508/1192/machmi4.jpg

    Reply
  • tpasterisk March 22, 2009, 4:18 am

    Anh à, em đang tìm hiểu về tập lệnh AT, em không biết cách truy xuất những dòng lệnh AT này ra cổng COM như thế nào để co1 thể truyền ra modem , để em có thể gửi và nhận tn nhắn.
    Nếu anh có tài liệu hay bài viết nào hay thì giới thiệu cho em với, để em có thể xem tham khảo. Cám ơn anh rất nhìu !!!!!!!!!!!!!!!!!1

    Reply
  • vu tuan dat September 8, 2009, 11:58 pm

    Chào Anh! Em cũng đang muốn tự mình làm giao tiếp máy tính với Vi điều khiển để truyền và nhận dữ liệu, nhưng tự tìm hiểu thấy khó quá.Em cũng không hiểu đoạn mã sau trong VB6 viết thế là như thế nào?Và nếu mình sử dụng nó thì phải đặt vào đâu trong VB.Mong được sự giúp đỡ của Anh!
    Em copy đoạn Code này vào nhưng không biết nhét vào đâu.
    VERSION 5.00
    Begin VB.Form Form1
    Caption = “Printer Interface Example”
    ClientHeight = 4665
    ClientLeft = 60
    ClientTop = 345
    ClientWidth = 3585
    LinkTopic = “Form1″
    ScaleHeight = 4665
    ScaleWidth = 3585
    StartUpPosition = 3 ‘Windows Default
    Begin VB.CommandButton cmdReceive
    Caption = “Receive”
    Height = 495
    Left = 1200
    TabIndex = 18
    Top = 3960
    Width = 1095

    Reply
  • quang hai November 27, 2009, 10:34 am

    bác giúp em với,viêt chương trình cho việc: kết nối cổng Com của máy tính với với 1 cổng nào đó của vi điều khiển họ 8051 để truyền dữ liệu từ máy tính gửi xuống. .
    em có sơ đồ mạch trên protues7.1 rồi nhưng thiếu đoạn code để cho chạy nữa thôi., và cho em đọan code 8051 truyền dữ liệu lên máy tính để em so sánh, thanks nhiều

    http://www.mediafire.com/?nmttkmm454z

    sơ đồ mạch ở đây.

    Reply
  • Phạm Việt Tiến January 13, 2010, 2:31 am

    Cho tôi gửi lời cảm ơn đến anh đã giúp đỡ mọi người rất nhiều.
    Tôi có 2 vấn đề khi làm theo chỉ dẫn của anh (TUT01.03.PVN.NOHB.100106.pdf):
    1. com port không đóng khi nhấn nút Exit (máy tôi không có cổng com nên dùng com ảo, chuyển đổi từ USB sang COM)
    2. nối tắt chân 2 và 3 của cổng COM cũng không nhận được gì.
    Anh vui lòng giải thích dùm.
    Cảm ơn anh
    Làm sao để gửi cho anh source để anh xem giúp nhỉ?

    Reply
  • thành January 14, 2010, 9:21 pm

    em chào anh Bắc em đang làm mạch về led ma trận có thể giao tiếp được với máy tính mạch của em dùng con 89s52 ma trận led 8*8 có thể dùng tới 5 ma trận em chưa có tài liệu nào anh có thể giúp em chứ ạ
    nếu có tài liệu anh có thể gửi cho em ở địa chỉ: chirikatori.lonely@yahoo.com
    em cảm ơn anh nhiều

    Reply
  • caodung April 6, 2010, 9:25 pm

    anh Bắc ơi,up lại hộ em file TUT01.03.PVN.NOHB.100106.pdf, giúp em cái, em đang cần gấp,cám ơn anh nhiều,anh có thể gửi vào gmai hộ em ạ!

    Reply
    • ngohaibac April 7, 2010, 2:09 am

      Hiện tại dientuvietnam.net và picvietnam.com đang bị down, để a xem lại máy anh xem để chỗ nào, rồi mới up lên lại cho em được em ạ. May quá, anh tìm lại được chỗ này: http://www.scribd.com/doc/6998882/TUT0103PVNNOHB

      Em vào xem đi nhé.

      Chúc em thành công.

      Reply
    • huu August 27, 2010, 10:36 am

      How to do capture image in every 5 seconds from webcam by matlab

      Reply
  • caodung April 7, 2010, 1:50 pm

    em cám ơn anh bắc nhiều nhé..

    Reply
  • HUY June 2, 2010, 7:57 am

    Xin chao! Toi moi mua may cham cong van tay, trong do co day cong RS232 nhung toi ko the down dc du lieu thu may cham cong ve may tinh! toi da rap rap dung cong, neu su dung day cap mang va usb toi van down dc!may cham cong cua toi la smart tk-700fc! hay giup toi!cam on!

    Reply
    • ngohaibac June 5, 2010, 11:47 am

      Bạn muốn giúp đỡ thế nào ?

      Reply
  • Huy June 8, 2010, 10:12 am

    minh dung Winxp! minh da co san day cổng COM232 nối thẳng vào máy chấm công!ko có thiết bị phụ trợ nào cả!mình muốn down dữ liệu về máy thì cần làm những bước ntn? Rất cảm ơn bạn!

    Reply
  • Nguyễn Văn Phương July 31, 2010, 5:11 pm

    xin chào anh Bắc.Em thấy anh rất rành về vi điều khiển đọc nhiều bài trên picvietnam và dientuvietnam em thấy anh còn rất rành về visual basic 6.Em muốn học hỏi anh 1 chút về phần giao tiếp giữa Pic và máy tính nhưng bằng visual basic 2005 hoặc 2008.Tìm rất nhiều lầm trên mạng nhưng ko ai chịu port bài hay hướng dẫn về phần này.
    về Píc thì em tạm ổn rồi.chỉ còn chương trình VB là hơi mắc do không có tài liệu về vb2008 (phần giao tiếp)
    Nếu anh có tài liệu học tập gì thì gửi cho em nhé.mail :minhphuong2004@gmail.com
    cảm ơn rất nhiều.

    Reply
  • Nguyen huu Tung October 22, 2010, 10:30 am

    Em chào anh !
    Em đang làm đồ án về phần giao tiếp máy tính(dùng visual basic) với vi điều khiển để điều khiển van mở chất lỏng và giám sát quá trình hoạt động của van và hiển thị van hoạt động như thế nào trên máy tính.
    Em đang ko biết làm như thế nào
    Mong anh giúp em với
    Em cảm ơn anh.

    Reply
  • Linh December 21, 2010, 11:30 pm

    Anh Bắc cho em hỏi tý, em đang tạo một giao diện MFC trong Visual C++ 2008 để giao tiếp qua cỏng COM, tuy nhiên em lại không thấy biểu tượng mscomm control để đưa vào form cả, anh có thể giúp em đc không?

    Reply
  • Q. Chiến April 6, 2011, 6:15 pm

    Chào anh Bắc!
    Em đọc các bài viết của anh trên dientuvietnam về TUTRS232 của anh rất hay, em đã dựa theo ứng dụng của anh để làm một bài tập đơn giản hơn đó là truyền dữ liệu giữa PC và 89c51.
    Cụ thể ứng dụng của em như sau: Khi bật điện thì trên editbox của giao diện hiển thị giá trị port1 của vdk lên, 2 led trên vdk tắt. Khi nhấn nút Led1 thì led1 trên VDK sáng, nhấn nút Led2 thì led 2 sáng và led 1 tắt. Em gửi được dữ liệu xuống để điều khiển 2 led sáng nhưng không gửi giá trị của port1 lên hiển thị trên PC được.
    Em có gửi anh file mô phỏng proteus và file của VC++ với giao diện của nó. Em cũng gửi kèm chương trình tạo cổng com ảo để anh mô phỏng.
    Anh xem qua và có thể cho em biết được chương trình của em bị sai ở chỗ nào nhé, nếu được anh sửa luôn giúp em.
    Cám ơn anh thật nhiều.
    PS: Anh giúp em với tại vì em đang chuẩn bị làm đồ án môn học 2 “Đo nhiệt độ và hiển thị trên PC dùng one wire”.
    Đây là link:
    http://www.mediafire.com/?ci68nyrbywyrtrv
    http://www.mediafire.com/?d5uk35ayr669r7v

    Reply
  • caothanhtan April 6, 2011, 10:13 pm

    ĐIỀU KHIỂN VÀ GIÁM SÁT THIẾT BỊ TỪ XA (TRYUỀN VÀ NHẬN DỮ LIỆU )

    I. Yêu cầu phần cứng:
    Hệ thống được thiết kế gồm hai board mạch: board mạch phát gồm Module HM-TR/TTL giao tiếp với VI ĐIỀU KHIỂN và board mạch thu gồm Module HM-TR/232 giao tiếp với máy tính qua cổng COM DB9( chuẩn RS232).
    II. Yêu cầu phần mềm:
    Các phần mềm phải đảm nhiệm là trung tâm xử lý hệ thống, vận chuyển và lưu tín hiệu tam thời trên VĐK trong quá trình truyền và nhận.
    III. Hướng giải quyết:
    Em sẻ sử dụng phần mềm VISUAL BASIC để lập trình, để viết giao diện giao tiếp.
    IV: Kết quả, tạo ra được một File.exe cài trên bất cứ máy tính nào cũng chạy được và thực hiện tốt việc giao tiếp của hai Module trên với máy tính.
    Phần lập trình phần mềm VISUAL BASIC nhóm của Em chưa làm được.

    XIN CÁC ANH HƯỚNG DẪN THÊM.

    Reply
  • nguyen hong nam May 3, 2011, 9:03 am

    anh co tai lieu nao ve lap trinh vb de dieu khien led 7 doan khong anh.

    Reply
  • Lanphuong June 18, 2011, 2:37 pm

    Chào anh bắc!
    Em viết chương trình giao tiếp avr với matlab. Em đã gửi được từ matlab đến AVR nhưng em gửi ngược lại để hiển thị trên gui của matlab thi không được.Mong anh sửa giúp em đoạn code này nhé.
    function pushbutton1_Callback(hObject, eventdata, handles)
    clear all;
    s = serial(‘COM2′);
    set(s,’BaudRate’,9600);
    fopen(s);
    b=fscanf(s);
    set(handles.edit1,’String’,b);
    fclose(s)
    delete(s)
    clear s

    Reply
  • Hoàn vũ July 23, 2011, 10:30 pm

    Em đang làm về Đếm và phân loại SP trắng và đen Giao tiếp PIC 16F877A voi PC sử dụng VB. Em đã truyền được dữ liệu lên PC nhưng hiển thị không đúng ,xin mấy huynh chỉ em hướng giải quyết. Đây là file gồm Chương trình , mô phỏng bàng proteus và VB. http://www.mediafire.com/?195d8sza5tcjubg
    Huynh nào rảnh xem và chỉ em hướng giải quyết Mail của em : vuhoan_vu@yahoo.com

    Reply
  • VanBinh September 27, 2011, 9:34 am

    Chào Anh Bắc! Tụi em đang làm đồ án MatLab đề tài về tạo từ điển viễn thông.Anh có thể giúp tụi em viết code không.khâu tạo gui tụi em làm xong rồi mà viết code bị lỗi nhiều lắm.

    Reply
  • don October 29, 2011, 6:52 am

    chao cac anh em muon mo phong hoat dong mot may tinh em ko biet dung vb co dc ko, cho em it video ve cach lam tren vb

    Reply
  • don October 29, 2011, 7:04 am

    cac anh giup em lam mo phong voi vb voi, mail cua em kedi_tim2020@yahoo.com

    Reply
  • Pham/hai November 3, 2011, 10:53 pm

    a cho em hỏi là bây gjo em muốn nạp ct cho 89c51 bằng C++ thi em nạp ct như bt đối với điều khiển Led đơn bằng fine hex phải không a,hay bằng cách nào vậy,xin a giup đỡ………..thanhs a nhieu.

    Reply
  • phap December 4, 2011, 1:55 pm

    Anh Bắc có thể hướng dẫn cách sent 1 kí tự qua rs 232 bằng VC++2008 trong môi trường window, tức viết trực tiếp trong cửa sổ lệnh luôn thay vì dùng MFC không…tìm hết mà không thấy tài liệu nào nói về vấn đề này. cảm ơn anh !!!

    Reply
  • hackerbaria May 21, 2012, 8:21 am

    e đang làm đồ án mạch đếm sản phẩm giao tiếp máy tính ( cổng com bằng phần mềm visual basic, sử dụng AT89c51) .. a e nào biết sơ đồ nguyên lý, code chương trình giúp e với..tks

    Reply
  • Thành Nguyên June 10, 2012, 3:30 pm

    chào ngohaipac bạn xem giúp mỉnh chương trình dưới đây xem nó bị lỗi gí
    thực ra mình làm được phần truyền dữ liệu từ máy tính xuống vdk rùi
    nhưng truyền từ vdk len may tinh thì khong duoc
    dây là mach mo phong và chương trình cua mình bạn xem giúp nhé rùi cho ý kiến (truyền từ vdk lên máy tính)
    vb————————————————————————————————
    Private Sub cmdgui_Click()
    Dim n As Variant
    MSComm1.Output = Text1.Text

    End Sub

    Private Sub Form_Load()
    With MSComm1
    .CommPort = 1
    .Settings = “9600,n,8,1″

    .InputLen = 0
    .RThreshold = 1
    .SThreshold = 1
    .PortOpen = True
    End With

    End Sub

    Private Sub MSComm1_OnComm()
    Dim s As String
    If MSComm1.CommEvent = comEvReceive Then
    s = MSComm1.Input
    Text2.Text = Text2.Text + s
    End If

    End Sub
    code 89c51 kelic————————————————————————
    #include
    #include
    void khoitaotmod()
    {
    SCON =0×52; // Port noi tiep che do 1, REN =TI =1;
    TMOD = 0×20; //Timer 1 mode 2
    TH1 = TL1 = 0xfd; // Toc do baud la 9600
    TR1 =1;
    EA=1;
    ES=1;
    }
    void main(void)
    {
    int x;
    khoitaotmod();
    x = 65;
    while( !TI); // Cho TI =1;
    TI=0; //Xoa TI
    SBUF = x; // Truyen byte du lieu

    }
    mạch—————————————————————————————————————

    Reply
  • Nguyễn Văn Việt September 16, 2013, 8:53 pm

    có ai biết giao tiếp pc vs pic bằng c++ 2010 viết trên mfc ko? chỉ mình với

    Reply
  • Nguyễn Văn Việt November 6, 2013, 10:51 pm

    đúng là viết trên c++ cơ mà của 2008 ko có cái mscomm đó. phải tải mscomm32.ocx rồi còn đăng ký vào registry nữa. rồi để có đc cái biểu tượng cái điện thoại thì phải add thêm vào project nữa. cơn mà mình tìm cái chỗ add vào chưa có được @@

    Reply
  • hoanghao June 7, 2014, 9:56 pm

    Em muốn gửi dữ liệu từ C# qua VDK Pic 16f877a thì cùng câu lệnh ntn? anh chị cho em biết được không a.

    Reply
  • ngohaibac October 25, 2008, 10:49 pm

    Chào bạn.

    Hướng dẫn của mình là viết trên Visual C++ mà bạn. Nếu bạn dùng C thì hơi khó chịu một chút, bởi vì không có thư viện để truy nhập vào RS232 bạn ạ. Ngày trước dùng Win98 thì có thể truy nhập thoải mái nhưng mà đến Windows XP hoặc cao hơn thì hơi khó.

    Có 2 cách phổ biến là dùng MSComm active X hoặc dùng các hàm API.

    Chúc bạn thành công.

    Reply
  • ngohaibac October 25, 2008, 10:52 pm

    Chào em.

    Đơn giản thôi mà em. Em truyền các byte xuống và VDK sẽ so sánh thôi mà. Em cần nghiên cứu lại cơ chế truyền byte của UART nhé. Có 2 mode truyền là binary hoặc string.

    Chúc em thành công.

    Reply
  • nguyen ngoc quang October 21, 2009, 12:19 am

    Anh ơi em có một bài toán như sau anh thử xem có cách nào giúp đỡ em dc ko?
    bọn em đang viết 1 chương trình bằng visual studio 2008 , viết trên c++ để điều khiển động cơ thông qua con VDDK.
    Anh có thể chỉ cho em cách giao tiếp chương trình C++ gửi dữ liệu xuống cổng COM được khong ạh?
    Cảm ơn anh
    Mong sớm nhận được hồi âm của anh.

    Reply

Leave a Comment