![]() |
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. |
Trích:
Thân, |
Đầ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) |
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, |
2 Attachment(s)
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 |
@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 |
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 |
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
|
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 .
|
Trích:
Thân, |
Múi giờ GMT. Hiện tại là 03:27 PM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam