16-bit PIC/dsPIC (請註明使用的元件標號):: PIC24EP512GP206 使用 RS485 9600 o,8,1 接收同位檢查問題
目前程式設定如下
void UART_Initial(void)
{
#define FP 66200000
#define BAUDRATE 9600
#define BRGVAL ((FP/BAUDRATE)/16)-1
U1MODEbits.STSEL = 0; // 1-Stop bit
// U1MODEbits.PDSEL = 0x11; // 9-bit data, no parity
// U1MODEbits.PDSEL = 0x10; // 8-bit data, odd parity
U1MODEbits.PDSEL = 0x01; // 8-bit data, even parity
// U1MODEbits.PDSEL = 0x00; // 8-bit data, no parity
U1MODEbits.ABAUD = 0; // Auto-Baud disabled
U1MODEbits.BRGH = 0; // Standard-Speed mode
U1BRG = BRGVAL; // Baud Rate setting for 9600
U1STAbits.UTXISEL0 = 0; // Interrupt after one TX character is transmitted
U1STAbits.UTXISEL1 = 0;
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received;
IEC0bits.U1RXIE = 1; // Enable UART RX interrupt
IEC0bits.U1TXIE = 0; // Disable UART TX interrupt
//IEC0bits.U1TXIE = 1; // Enable UART TX interrupt
U1MODEbits.UARTEN = 1; // Enable UART
//U1STAbits.UTXEN = 1; // Enable UART TX
}
void __attribute__((__interrupt__,auto_psv)) _U1RXInterrupt(void)
{
UINT8 ERRORDATA;
Nop();
RCData = U1RXREG;
if(U1STAbits.PERR == 1)
{
goto U1rxFail;
}
Nop();
Nop();
U1rxFail:
IFS0bits.U1RXIF = 0;
Nop();
Nop();
}
傳送部有確認可依設定自動傳出第 9bit 同位碼,
但接收部分有試過傳送第 9bit 為 odd/even/none 同位結構的資料,
但 U1STAbits.PERR 的判斷一直為"0",無法識別出錯誤資料
求解
![]()
![]()