找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51串口多字节发送与接收问题

查看数: 16506 | 评论数: 24 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-8-28 14:16

正文摘要:

在写一个串口接受多字节的一个程序时遇到了一个问题,我写程序使52单片机以9600波特率接受串口助手发送来的12个字节,然后再发回去,但是在程序启动时,单片机第一次收到数据并发回,发现在发回的数据中第一个字节变 ...

回复

ID:18297 发表于 2017-10-9 14:43
本帖最后由 zjjhtony 于 2017-10-9 14:47 编辑

请看压缩包 aking.rar (30.76 KB, 下载次数: 59)



123.jpg (197.49 KB, 下载次数: 86)

123.jpg

222.jpg (9.81 KB, 下载次数: 92)

222.jpg

111.jpg (27.95 KB, 下载次数: 92)

111.jpg

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

ID:338173 发表于 2018-11-27 19:52
要有帧头 帧尾 我写过两个单片机蓝牙通信的程序。你加上帧头 帧尾就行了,再有校验位的话,基本万无一失。这个代码虽然不难 但是想了好久 分享一下

QQ截图20181127195125.jpg (38.71 KB, 下载次数: 41)

QQ截图20181127195125.jpg
ID:433533 发表于 2018-11-26 16:35
进入中断时候,先判断RI是否等于1,然后在把sbuf的数据放入数组中
ID:404720 发表于 2018-11-26 15:04
请问现在解决了吗?求
ID:267947 发表于 2017-12-27 19:49
可能是中断问题
ID:94867 发表于 2017-12-27 19:09
谢谢讲解
ID:237939 发表于 2017-10-10 15:42
4:在中断里加while(!ri)这样的语句,是巴不得系统死掉的写法。应该用if(ri==0) {再查下为啥进中断居然不置位,然后清掉,return;} 这样才是王道
ID:237939 发表于 2017-10-10 15:38
1:你的代码没有任何容错。你既然用0d开头,那你就要检查一下0d,或者插入两到三个无意义的数据作为头。同时加入长度域和校验值。
2:出现ff的可能有两种情况,发送出错或接收出错。
起始位为逻辑0,那么不发送的时候最好是逻辑1.你开始初始化pc机或者单片机的时候,pc机或单片机在初始化之前他的状态不是rs232协议,单片机很多时候口是复用的,有可能开始收到或发送的就会错。这个很好解释。
3:你的代码计数到12,所以多了个ff,自然少了最后一个,这个很正常,这就是为啥我建议你加校验和头,长度的原因。
4:这种代码风格出错是正常的,不错才不正常。
ID:238225 发表于 2017-10-10 11:47
SER中断有问题,判断到RI==0马上退出;RI==1才接收SBUF,清RI
ID:238225 发表于 2017-10-10 11:40
ser中断有问题,里面判断RI==1就清RI=0,接收SBUF,退出中断;如果RI==0直接退出
ID:238036 发表于 2017-10-9 16:08
同样问题同求
ID:238024 发表于 2017-10-9 16:01
第一次单片机也是接收12个字节, 只不过第一个字节是FF,楼主可以重点分析这个FF是从哪来的
ID:111634 发表于 2017-10-9 15:21
老贴不回了
ID:237965 发表于 2017-10-9 12:14
建议接收到数据后delay 一下,再发送数据。先调试发送一个BYTE成功后再调试发送接收多个BYTE。
ID:219796 发表于 2017-10-8 18:47
init加flag=0试试
ID:225054 发表于 2017-10-8 09:30
我感觉要先设置串口工作方式后在允许串口发送数据
ID:89053 发表于 2015-9-10 10:52
发送的数据回传么,接收到一个字节进入接收中断后,直接发送,
ID:89750 发表于 2015-9-9 22:05
是不是缓冲区里有上次发送的数据导致乱码。。
ID:89738 发表于 2015-9-9 21:02
这个问题我也遇到过,有时候也自己就正常了
ID:89481 发表于 2015-9-6 11:53
在中断里面接收到数据之后马上发送看看  不要设置flag标志位  你看看结果是不是正确的
ID:89101 发表于 2015-8-30 18:49
从调试方法上来说,先单个字节发送,然后在多个字节发送
ID:89092 发表于 2015-8-30 14:28
51串口常於power on第一次傳送时常会發生資料錯誤, 所以, 建議power on時, 可以要求51串口, 傳任意資料, 之後, 才開始接收資料....
ID:76227 发表于 2015-8-29 14:51
在中断里面接收到数据之后马上发送看看  不要设置flag标志位  你看看结果是不是正确的
ID:77578 发表于 2015-8-28 20:27
没人回复,自顶

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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