有办法设定数据格式为起始位+13位数据位+终止位这样的格式吗

[复制链接]
 楼主| zyf部长 发表于 2013-5-28 21:40 | 显示全部楼层 |阅读模式
现在一般异步串口通信格式帧都为:起始位(0)+8位数据位+终止位(1,1.5,2),但如果我单片机起数据采集的作用,完整的一组二进制数据是十三位,是要分两次传送,变为起始+8位+终止位,起始+(有效)5位+终止位吗??
有办法设定数据格式为 起始位+13位数据位+终止位这样的格式吗
kangzj 发表于 2013-5-28 21:40 | 显示全部楼层
你把后5位充填3个0,变为一组数据传送2字节8位不就行啦。利用这3位空位还可以设置8个帧序号,简单协议确认发送/ 接收。何乐而不为?
 楼主| zyf部长 发表于 2013-5-28 21:41 | 显示全部楼层
使用USB进行充电,跟诺基亚的差不多的
小小猫咪 发表于 2013-5-28 21:42 | 显示全部楼层
按楼上说的做,传两个字节。你自己说的13数据位无法实现!
houcs 发表于 2013-5-28 21:43 | 显示全部楼层
一次只能发八位数据,除非你有16位的单片机做
liuzaiy 发表于 2013-5-28 21:43 | 显示全部楼层
楼主把简单的事情复杂化了
yinxiangh 发表于 2013-5-28 21:45 | 显示全部楼层
houcs 发表于 2013-5-28 21:43
一次只能发八位数据,除非你有16位的单片机做

就是32位,64位的单片机,也只能发8bit,呵呵,这个跟单片机位数无关
pangb 发表于 2013-5-28 21:45 | 显示全部楼层
我知道一般的是8位,但想不通为什么只能是8位??
chenjunt 发表于 2013-5-28 21:47 | 显示全部楼层
由于RS232的协议如此,一些标准化机构至今未对RS232做升级,还有就是现在单片机里面的UART收发的字节缓冲都是8bit的,mcu硬件如此,我们只好如此了。高位数的单片机其优势在这方面无能为力。
ousj 发表于 2013-5-28 21:47 | 显示全部楼层
非要这样搞,用一个IO口来模拟Uart了,搜一下有现成的代码。改改就能用了,这么低的速率,一次收发几万bit都没问题
morrisk 发表于 2013-5-28 21:48 | 显示全部楼层
这是异步通信,双方没有同步时钟,按约定的波特率,使发送方按约定的时间发送数据,接收方在预定的时间范围内采样数据线,发送起始位的目的就是约定各自动作的起始时刻。
但是双方的时钟不完全同步,经过若干位之后,就导致某一方没有按照约定的时刻动作(超前了或滞后了),导致数据传输错误。所以异步通信多数要求帧的长度有个上限,无限长的数据帧没有推广的价值。
morrisk 发表于 2013-5-28 21:48 | 显示全部楼层
一次通信中各帧的长度如果不同,可能会出问题,例如相邻两帧的长度不同而前一帧丢失,就会把后一帧当做前一帧接收,结果这一帧就会在帧边界的判断上出错。

还应该防止出现下面情况:协议规定多帧通信,发送结束后接收方应返回一个应答帧,结果由于某种原因,发送的某一帧丢失了,接收方还在等待,而发送方以为已经发送完了而再等待应答帧,就会陷入死锁。
小小猫咪 发表于 2013-5-28 21:50 | 显示全部楼层
R232串口通讯传输数据是8bit传输的,只需要把13位数据变成两个字节就可以了,接收时在把两个字节还原回来就可以了
kangzj 发表于 2013-5-28 21:50 | 显示全部楼层
把需要增加那几位弄成校验位,来判断数据正确性,这样获得数据也比较准确
 楼主| zyf部长 发表于 2013-5-28 21:52 | 显示全部楼层
了解,了解
 楼主| zyf部长 发表于 2013-5-28 21:53 | 显示全部楼层
结贴了哈
 楼主| zyf部长 发表于 2013-5-28 21:53 | 显示全部楼层
结贴了哈
yoghen 发表于 2013-5-29 15:33 | 显示全部楼层
如果楼主非要用的话,C语言中用位域或许能实现?但是有个字节对齐的问题,所以处理下来也跟结构体差不多了,要补一些0。所以还是用函数来封装吧
BruceLone 发表于 2013-5-29 19:12 | 显示全部楼层
这个拼接成两个八位发送吧
andyding 发表于 2013-5-29 22:02 | 显示全部楼层
2楼是个好办法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部

694

主题

7102

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部