打印
[AVR单片机]

单片机串行通信接收多个VB发送的数据

[复制链接]
908|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
paco_cai|  楼主 | 2014-10-28 16:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

如图所示,电机转速PID控制系统。设定转速、比例积分微分系数等四个都是要设定后传送到单片机中的。请问,传送设定转速这个我已经实现,当我要传送不同的四种数据时应该怎么操作?例如ATMEGA48中,如下代码:
if(UCSR0A & (1<<RXC0))
{
data=uart_receive0();
}   
即能接收传送过来的数据,但当我需要传送多个数据时,程序怎么知道我从VB发过来的是设定转速还是PID参数呢?

QQ截图20141024204314.png (11.86 KB )

QQ截图20141024204314.png

相关帖子

沙发
joyme| | 2014-10-28 17:18 | 只看该作者
自己设定一个协议,用一个字节代表数据类型,后面跟着的数据做参数就好

使用特权

评论回复
板凳
paco_cai|  楼主 | 2014-10-28 18:16 | 只看该作者
joyme 发表于 2014-10-28 17:18
自己设定一个协议,用一个字节代表数据类型,后面跟着的数据做参数就好

不是很懂??

使用特权

评论回复
地板
kingtekharlin| | 2014-10-28 23:05 | 只看该作者
自己定义通信协议啊!

ATMEL 代理 QQ:1085487223

使用特权

评论回复
5
yklstudent| | 2014-10-31 21:28 | 只看该作者
比如
AA 55 03 0A 00 01 00 02 00 03 00 04 00 05 checksum
AA 55为帧头
03为功能码
0A为数据长度
00 01 00 02 00 03 00 04 00 05为数据
checksum为校验码
具体可以自己发挥

使用特权

评论回复
6
airwill| | 2014-11-3 16:54 | 只看该作者
楼上的方案虽然显得烦了一点,但完全可行。
象楼主的这个应用,协议是可以定得更简单一些。
可以只定义一个包(直接包含四个数据),不用去搞功能码,也不要数据长度,帧头也可以简化(最简的方式是空闲一段时间)校验码倒是建议保留。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

62

帖子

1

粉丝