Trích:
Nguyên văn bởi bluexylitol
Đầ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)
|
Các từ khóa continue không có tác dụng gì trong trường hợp của bạn.
Ở 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,