PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp cổng COM và LPT

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp cổng COM và LPT RS232, RS485 và LPT là những giao tiếp cơ bản và kinh điển khi mới học về vi điều khiển...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 07-07-2009, 03:24 PM   #1
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Làm thế nào để 1 chuơng trình VC++ có thể nhận biết có data như "Tera Term"

- Mình đang lập trình giao tiếp PIC với PC, dùng VC++6.0 để viết chương trình ứng dụng giao tiếp với PIC.
- Hiện tại đang gặp khó khăn trong trường hợp PIC chủ động gởi dữ liệu lên PC, mình không biết lập trình trên VC++6.0 như thế nào để có thể nhận biết được là đang có data trên cổng COM như các chương trình Tera Term hay hp Terminal của window.
Mong được giúp đỡ! thanks!
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2009, 12:07 AM   #2
debugger
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 45
:
Cái này bạn nên lập trình đa nhiệm (dùng thread). Bạn tạo ra một thread để quản lí cổng COM. Thread và chương trình chính liên lạc với nhau bằng cơ chế message (hàm SendMessage hoặc PostMessage) Nếu bạn muốn kiểm tra xem có dữ liệu trong bộ đệm hay không thì có thể có 2 cách làm:
1. Dùng hàm WaitForSingleObject, hoặc
2. Liên tục đọc cổng COM bằng hàm ReadFile để biết có dữ liệu hay không. Số byte đọc được lớn hơn 0 thì có dữ liệu.

Mình nghĩ nếu chịu khó bạn hoàn toàn có thể làm những chương trình tốt hơn Tera Term gì gì đó.

Nếu gặp khó khăn trong việc này mình có thể soạn cho bạn một thư viện DLL để làm việc này rất đơn giản. Goodluck!
debugger vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2009, 11:03 AM   #3
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Thanks bạn nhiều!
Tạo Thread liên tục đọc cổng COM thì mình cũng có nghĩ tới nhưng mình thấy không hay lắm vì đọc liên tục. Tại mình thấy dưới PIC có ngăt #INT_RDA khi có dữ liệu từ r232 thì phát sinh ngắt. Không biết là trên PC khi có dữ liệu đến rs232 thì có message báo cho mình biết hay không (giống như qua RJ45 là biết được có data gởi đến).
Còn bạn nói dùng hàm WaitForSingleObject thì mình chưa thử.
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2009, 12:10 PM   #4
debugger
Đệ tử 2 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 45
:
Thế thì bạn thử hàm WaitForSingleObject đi. Đây chính là cách làm theo kiểu đợi ngắt đấy. Tuy nhiên có một điểm bạn cần chú ý là thế này trên Windows khi đợi ngắt thì chương trình sẽ không chiếm CPU mà thôi, chứ nó vẫn bị dừng lại như kiểu delay ý. Vì vậy, bạn nên tạo ra một nhánh và ở nhánh này có thể đợi ngắt hoặc hỏi vòng đều được, không ảnh hưởng đến chương trình chính (phần giao diện người dùng chẳng hạn). Mình đã làm với cái này rồi nên biết. Bạn có thể xem chương trình bootloader cho AVR (Blasher) của mình của mình ở bên dientuvietnam. Trong chương trình này mình dùng nhánh và hỏi vòng, không dùng WaitForSingleObject.
debugger vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 08-07-2009, 03:49 PM   #5
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Mình không tìm thấy code bootloader tren dientuvietnam như bạn nói, bạn có thể post lại ở đây được không?
cảm ơn!
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-07-2009, 09:53 PM   #6
anh_tran
Nhập môn đệ tử
 
Tham gia ngày: Nov 2007
Bài gửi: 8
:
bạn dùng thư viến MSCOM đó nó có mấy hàm oncom là một dạng ngắt đó
anh_tran vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:14 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam