各位兄台:
我現在有關於rs232接收的問題,我針對Datasheet上的uart模組做設定,但是卻不會動作!!
因此想問問各位先進,是否小弟我哪裡做錯呢?
這個程式是利用rs232從pc端傳送ascii給dspic,然後dspic看是收到哪個按鍵,在選擇亮甚麼led:
謝謝各位兄台的幫忙!!!!
void InitGPIO(void);
void InitUART1(void);
unsigned int InChar(void) ;
//---------------------------------------------------------------------------
unsigned int RxValue;
//***************************************************************************
//*Program Start
//***************************************************************************
void main(void)
{
InitUART1(); // Initialize UART1
InitGPIO();
while(1) // repeat forever
{
RxValue=InChar();
if (RxValue == '1'){ PORTD = 0x000E; }
else if (RxValue == '2'){ PORTD = 0x000C; }
else if (RxValue == '3'){ PORTD = 0x0008; }
else if (RxValue == '4'){ PORTD = 0x0000; }
else if (RxValue == '5'){ PORTD = 0x000A; }
else if (RxValue == '6'){ PORTD = 0x0005; }
else if (RxValue == 0x0000){ PORTD = 0x0004; }
} // end of while forever*/
} // end of main program
//***************************************************************************
//*Initialize
//***************************************************************************
void InitGPIO(void)
{
TRISA = 0xFFFF; // make RA all inputs for SW1-SW4
TRISD = 0x0000; // make RD all output
PORTD = 0x0000;
}
void InitUART1(void)
{
unsigned int baudvalue;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART1();
ConfigIntUART1(
UART_RX_INT_EN & UART_RX_INT_PR6 &
UART_TX_INT_DIS & UART_TX_INT_PR2
);
U1MODEvalue = UART_EN & UART_IDLE_CON &
UART_DIS_WAKE & UART_EN_LOOPBACK &
UART_EN_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U1STAvalue = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE & UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
// The BAUDRATE = 9600, FCY is already defined so use
// it as "FCY". Plug into the formula provided in the slides
baudvalue = 48; //FCY/(16*BAUDRATE) - 1 initialize the variable baudvalue
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
}
//************************************************************************
//*Uart polling Function
//************************************************************************
unsigned int InChar(void)
{
/**********************************************
* Function: POLLING LOOP * *
**********************************************/
do{
}while(!IFS0bits.U1RXIF);
IFS0bits.U1RXIF=0;
return(U1RXREG);
}