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 16-04-2009, 04:31 PM   #1
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Xóa buffer RS232 help me !!!!

Bạn nào biết chỉ mình cách xóa bộ đệm của RS232 chỉ với. Mình đang lập trình giao tiếp PC và PIC qua RS232, khi nhận dữ liệu từ PIC lên mình muốn là dữ liệu vừa mới được PIC gởi lên vì vậy cần xóa bộ đệm trước thời điểm nhận dữ liệu. Ai giúp mình với .
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-04-2009, 04:45 PM   #2
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
bạn hỏi khó hiểu quá, có ai mà xóa bộ đệm RS232 bao giờ đâu. bạn đưa code lên và giải thích thử xem
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 11:30 AM   #3
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Code mình viết bằng VC++ dài lắm đưa lên rồi giải thích code chắc còn khó hiểu hơn.
Mình chỉ muốn hỏi là có cách nào dùng code VC++ xóa bộ đệm RS232 kô và làm như thế nào ?
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 03:02 PM   #4
ngohaibac
Đệ tử 9 túi
 
ngohaibac's Avatar
 
Tham gia ngày: Oct 2005
Nơi Cư Ngụ: BKHN
Bài gửi: 231
:
Send a message via Yahoo to ngohaibac
Thiết lập cho đọc hết buffer mỗi lần có ngắt xảy ra là xong. Xem lại tham số của Mscomm.
ngohaibac vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 04:18 PM   #5
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
Bạn nói đọc hết buffer mỗi lần ngắt là xong thì có vẽ không đúng yêu cầu của mình đang làm. Ví dụ bạn chưa đọc hết buffer của ngắt trước mà lại có ngắt tiếp theo xãy ra thì vẫn còn rác trong buffer. Ý mình là mỗi khi có ngắt xãy ra thì xóa buffer và buffer chỉ chứa dữ liệu của ngắt mới nhất mà thôi.
Mình mới viết giao tiếp PIC lần đầu nên còan nhiều điều chưa hiểu lắm. Bạn nói ngắt ở đây là ngắt trên PC hay ngắt trên PIC. Ngắt trên PIC khí có dữ liệu từ PC gởi xuống từ RS232 thì mình làm rồi. Còn ngắt khi có dữ liệu từ PIC gởi lên PC qua RS232 thì mình kô biết xãy ra khi nào hết và dùng cái gì để nhận biết.
Ai có tài liệu về ngắt này hay là buffer RS232 DB9 share mình với. thanks!
ThaoBinh90 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 06:33 PM   #6
cskiller
Đệ tử 4 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 89
:
Trích:
Nguyên văn bởi ThaoBinh90 View Post
Bạn nói đọc hết buffer mỗi lần ngắt là xong thì có vẽ không đúng yêu cầu của mình đang làm. Ví dụ bạn chưa đọc hết buffer của ngắt trước mà lại có ngắt tiếp theo xãy ra thì vẫn còn rác trong buffer. Ý mình là mỗi khi có ngắt xãy ra thì xóa buffer và buffer chỉ chứa dữ liệu của ngắt mới nhất mà thôi.
1. Với tốc độ của PC so với PIC và RS232 thì dư sức đọc hết, thậm chí cả xử lý xong hết đống dữ liệu trước khi có ngắt mới xảy ra.
2. Về nguyên tắc Windows sẽ không cho phép ngắt liên tiếp RS232 khi ngắt trước đó chưa xử lý xong. Nên yên tâm nếu có ngắt xảy ra nghĩa là đã xử lý xong dữ liệu đã ngắt trước đó.
__________________
Quang báo RG/RGB 6/8/12/16 bits màu
Phone No: 0905.034.086
Email: lmquyen@gmail.com
cskiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-04-2009, 07:23 PM   #7
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
Bạn cho biết cách bạn xử lý dữ liệu khi pc nhận dữ liệu từ pic lên?
Mình đoán bạn đang dùng mảng để nhận dữ liệu qua cổng com ,mà dữ liệu có chiều dài ngắn hơn chiều dài mảng mà bạn khai báo nên thành thử khi bạn nạp mảng lần tiếp theo thì các phần tử củ của mảng (các phần tử dài hơn) vẫn còn giữ giá trị củ phải không?
vd:
bạn khai báo mảng có chiều dài =8.

lần đầu:
pic gửi lên pc :12345678--->thì mảng =[12345678]//ok đúng như ý.

kế đến:
pic gửi lên pc:456--->thì mảng =[45645678]//sai ,đúng ra phải là 45600000

hi vọng có ích cho bạn!
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-04-2009, 10:43 AM   #8
ThaoBinh90
Đệ tử 1 túi
 
Tham gia ngày: Feb 2009
Bài gửi: 19
:
@ cskiller: mình đồng ý với bạn là về tốc độ xử lý và buffer sẽ được đọc xong khi có ngắt tiếp theo. Nhưng mình không biết cách nào để nhận biết biết được có ngắt từ RS232, mình đang viết trên VC++ thì làm sao để thực hiện ngắt mong bạn giúp mình với. thanks.
@ lequocbao: "Bạn cho biết cách bạn xử lý dữ liệu khi pc nhận dữ liệu từ pic lên?" mình không hỏi câu này vì hiện tại mình đọc từng byte từ buffer ra, cảm ơn bạn.
- Hiện tại mình làm giao tiếp giữa PC và PIC: trên PC viết bằng VC ++ 6.0, trên PC gởi lệnh xuống PIC và chờ kết quả trả về từ PIC. PIC thực hiện xong thì gởi kết quả về lại PC. Ở đây là có sự bắt tay giữa 2 bên. Ví dụ:
PC : gởi 4+5 chờ PIC thực hiện gởi kết quả
PIC: thực hiện 4+5 = 9 trả về PC.
- Điều mình muốn mà chưa làm được là như vậy nè:
PC : gởi 4+5
PIC: thực hiện 4+5 = 9 trả về PC hoặc có thể dùng cho thực hiện một lệnh nào khác
PC có một thread riêng nhận kết quả từ PIC và nó không biết khi nào PIC gởi lên, thread này quét liên tục khi nào có ngắt từ RS232 (hiện mình chưa biết ngắt như thế nào)thì thực hiện đọc dữ liệu và thực hiện.
Cảm ơn và mong nhận được giúp đỡ từ mọi người.
ThaoBinh90 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à 04:28 AM.


Đượ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