串口設置為:
void UART_Init()
{
SCON0 = 0xD0; //方式3:9位UART,可變波特率。SM20 = 0,停止位的邏輯電平被忽略
SCON1 = 0x50;
PCON = 0X00; //SSTAT0 = 0:讀/寫SM20-SM00時訪問UART0方式設置位SM20-SM00。
}
現象是:
1.當電腦串口軟件設置為9bit數據發送時,可以正常通信。
2.當電腦串口軟件設置8bit數據發送時,不能正常通信。
電腦串口軟件再設置為9bit數據時,也不能通信了,需要斷電才能恢復。
串口中斷程序:
void UART0_ISR(void) interrupt UART0_VECTOR//UART0
{
if(RI0)//接收中斷
{
RI0=0;
uart0_info.uart0_rx_timer = UART0_RX_TIMEOUT;//啟動UART0接收時間判斷
uart0_info.uart0_rx_data[uart0_info.uart0_rx_count++] = SBUF0;
uart0_info.uart0_rx_count %= UART0_BUFF_SIZE;
}
if(TI0)//發送中斷
{
TI0=0;
uart0_tx_busy = 0;
}
}
|