![]() |
|
Tài trợ cho PIC Vietnam |
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... |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: Jan 2007
Bài gửi: 79
: |
Cho hỏi về cách thức nhận dữ liệu giao tiếp qua cổng COM
Mình đang xài PIC 16f877a và định viết một chương trình nhỏ thử truyền dữ liệu trên máy tính qua cổng COM xuống PIC qua chân RC7.
Chương trình trên máy tính : Code:
....... mscomm1.output="2"=> ý định là truyền mã ascii 32H xuống PIC ....... Code:
... .... char c; #INT RDA void Receive_isr() { c=getc(); =>ý định là "bắt" ký tự truyền xuống } void main() { while(1) { portB=c; } } Bây giờ mình thử truyền 2 ký tự liên tiếp trên máy tính Code:
....... mscomm1.output="25"=> ý định là truyền mã ascii 32H và 35H xuống PIC ....... Code:
... .... char c; #INT RDA void Receive_isr() { c=getc(); =>ý định là "bắt" ký tự thứ 2 (tức là 35H truyền xuống) hiển thị ra PortB } void main() { while(1) { portB=c; } } sau đó máy tính lại truyền tiếp byte thứ 2 là 35H xuống, ngắt lại xảy ra biến c lại nhận giá trị mới đó tức là 35H. Vì thời gian nhận 2 byte gửi xuống là rất nhanh. Do đó chỉ có thể nhìn thấy giá trị 35H trên port B thông qua 8 led. Thế nhưng kết quả lại không đúng ( kết quả gì đó ko biết được). Mình thật sự không hiểu quá trình nhận 2 byte liên tiếp đó diễn ra như thế nào và làm sao để nhận đúng một chuổi các byte liên tục truyền từ máy tính xuống lưu vào một mảng nào đó. Nhờ bạn nào đó có kinh nghiệm chỉ giúp. Xin cảm ơn. |
![]() |
![]() |
|
|