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

April 22, 2008

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

Các bài viết liên quan:

  1. Lập trình giao tiếp RS232 qua Matlab Chào các bạn. Mình xin tổng hợp lại một số bài viết của mình về lập trình giao tiếp RS232 trên PC bằng phần mềm Matlab. I. Đối tượng Serial Object Việc giao tiếp này cũng rất dễ dàng thực hiện, không có gì là quá cao siêu cả. Mình đã giao tiếp thành công [...]...
  2. Thư viện giao tiếp RS232 cho PIC18 bằng HTPIC18 Đây là thư viện viết cho vi điều khiển PIC dòng PIC18 bằng HTPIC. Thư viện được tạo dựa vào Datasheet của PIC18. Đã test với PIC18F4680, PIC18F4431 File Header: UART.h // UART.h //============================ #ifndef _UART_H #define _UART_H //============================= #include "pic18.h" #include "sysdef.h" //============================= // Declare sosme functions void UART_Init(unsigned int BaudRate); // Initialize for [...]...
  3. Quản lý và build Project với trình dịch HTPIC bằng Visual C++.Net 2005 Chào các bạn. Bài này mình viết lâu rồi nhưng thấy rất hay nên post lại cho các bạn. Các bạn dùng qua Visual C++ 6.0 và Visual C++.Net đều thấy tác dụng quản lý Project và gợi ý code rất là hay. Khi dùng ta sẽ không sợ quên hàm này, hàm kia.Quản lý [...]...
  4. Lập trình giao diện GUI trong Matlab (Phần 1) Mình viết bài này để tổng hợp lại các hướng dẫn về thiết kế giao diện GUI trong Matlab để các bạn dễ dàng thực hiện. Phần mềm: Matlab R2007a Bài đầu tiên mình sẽ giới thiệu các bạn giao diện GUI. 1. Mở phần mềm Matlab, gõ lệnh sau vào cửa sổ Command >> [...]...
  5. Hướng dẫn lập trình C cơ bản đến nâng cao trên nền Unix Image via Wikipedia Các TUTs này không dài nhưng diễn tả đầy đủ những kiến thức cần thiết để tự học lập trình C với các trình biên dịch thông dụng GCC, cách tạo makefile, lập trình đa nhiệm multithread, ... Trang web này cũng là địa chỉ tham khảo của nhiều lập trình viên [...]...
  6. Video hướng dẫn lập trình GUI: tạo 1 máy tính đơn giản Chào các bạn. Sau một thời gian dùng Matlab, cũng như trả lời trao đổi của các bạn dùng Matlab để tạo giao diện ứng dụng để báo cáo đề tài, luận văn, ... Vì thế, mình dự định là sẽ tự thu một vài video tutorial hướng dẫn cách lập trình, cũng như một [...]...

{ 28 comments… read them below or add one }

Long October 23, 2008 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 10:36 am

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

Reply

caodung April 7, 2010 at 1:50 pm

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

Reply

ngohaibac April 7, 2010 at 2:31 pm

Không có gì em :)

Reply

HUY June 2, 2010 at 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 at 11:47 am

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

Reply

Huy June 8, 2010 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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 at 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

ngohaibac October 25, 2008 at 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 at 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 at 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

Previous post:

Next post: