Hướng dẫn lập trình giao tiếp RS232 trên PC bằng Visual C++ 6.0
April 22, 2008 by ngohaibac
Filed under Visual C++
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.



5 Comments
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 :
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!
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.
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.
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