打印

接收消息处理问题

[复制链接]
1140|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2012-7-11 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是我的消息接收函数 一个URAT中断函数,消息定义是 7E 00 00 00 00 7E
我这个函数在不出现错误消息的时候没有问题 能正常使用 ,但是 如果丢失帧尾那个7E 就会出问题 ,这个怎么处理呢要
还有就是 如果我只接受一帧然后丢失了帧尾7E,会一直等待,
另一种情况是连续接到2帧或者几帧 其中一帧帧尾7E丢失 是不是我这几帧全部会出问题 怎么解决这些问题呢 ?
加定时器?我是新手 不是很懂 求大神解答
#include <c8051f330.h>
#include <stdio.h>
#include <485.h>

//-----------------------------------------------------------------------------

uchar frag_len=0;
uchar tp=0;
uchar len_s=0;
bit frag=0;
uchar UART0_Buffer[4]={0,0,0,0};
uchar data_buf[4]={0,0,0,0};
void UART0_Interrupt (void) interrupt 4
{

uchar tmp=0;
uchar i=0;


if(RI0==1)

{
RI0 = 0;
tmp = SBUF0;

if(tp==1) // 接收到的上一个字节为0xdb
{
switch(tmp)
{
case 0x02:
data_buf[frag_len] = 0x7d; // 0x7d02表示0x7d
frag_len++;
tp=0;
break;
case 0x01:
data_buf[frag_len] = 0x7e; // 0x7d01表示0x7e
frag_len++;
tp=0;
break;
default: break;
}


}
else
{
switch(tmp) // 正常情况
{
case 0x7e: // 帧头
if (frag==0)
{
frag=1;
frag_len=0;
}
else
for(i=0;i<4;i++){UART0_Buffer[i]=0;}

for(i=0;i<frag_len;i++){UART0_Buffer[i]=data_buf[i];}

for(i=0;i<4;i++){data_buf[i]=0;}
len_s=frag_len;
frag_len=0;
frag=0;
//sym=1;

break;
case 0x7d: // 检测到转义字符
tp=1;
break;
default: // 普通数据
if(frag==1)
{
data_buf[frag_len]=tmp; // 保存数据
frag_len++;
break;
}
else
break;
}

}

}
}

相关帖子

沙发
baidudz| | 2012-7-11 22:32 | 只看该作者
要学会丢弃和超时复位

使用特权

评论回复
板凳
yybj| | 2012-7-11 22:35 | 只看该作者
没太看明白

使用特权

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

本版积分规则

304

主题

2313

帖子

0

粉丝