完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
/////////////////////////////////////////////////////////////////////
//串行中断,接收上位机数据 ///////////////////////////////////////////////////////////////////// seri_int () interrupt 4 using 1 { unsigned int i,j; unsigned char rece_data = SBUF; unsigned char verify = 0; if (RI) { RI = 0; if (g_bReceAA) { g_bReceAA = 0; switch (rece_data) { case 0x00: break; case 0xBB: g_cReceNum = 0; break; default: i = g_cReceNum; g_cReceBuf = rece_data; break; } } else { switch (rece_data) //接收到上位机发来的数据 { case 0xAA: //开始字节0XAA g_bReceAA = 1; //开始字节的标志 default: i = g_cReceNum++; g_cReceBuf = rece_data; //接收上位机发来的每一个字节 break; } } i = (((unsigned int)(g_cReceBuf[1]<<8)) + (unsigned int)(g_cReceBuf[0])); //16位 0XBBAA ?? if ((g_cReceNum == i + 2) && ( i != 0 )) { for (j=1; j if (!verify) { g_bReceOk = 1; BELL = 0; redled = 0; g_cCommand = (((unsigned int)(g_cReceBuf[5]<<8)) + (unsigned int)(g_cReceBuf[4])); //接收到的命令2个字节 g_bReceAA = 0; ES = 0; } } if (g_cReceNum >= sizeof(g_cReceBuf)) { g_cReceNum=0; } } if (ti) { TI = 0; } } 求好心人帮帮 注解下。。 |
|
相关推荐
5个回答
|
|
|
不理解直接用行么?代码都给出来了...
|
|
|
|
|
|
这样不好吧。。
|
|
|
|
|
|
谢谢 过程大概懂了 为什么(unsigned int)(g_cReceBuf[1]<<8)) + (unsigned int)(g_cReceBuf[0]) 就是数据长度标志
|
|
|
|
|
|
数据长度有两个字节数据,低位在前。所以g_cReceBuf[1]<<8,右移8位后,就是16位的高8位了,再加上低8位,就组成16位的数据了。
[0]和[1]两个字节数据是在通信协议中定好的了,就是[0]和[1]代表长度。 |
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1654 浏览 0 评论
imx6ull 和 lan8742 工作起来不正常, ping 老是丢包
4742 浏览 0 评论
4232 浏览 9 评论
3824 浏览 16 评论
4400 浏览 1 评论
4214浏览 3评论
2381浏览 0评论
3397浏览 0评论
1159浏览 0评论
2844浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:56 , Processed in 0.753872 second(s), Total 89, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1378