打印
[MCU]

一种较方便的下位机串口通讯开始帧判断方法

[复制链接]
2110|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
史迪威将军|  楼主 | 2015-8-31 20:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                     
        一直以来,以为下位机串口通讯很简单,收到数据处理就可以。中间使用的判断开始位是由发送方发送0xAA,0x55, 接收方读取进行比较后,即判断是帧头 ,但是这些仅限于自己写的上位机和下位机程序,当产品给别人使用的时候,不具有通用性,而且在使用别人的下位机产品的时候,程序不具有通用性,于是一直想寻找一种方法,能够通用,并且方便判断帧头。

        终于,在一个杂志上面找到了通过定时器判断一帧数据头的办法,当定时器延时一段时间,串口SBUF中没有数据时候,即认为下次接收到的数据为帧头,当然,波特率不同,则定时器延时的时间亦不同,经过实验,果然比较好用,并且具有通用性。
                                       

相关帖子

沙发
Txapp| | 2015-9-1 09:00 | 只看该作者
这算薪方法?

使用特权

评论回复
板凳
lowe0822| | 2015-9-1 10:52 | 只看该作者
楼主赶紧申请专利去。

使用特权

评论回复
地板
john_lee| | 2015-9-1 22:02 | 只看该作者
虽然接收超时的方法已经使用非常普遍了,楼主把它写出来介绍给大家的这种勇气,还是很值得肯定的。

使用特权

评论回复
5
无量寿经| | 2015-9-3 11:54 | 只看该作者

通信协议:每次电脑串口助手向单片机发送5个字节的数据,第一个字节为0x7E,数据开始标志(即
帧头),后面3个字节为任意数据,最后一个字节为前4个数据和的低字节(高字节忽略),即校验和,单片
机接收到5个字节后,如果校验正确,发回第1字节0x7E作为帧头,2、3、4字节为接收的2、3、4字节
加1后的数据,第5字节为前4个字节的校验和。使用22.1184MHz内部R/C时钟,波特率9600,最为常
见的N.8.1帧格式(无奇偶校验、8位数据位、1位停止位)。
单片机串口 中断服务程序,可精确判断出帧头,保证数据接收不会错位。
void UART1(void) interrupt 4
{
        if(RI)                              // 只处理接收中断
        {
                if(RecCount==5) RecCount=0; //如果已经接收了5个字符,主程序还没来得及处理又发来下一帧数据
                                            //则RecCount清零,覆盖上一帧数据,保证数据接收不错位
                RecBuf[RecCount]=SBUF;
                RI=0;                          
                if (RecCount==0)                // 判断帧头是否正确
                {
                        if(RecBuf[RecCount]==FMBEGIN)
                        {
                                RecCount++;
                        }
                        else
                        {
                                RecCount=0;
                        }
                }
                else
                {
                        RecCount++;
                }
        }
}


以上代码来源于《51单片机轻松入门—基于STC15W4K系列》

使用特权

评论回复
6
mailshichao| | 2015-9-12 08:39 | 只看该作者
无量寿经 发表于 2015-9-3 11:54
通信协议:每次电脑串口助手向单片机发送5个字节的数据,第一个字节为0x7E,数据开始标志(即
帧头),后面3 ...

这种方法到时第一次看到,不过有点太复杂和麻烦了吧,通行的好像都不是这个方法哟

使用特权

评论回复
7
受不了了| | 2015-9-12 10:19 | 只看该作者
珍惜生命,少玩点这种没兼容性的东西

使用特权

评论回复
8
无量寿经| | 2015-9-12 20:50 | 只看该作者
一般的单片机教材上只介绍简单的通信例子,在实际运用中,数据接收一旦错位,单片机就形同死机,所以在重要的场合就不要去想节省几行代码了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

291

帖子

0

粉丝