Bạn thử chương trình sau nhé, tôi dùng C30 Student Edition, dịch với optimization level 1. Chương trình sau chờ nhận một ký tự qua UART1, sau đó gửi trả ký tự đã nhận cũng qua UART1.
Code:
void Init_UART1_Module(void);
unsigned short temp;
int main(void) {
Init_UART1_Module();
while (1);
}
void Init_UART1_Module(void) {
U1BRG = (((8000000/9600)/16)-1); //9600 bps @ Fcy = 8 MHz
U1MODE = 0x8000; //Main I/O, 8-bit, no parity, 1 stop bit
// U1MODE = 0x8400; //Alt I/O, 8-bit, no parity, 1 stop bit
U1STA = 0x0400; //Interrupt when a character is received
// U1STA = 0x04C0; //Interrupt when rec. buffer is full
_U1RXIF = 0; //Clear the interrupt flag
_U1RXIE = 1; //Enable UART1 Receive Interrupt
IPC2bits.U1RXIP = 4; //UART1 Receiver Interrupt at priority 4
}
void _ISR _U1RXInterrupt(void) {
temp = U1RXREG;
U1TXREG = temp;
_U1RXIF = 0; //Clear the interrupt flag before returning
}
Thân,