发送就没什么好说了,主要在于接收
采用字节间隔超时来判断协议帧的接收结束
为了保险,超时时间一般设定为10倍以上,如19200波特率时,字节间隔为0.5ms左右,因此我们超时就设定5ms
struct tagUART
{
u8 RecvBuf[BUFSIZE];
u8 SendBuf[BUFSIZE];
u8 pBuf;
U8 TimeOut;
u8 IsRecvEnd;
//OSEVENT *pEvent;
}UART;
void UARTInterrupt(void)
{
UART.RecvBuf[UART.pBuf++] = SBUF;
UART.TimeOut = 5;
}
void 1msTimerInterrupt(void)
{
if(UART.TimeOut>0)
{
UART.TimeOut--;
if(UART.TimeOut==0)
{
UART.IsRecvEnd = 1;
//OSSemPost(UART.pEvent);
}
}
} |