完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我想实现一个功能就是从串口接收数据 然后放到table数组 接收的数据是以“I”开头的 “;”结束的 数据长度共38个字符 数组就是38位的 我想实现正好数组的第一位是I最后一位是”;“下面的程序可以实现吗 有什么需要修改的地方?
void serial() interrupt 4 { ES=0; if (RI==1) { inByte=SBUF; if (inByte == 'I') { while (bufferPos != 38) { table[bufferPos] = inByte; bufferPos++; inByte =SBUF; if (inByte == ';') break; } } read_if (); RI=0; ES=1; } } |
|
相关推荐
4个回答
|
|
|
|
|
|
云汉达人
你好,关于你问的问题,你可以参考我这个程序试一下: 其中:5A A5是帧头,发送数据的格式是:5A A5 长度 数据(N位)那么在数组里面的第一个数据就是代表长度,如果你要接受"I",那么只需要在数据的第一位放I就好了。 void UART_ISR(void) interrupt 4 //串口中断接受 { if(RI) { DataTemp = SBUF; RI = 0; if(RXFRMOK==0) { if(RX5AOK) { if(RXA5OK) { RecData[LEN]=DataTemp; LEN++; if(LEN==(RecData[0]+1)) { RXFRMOK=1; RX5AOK=RXA5OK=0; } } else { if(DataTemp==0xA5) { RXA5OK=1; LEN=0; } } } else { if(DataTemp==0x5A) { RX5AOK=1; } } } } else { TI = 0; } } |
|
|
|
收到一个字节,就中断一次。所以你读一次SBUF后集体应该退出中断了,下一个字节接收完成后,会再产生一次中断
|
|
|
|
单片机的串口接受数据不是按帧算的么??你这程序问题很大!!
|
|
|
|
只有小组成员才能发言,加入小组>>
891 浏览 0 评论
1202 浏览 1 评论
2579 浏览 5 评论
2914 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2776 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1251浏览 3评论
227浏览 2评论
502浏览 2评论
410浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
489浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-3 19:00 , Processed in 1.094785 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号