void SndData(uchar *p, uchar len) //用于判定接收到的数据是否正确
{
if (UartNum ==0) //判断是否选择串口0,在这里也可以不用这句,
//只是方便多个串口选择时用
{
myUart_Init(0,9600);//波特率为9600
while(len)
{
while(!(rUTRSTAT0 & 0x2)); //等待,直到发送缓冲区为空
WrUTXH0(*p); //串口0发送数据
p++;
len--;
}
}
}
void RecComData(U16 *buf,uchar len) //接收多字节数据
{
unsigned char i;
if(UartNum ==0) //判断是否选择串口0,在这里也可以不用这句,//只是方便多个串口选择时用
{
myUart_Init(0,9600);//波特率为9600
for(i=0;i<len;i++)
{
while(!(rUTRSTAT0 & 0x1));
*buf=RdURXH0(); //在串口调试助手中发送11 通过AXD软件下的内存查看命令,可知地址0x50000024的内容为11。
//若调试助手发送11 12 13 14是,则地址0x50000024的内容为14
Uart_Printf("%4x",*buf);
buf++;
}
}
}
我在主函数中这样调用
while(1)
{
RecComData(data,0x06);//通过串口调试助手,在发送端发送10 11 12 13 14 15
*rcvp=*data;
SndData(rcvp,0x06);//验证接收到的数据是否成功
}
遇到的问题:串口调试助手没有显示,通过AXD软件观察0x50000024(接收缓冲区)的内容为10,(接收的第一个字节)。如此一来接收缓冲区不为空了,就不能接收下一字节的数据了,应该怎么帮,请指教!