fabre1kn9x
29-03-2012, 11:19 AM
Em đang học cách sử dụng modul UART của con dspic33fj12mc202, sử dụng phần mềm proteus để mô phỏng. Em đã gửi thành công rồi nhưng còn nhận thì đang gặp khó khăn.
Em sử dụng ngắt nhận để mỗi khi nhận được 1 ký tự thì chương trình nhảy vào ngắt và thay đổi trạng thái ở ngõ ra RB4 để bật tắt led. Nhưng thử nhiều lần mà không được
Đoạn code khởi động modul UART:
//////////////////////////////////////////////////////////////////
void Init_UART()
{
U1MODE=0x8000; // 8 bit, no parity, 1 stop bit
U1STAbits.UTXEN=1; // Cho phep gui//
U1BRG = 64;
RPOR1bits.RP2R=3; // Chon chan RP2 lam chan phat
RPINR18bits.U1RXR=0; // Chon chan RP0 lam chan thu
RPINR18bits.U1CTSR=1; // Chon chan RP1 lam chan Clear to send
RPOR1bits.RP3R=4;// Chan RP3 la Ready to send
_U1RXIE=1; // Cho phep ngat nhan.
U1STAbits.URXISEL=0b00; // Ngat khi co bat ky ki tu nao duoc nhan.
IPC2bits.U1RXIP=0b110; // Uu tien ngat nhan.
_U1RXIF=0; // Xoa co ngat nhan
}
//////////////////////////////////////////////////////////////////////////////
Đoạn code ngắt nhận:
///////////////////////////////////////////////////////////////////////////////
void __attribute__ ((__Interrupt__,auto_psv)) _U1RXInterrupt()
{
int Receive;
_LATB4=~_LATB4;
Receive=U1RXREG;
_U1RXIF=0; // Xoa co ngat nhan
}
////////////////////////////////////////////////////////////////////////////////
Mọi người giúp em với.
Em sử dụng ngắt nhận để mỗi khi nhận được 1 ký tự thì chương trình nhảy vào ngắt và thay đổi trạng thái ở ngõ ra RB4 để bật tắt led. Nhưng thử nhiều lần mà không được
Đoạn code khởi động modul UART:
//////////////////////////////////////////////////////////////////
void Init_UART()
{
U1MODE=0x8000; // 8 bit, no parity, 1 stop bit
U1STAbits.UTXEN=1; // Cho phep gui//
U1BRG = 64;
RPOR1bits.RP2R=3; // Chon chan RP2 lam chan phat
RPINR18bits.U1RXR=0; // Chon chan RP0 lam chan thu
RPINR18bits.U1CTSR=1; // Chon chan RP1 lam chan Clear to send
RPOR1bits.RP3R=4;// Chan RP3 la Ready to send
_U1RXIE=1; // Cho phep ngat nhan.
U1STAbits.URXISEL=0b00; // Ngat khi co bat ky ki tu nao duoc nhan.
IPC2bits.U1RXIP=0b110; // Uu tien ngat nhan.
_U1RXIF=0; // Xoa co ngat nhan
}
//////////////////////////////////////////////////////////////////////////////
Đoạn code ngắt nhận:
///////////////////////////////////////////////////////////////////////////////
void __attribute__ ((__Interrupt__,auto_psv)) _U1RXInterrupt()
{
int Receive;
_LATB4=~_LATB4;
Receive=U1RXREG;
_U1RXIF=0; // Xoa co ngat nhan
}
////////////////////////////////////////////////////////////////////////////////
Mọi người giúp em với.