给大家介绍一种有效的异步串口通讯

[复制链接]
2681|3
 楼主| 假程序匠人 发表于 2010-4-2 00:45 | 显示全部楼层 |阅读模式
发送就没什么好说了,主要在于接收
采用字节间隔超时来判断协议帧的接收结束
为了保险,超时时间一般设定为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);
        }
    }
}
ejack 发表于 2010-4-2 08:00 | 显示全部楼层
我是被LZ的ID吸引进来的……
mohanwei 发表于 2010-4-2 08:34 | 显示全部楼层
参考一下modbus……
zhiyonghe 发表于 2010-4-2 12:40 | 显示全部楼层
这ID够噱头!;P
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

80

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部