初學者請教:
學習串口接收數據,在網上下了一段代碼。運行出現幾個錯誤。請指教-------------!
#include "main.h"
#include "mcu_uart.h"
uchar UartRxBuffer[ 64 ] = { 0 }; //uart串口接收數據
volatile uchar RX_Cnt = 0; //接收計數
bit TX_Busy = 0; //發送忙標志
void uart_init()
{
SCON = 0x50;//設置串口工作方式1
TMOD = 0x20;//設置計數器工作方式2
PCON = 0x00;//即SMOD=0,波特率不加倍
TH1 = 0xFD;//計數器初值,波特率是9600,晶振11.0592MHz
TL1 = 0xFD;
ES = 1;//打開接收中斷
EA = 1;//打開總中斷
REN = 1;
TR1 = 1;//打開計數器
}
void main()
{
uart_init();
while(1);
}
void UART_INT (void) interrupt 4
{
if(RI)
{
RI = 0;
UartRxBuffer[RX_Cnt] = SBUF;
RX_Cnt++;
}
if(TI)
{
TI = 0;
TX_Busy = 0;
}
}
uchar uart_rx_string( uchar* RxBuffer )
{
uchar rxLength = 0;
uint uartRxTimOut = 0x7FFF;
while( uartRxTimOut-- )
{
if( 0 != RI )
{
RI = 0;
*RxBuffer = SBUF;
RxBuffer++;
rxLength++;
uartRxTimOut = 0x7FFF;
}
}
return rxLength;
}
運行問題如下:
第一次循環:1-到32行,點擊發送。2-到31行,(錯誤1)RI應當為0,但仍然為1。3-到32行,(錯誤2)UartRxBuffer[0]=1,應當=c?
第二次循環:1-到31行,(錯誤3)RI應當為0,但仍然為1。2-到32行,(錯誤4)UartRxBuffer[0]=0x0A,沒有字符?
第三次循環:1-到31行,RI=0正確。2-到32行,(錯誤5)UartRxBuffer[0]=0x0A,仍然沒有字符?
|