完善资料让更多小伙伴认识你,还能领取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]代表长度。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3303 浏览 9 评论
2978 浏览 16 评论
3479 浏览 1 评论
9039 浏览 16 评论
4071 浏览 18 评论
1162浏览 3评论
597浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
586浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2322浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1887浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-13 00:48 , Processed in 1.825067 second(s), Total 57, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号