社区
单片机/工控
帖子详情
协议让我头痛
yangjinCK
2010-06-08 09:00:42
我是一个新手
刚开始学单片机
我想让上位机跟下位机协议通信
上位机我用的C#,这个知道怎么写
但下位机不知道怎么判断数据帧了
协议基本格式是这样的
上位机发送
EB 90 EB 90
04
90 EB
起始码 接收字符个数 结束码
下位机
EB 90 EB 90
04 55 AA 55 AA
90 EB
起始码 接收字符个数 4哥字节数据 结束码
我用的51单片机
用C语言实现
来哥大侠帮谢谢代码啊
小弟感激不尽
...全文
102
9
打赏
收藏
协议让我头痛
我是一个新手 刚开始学单片机 我想让上位机跟下位机协议通信 上位机我用的C#,这个知道怎么写 但下位机不知道怎么判断数据帧了 协议基本格式是这样的 上位机发送 EB 90 EB 90 04 90 EB 起始码 接收字符个数 结束码 下位机 EB 90 EB 90 04 55 AA 55 AA90 EB 起始码 接收字符个数 4哥字节数据 结束码 我用的51单片机 用C语言实现 来哥大侠帮谢谢代码啊 小弟感激不尽
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
用户 昵称
2010-06-08
打赏
举报
回复
大脑是怎么理解的,程序就应该怎么写。
lbing7
2010-06-08
打赏
举报
回复
上位机发送 EB 90 EB 90 04 90 EB
起始码 接收字符个数 结束码
这个没清楚。
另外,EB 90是只有两组还是任意组?
结束码是反过来的,有点杯具,另外,串口数字是字节传送,能不能用单字节的起始码?这样好处理些
yangjinCK
2010-06-08
打赏
举报
回复
[Quote=引用 3 楼 daifeijin 的回复:]
放在一个数据区,一个字节一个字节发就是啦!
[/Quote]
大哥些我就是对C51代码还不熟
要不我郁闷啥呢
就帮写写吧
在线等
daifeijin
2010-06-08
打赏
举报
回复
放在一个数据区,一个字节一个字节发就是啦!
yangjinCK
2010-06-08
打赏
举报
回复
[Quote=引用 1 楼 leo_dengzx 的回复:]
这也太。。。。那啥了吧。
这个数据帧的判断你一个字节一个字节的对比就是了,注意一下字节顺序,真是没任何技术含量。
最多加个重发机制。
[/Quote]
我就不晓得咋写
你要是写出来能出结果分全给你
leo_dengzx
2010-06-08
打赏
举报
回复
这也太。。。。那啥了吧。
这个数据帧的判断你一个字节一个字节的对比就是了,注意一下字节顺序,真是没任何技术含量。
最多加个重发机制。
lmlmlmnew
2010-06-08
打赏
举报
回复
while(1)
{
//串口接收判断
if(USART_GetFlagStatus(USART2, USART_FLAG_RXNE))
{
//接收到1个char
acTempChar = 0;
acTempChar = (USART_ReceiveData(USART2) & 0xFF);//接收程序
acRecBuffer[aiNumber++] = acTempChar;
//当接收的数据个数超过协议的个数的时候,抛弃重新接收
if(aiNumber > CMD_SIZE ) //此处的CMD_SIZE相当于你开头的 EB 90 EB 90 4个字节
{
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
continue;
}
//检测,保留完整的协议数据
if((SYNC_CHARACTER == acRecBuffer[aiNumber - 1]) && (8!= aiNumber))
{
auNumOfSyncChar++;
}
else
{
//当本次接收的同步数据少于3个的时候,数据错误
//重新接收
//此处就是判断接收的数据和协议是否一样,不一样就抛弃,我这里的同步数据是3个0xaa
if(auNumOfSyncChar < 3)
{
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
auNumOfSyncChar = 0;
continue;
}
if(CMD_SIZE == aiNumber)
{
aiNumber = 0;
auNumOfSyncChar = 0;
giIdentify = ID_GPS_COM_PROT;
}
}
switch(giIdentify)
{
//协议处理函数
case ID_GPS_COM_PROT:
//这里替换为你的数据处理函数
DB_gbMainDataProcessFunction(*((ComProStr*)acRecBuffer));
aiNumber = 0;
memset(acRecBuffer, 0, CMD_SIZE);
giIdentify = 0;
break;
default:
break;
}
}
}
这是我的一个程序的下位机接收上位机协议并处理的函数,你改改就能适合你所说的情况了,关键是流程你看懂就ok了,另外你应该加个末尾判断的,不过和协议头判断的差不多。
kool86
2010-06-08
打赏
举报
回复
BUF[] = “0123456789”;
INT8U COUNT = 0;
TI = 1;
ISR()
{
if(COUNT == 10)停止
ELSE SBUF = BUF[COUNT ++];
}
yangjinCK
2010-06-08
打赏
举报
回复
[Quote=引用 6 楼 jennyvenus 的回复:]
大脑是怎么理解的,程序就应该怎么写。
[/Quote]
不理解不知道怎么写
SIP
协议
中文版详解
大家是否都有过看RFC头疼的问题?是否为自己英文水平低而很无奈?这个SIP中文版就最合适你不过了
zigbee
协议
中文翻译
zigbee
协议
中文版,个人认为质量一般,参考着看看效果还可以。免去令人头疼的英文的烦恼了
比较详细的中文cas
协议
介绍
中文的cas的
协议
介绍,比较详细,适合对英文比较头疼的同学
sip
协议
中文版,需要的给顶一顶
sip
协议
中文版,如果有看英文很头疼的网友,那么这一份中文版的将是你最佳选择。 文档内容详细,真实
报文学习笔记(1)1.0.docx
是利用wireshark抓包 进行
协议
的理解 在接入阿里云物联网服务器进行的尝试 因为我单看
协议
看的头疼 看到了有大佬进行抓包的方法 于是进行了初次尝试 如若侵权请联系我后删除 抱歉抱歉
单片机/工控
27,373
社区成员
28,771
社区内容
发帖
与我相关
我的任务
单片机/工控
硬件/嵌入开发 单片机/工控
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章