电脑软件使用串口和单片机通信,如何能保证数据的完整性?
有没有好的方法,使用串口,让软件和单片机能完好的交换大量数据和命令。。。
说的好一定加分。知道的帮帮忙。我都快崩溃了。
1. 8位单片机只能接收8位数据,我的意思是如何来区分各种各样的数据。
2. 单片机的速度和电脑速度相差太大了,电脑发送完了了,单片机还未处理完数据,如果继续发送,就会产生中断,导致数据未处理不完。。。
电脑和单片机的处理速度不是一个级别的,所以电脑对单片机只能进行非常低速率的通信,这是基础。
用查询方式,只有单片机处理完电脑传来的数据后,电脑才能给单片机新的数据。
区分数据的方法:将数据做成一个包,有特定的开始。比如电脑按照一定的格式来发送数据:第一字节是开始,第二字节是数据类型,第三字节是数据长度,然后第四字节开始的就是相应长度的数据正文。这样单片机就能正确识别了。
用查询方式,只有单片机处理完电脑传来的数据后,电脑才能给单片机新的数据。
区分数据的方法:将数据做成一个包,有特定的开始。比如电脑按照一定的格式来发送数据:第一字节是开始,第二字节是数据类型,第三字节是数据长度,然后第四字节开始的就是相应长度的数据正文。这样单片机就能正确识别了。
温馨提示:答案为网友推荐,仅供参考
第1个回答 2011-03-01
单单从这几个命令上很难准确判断出是怎么计算的,不过应该是3各算法一致。我推算应该是以求和为基础,就是所有字节求和。
如果这样的话,可以这么算A到C校验
校验=16A-字节和
至少这个符合A到C的校验规律
A到B可能也类似
为什么知道他的校验么?
你可以在测一下,你可以用串口直接发类似的命令,看看串口能收到什么。
比如你可以发送
E000000900100000079
如果这样的话,可以这么算A到C校验
校验=16A-字节和
至少这个符合A到C的校验规律
A到B可能也类似
为什么知道他的校验么?
你可以在测一下,你可以用串口直接发类似的命令,看看串口能收到什么。
比如你可以发送
E000000900100000079
第2个回答 2011-03-01
1.8位单片机可以接受多字节数据 绝对不只8位 可以是小于栈分配的任何值 所以可以大多64K 或者更大
可以自己定义报文头 报文尾 收到数据串后比较报文尾 确认是否收完
2.自定义回报。 单片机处理完后发送回报 电脑收到回报文后比较 正确就继续发送
可以自己定义报文头 报文尾 收到数据串后比较报文尾 确认是否收完
2.自定义回报。 单片机处理完后发送回报 电脑收到回报文后比较 正确就继续发送
第3个回答 2011-03-01
对于你的第二点~我想你可以在电脑上设置一下间隔多少时间发送一个数据!我做过单片机发电脑收的!希望对你有帮助~~
黑 吧 安 全。 技术, 论坛 。可以了解更多IT信息哦!我经常去的!推荐你也去
神······马............................
黑 吧 安 全。 技术, 论坛 。可以了解更多IT信息哦!我经常去的!推荐你也去
神······马............................
第4个回答 2011-03-02
电脑这方面很好处理,单片机咱不懂。但是如果硬件保证不了通讯质量就一定要电脑收到单片机的回传数据,然后电脑软件才能确认数据发送成功。
另外没有“各种各样”的数据,在通讯的时候只有字节BYTE数据(另外或者你一次能发送两个字节那么就认为所有交换数据都是双字节WORD数据),而你所需要的是开发一个把“各种各样”数据转换成字节数据的函数什么的。需要灵活去处理发送的数据,可以一个字节确认一次也可以多个字节确认一次,似乎硬件自己确认都是按位来确认的,比如加入奇偶位什么的但着程序员一般管不了它。
确认方式可以简单的让单片机把数据原封不动发回来,也可以让它发一个什么CRC码MD5码之类的校验码。还可以一开始就把校验码发给单片机,然后由它计算对比后回传一个信号过来。
如果你的单片机因为成本或别的什么问题实在没法回传数据那解决速度差别的问题就是把数据发送放到一个循环里,发送一个字节暂停一段时间,通讯可靠性由硬件自己处理吧。自己挑选一个合适的暂停间隔时间。
最后我申明自己只写过电脑之间的串口通讯。
另外没有“各种各样”的数据,在通讯的时候只有字节BYTE数据(另外或者你一次能发送两个字节那么就认为所有交换数据都是双字节WORD数据),而你所需要的是开发一个把“各种各样”数据转换成字节数据的函数什么的。需要灵活去处理发送的数据,可以一个字节确认一次也可以多个字节确认一次,似乎硬件自己确认都是按位来确认的,比如加入奇偶位什么的但着程序员一般管不了它。
确认方式可以简单的让单片机把数据原封不动发回来,也可以让它发一个什么CRC码MD5码之类的校验码。还可以一开始就把校验码发给单片机,然后由它计算对比后回传一个信号过来。
如果你的单片机因为成本或别的什么问题实在没法回传数据那解决速度差别的问题就是把数据发送放到一个循环里,发送一个字节暂停一段时间,通讯可靠性由硬件自己处理吧。自己挑选一个合适的暂停间隔时间。
最后我申明自己只写过电脑之间的串口通讯。
第5个回答 2011-03-12
可以查下HDLC协议.