![]() |
|
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 |
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 28
: |
Lỗi UART trong PIC16f877A
Mình làm việc với con PIC16F877A. Mình dùng thạch anh 11.0592M (có nối thêm 2 tụ 33pF). Đã thiết lập dao động mode HS. Trong hàm khởi tạo uart mình khởi tạo như sau:
BRGH=1;//High Speed Mode //SPBRG=FOSC/(16*Baud rate)-1 SPBRG=11059200/(16*9600)-1; //Transmit SPEN=1;//Serial Port enabled SYNC=0;//EUSART Mode is Asynchronous TXEN=1;//Transmit enabled TX9=0;//8 bit transmission TXIE=0;//inturupt disabled //Receiver SPEN=1;//Serial Port enabled SYNC=0;//EUSART Mode is Asynchronous CREN=1;//Receiver enabled RX9=0;//8 bit reception RCIE=0;//inturupt disabled Tuy vậy khi giao tiếp với PC qua RS232, mình có nhận được dữ liệu gửi lên và xuống, tuy nhiên mình gửi 1 ký tự thì lại hiện vài ký tự. Mình không biết chương trình của mình sai chỗ nào, các bạn góp ý mình với. Thanks. |
![]() |
![]() |
![]() |
#2 | |
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 |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 28
: |
Đầu tiên e cám ơn bác namqn vì bác luôn tận tình giúp đỡ!
Đoạn code gửi nhận ký tự của em thế này, em không dùng ngắt: //function name: putch_uart //Description: send a character to serial port //return: none void putch_uart(unsigned char byte){ /* output one byte */ while(!TXIF) /* set when register is empty */ continue; TXREG = byte; } //////////////////////////////////////////////////////////////// //function name: getch_uart //Description: get a character from serial port //return: received character unsigned char getch_uart(void){ /* retrieve one byte */ while(!RCIF) /* set when register is not empty */ continue; return RCREG; } //////////////////////////////////////////////////////////////// //function name: getche_uart //Description: get a character and resend the character via // serial port //return: received character unsigned char getche_uart(void){ unsigned char c; putch_uart(c = getch_uart()); return c; } trong hàm main e viết thế này (trích) { //... putch_uart('D'); while(1) getche_uart(); //.. } thì ký tự nhận được không phải là D mà là cụm ba 00 00 FC hàm getche_uart() cũng gửi về ký tự không giống ký tự gửi lên. Em cũng gửi từ PC xuống ký tự D thì nhận được từ PIC lên hoặc là E0 hoặc là 00 (E chọn phần mềm quan sát trên PC là Terminal, và set up baud là 9600) |
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
Ở main(), bạn chỉ nên xuất một ký tự và chờ nhận 1 ký tự, không nên đặt lệnh gọi hàm getche_uart() vào vòng while (1). Theo hiện tượng bạn đã mô tả, tôi cho là baud rate hai bên không giống nhau. Bạn hãy kiểm tra lại tốc độ xung clock của PIC xem có đúng như bạn đang giả thiết hay không. 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 |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 28
: |
Em vẫn chưa giải quyết được vấn đề này, cho em hỏi dùng thạch anh ở mode HS có cần nối thêm điện trở Rs giữa điểm giao của thạch anh và tụ với chân OSC2 của PIC ko?
P/s: Em đính thêm file cho rõ thông tin em hỏi |
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Aug 2009
Bài gửi: 28
: |
@namqn and mọi người:
Em giải quyết được rồi, Em dùng HiTech Compiler, nó không biên dịch chính xác được dòng lệnh: SPBRG=11059200/(16*9600)-1; Hi vọng mọi người biết và rút kinh nghiệm |
![]() |
![]() |
![]() |
#7 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
giao tiếp 16f877 và PC dùng VB
các anh có thể vui lòng xem giúp em chỗ nào sai hay thiếu với , em đang tập giao tiếp máy tính em chẳng thấy gì xảy ra hết.
http://www.mediafire.com/?sharekey=5...d0568e5b24962e |
![]() |
![]() |
![]() |
#8 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
card PCI sang COM
các bạn cho mình hỏi : mình mới gắn thêm cổng com ( com 3 và com 4) dùng card PCI , trước đây mình nạp cho PIC 16f877 bằng com 1 thì không có vấn đề gì ,nhưng giờ mình dùng com 3 hoặc com 4 để nạp thì không được.Ai biết làm ơn chỉ giúp mình với . Mình hỏi nhiều người rồi .Rất cảm ơn các bạn
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
Tôi dùng WinPIC Programmer của anh Nam , thì đã nạp được qua cổng COM 4 ( PCI card). Cảm ơn anh Nam.Dùng WinPIC800 thì không được .
|
![]() |
![]() |
![]() |
#10 | |
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 |
|
![]() |
![]() |
![]() |
|
|