初学者请教:
学习串口接收数据,在网上下了一段代码。运行出现几个错误。请指教-------------!
#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,仍然没有字符?
|