|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
|
Ðiều Chỉnh | Xếp Bài |
19-09-2010, 04:59 PM | #1 |
Đệ tử 4 túi
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
: |
Chông treo PIC khi dùng RS232
Tôi đang sử dụng 2 con PIC6F877A truyền dữ liệu cho nhau. Để chống vấn đề sai số khi truyền và nhận thường kiểm tra như sau:
putc(1 ký tự); c = getc(); Trong trường hợp việc truyền và nhận không hoàn hão thì pic bị treo tại dòng lệnh C = getc() Bác nào có cách nào giải quyết điều này xin chỉ giáo Cám ơn nhiều. thay đổi nội dung bởi: 0903579509, 19-09-2010 lúc 06:47 PM. |
19-09-2010, 08:27 PM | #2 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
__________________
Windows CE 6 R3 |
|
20-09-2010, 06:54 AM | #3 |
Đệ tử 4 túi
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
: |
Bạn có thể viết cụ thể hơn được không. Theo tôi nghỉ cũng rất khó, bởi vì trong CCSC dòng lệnh c = getc() được dịch qua ASM như sau:
0061 btfss 0C.5 0062 goto 0061 0063 movf 1A,W 0064 movwf 43 Như vậy khi chưa nhận đủ một Frame thì bit 0C.5 (rcif) chưa được set, vòng lặp cứ lặp đi lặp lại tại địa chỉ 062 - 061 - 062 mà không thể thoát ra được. Vậy có cách nào để thoát ra không ? |
20-09-2010, 09:04 AM | #4 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
20-09-2010, 10:27 AM | #5 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
__________________
Windows CE 6 R3 |
|
20-09-2010, 02:14 PM | #6 | |
Đệ tử 4 túi
Tham gia ngày: Mar 2007
Nơi Cư Ngụ: Da Nang
Bài gửi: 69
: |
Trích:
Giải pháp như sau: Sau khi putc(1 ký tự) thì bật Timer2, khi Timer2 chảy đủ 50ms thì set bit cờ (timeout chẳng hạn). nhiệm vụ của code là : loop: if (rcif) { nhận byte data} else if (! timeout) { goto loop) else { báo lỗi} Sau khi thực hiện xong nhiệm vụ thì tắt Timer2. Mỗi byte truyền đi đều phải thực hiện công việc như vậy thì phức tạp quá. Không biết có bạn nào có cách gì đơn giản hơn không? Cảm ơn các bạn nhiều. |
|
Ðiều Chỉnh | |
Xếp Bài | |
|
|