用老妖的双串口型号,Uart1接PC,Uart2接其它串口设备,波特率相同都是9600bps。
PC下发的数据定长10字节,mcu先缓存,满10字节后转发到Uart2,这一步没有问题,数据完整收到。
串口设备上发的数据是不定长度的,从几字节到1K多,我在Uart2的接收中断中收到一个字节后就直接发往Uart1,此时PC收到的数据不完整,中间有些字节会丢失,试过将PC到Uart1的波特率提高到19200bps,无果。
我想应该要弄个缓冲区缓存一下,可是没有思路,请求哪位指点一下。
//向Uart1发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//Uart2接收中断函数
void serial2 () interrupt 8 // using 1
{
unsigned char ch;
ch=S2BUF;
if(S2CON & S2RI) //如果是接收
{
S2CON &= ~S2RI; //清标志位
send_char_com(ch); //转发到Uart1
}
/*
if(S2CON & S2TI)
{
S2CON &= ~S2TI; //清标志位
busy=0;
}
*/
}
=======================改错字
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void serial2 () interrupt 8 // using 1
{
unsigned char ch;
ch=S2BUF;
if(S2CON & S2RI) //如果是接收
{
S2CON &= ~S2RI; //清标志位
send_char_com(ch); //转发到Uart1
}
/*
if(S2CON & S2TI)
{
S2CON &= ~S2TI; //清标志位
busy=0;
}
*/
}
//Uart2接收中断函数
void serial2 () interrupt 8 // using 1
{
unsigned char ch;
if(S2CON & S2RI) //如果是接收
{
ch=S2BUF;
S2CON &= ~S2RI; //清标志位
SBUF=ch; //转发到Uart1 <--
}
/*
if(S2CON & S2TI)
{
S2CON &= ~S2TI; //清标志位
busy=0;
}
*/
}
-----------------------------------------------------------------------
谢谢指教~
一周热门 更多>