搜索
bottom↓
回复: 3

请教:串口中断接收问题

[复制链接]

出0入0汤圆

发表于 2013-5-14 01:46:37 | 显示全部楼层 |阅读模式
协议帧结构:0x10,0x02为帧头+长度+数据+ 0x10,0x03为帧尾
每次串口中断接收的相邻0x10是一组代表一个0x10数据,比如0x10,0x10,0x10,0x10x,0x10,0x10实际是3个0x10数据。目前我只能做到两个请大家看看,另在数据中0x10,0x10+0x10,0x03帧尾,也解不了。

if(rx_length--)//=0时,全部接收完成
{
uart0_rx_data[rx_count++]=SBUF0;
if(flag_0x10)//这样可以收到连续两个DATA是0x10的字节
{
flag_0x10=0;
break;
}else
{
if((uart0_rx_data[rx_count-2]==0x10)&&(uart0_rx_data[rx_count-1]==0x10))
{
--rx_count;
++rx_length;
flag_0x10=1;
}
}
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-14 08:56:49 | 显示全部楼层
http://wuqidongxing.blog.163.com ... 950200791910512879/

出0入0汤圆

 楼主| 发表于 2013-5-14 12:36:39 | 显示全部楼层
谢谢,目前就是按这篇文章的状态机思路,编写的。通信协议为:以DLE(10H)、STX(02H)作为帧起始字段,以DLE(10H)、ETX(03H)作为帧结束字段。为避免在信息字段中出现DLE,影响数据的正确接收,数据发送方在发送数据前检查信息字段中是否出现DLE,如果信息字段中出现DLE字符,则在此DLE字符后再加一DLE字符。数据接收方如果连续收到两个DLE字符,表明此DLE是数据信息,而不是控制转义字符,去掉一个DLE即可。大家有什么好的思路么?

出0入0汤圆

 楼主| 发表于 2013-5-14 23:48:43 | 显示全部楼层
已解决


uart0_rx_data[rx_count++]=SBUF0;
if(rx_count>UART0_RX_MAXLEN-1)//超出最大接收范围,接收错误,初始化
{
uart0_rx_status=1;
break;
}
if(flag_0x10)//前面收到一个0x10
{
if(uart0_rx_data[rx_count-1]==0x03)//收到结束字节,一帧结束
{
uart0_rx_over=1;
uart0_rx_status=1;
rx_length=0;
rx_count=0;
flag_0x10=0;
//break;
}
else//在判断是否0x10
{
if(uart0_rx_data[rx_count-1]==0x10)
{
--rx_count;//丢弃一个0x10
flag_0x10=0;//初始化,接收下一个
}
}
}
else
{
if(uart0_rx_data[rx_count-1]==0x10){flag_0x10=1;}
}
break;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 18:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表