zusen的小軒,电子的天空,技术的楼阁 https://bbs.21ic.com/?178488 [收藏] [复制] [RSS] 电子是我从小的爱好,嵌入式是我的方向,朋友们,谈谈我们的理想吧~~

日志

虚拟串口和硬件串口的单线传输的实现

已有 1399 次阅读2007-12-14 21:46 |个人分类:8位单片机|系统分类:单片机

如图
模拟串口作为从机

RXD 和 TXD 为51单片机的收和发,作为主机

模拟串口平时等待接收,当收到主机的命令(特定的协议,后面祥细说明),再作相应的操作(比如转换为发送,向主机发送数据)

当主机要向从机发送命令时,先CLR  REN,屏闭掉主机的接收功能(屏闭冲突),当发送完命令后,SETB  REN,OPEN 接收功能,等待接收从机或其他设备的串口数据

模拟串口接收到命令后,先解译命令(协议),判断是命令还是普通数据
如果是命令,再按照命令作特定的操作,比如 向主机发送数据,那么这时,模拟串口转换为发送(这时要延时一小段时间,待主机OPEN接收状态),再向主机返馈数据。

关于协议,如果产品支持级联控制,那么协议是少不了的,说说协议吧

协议可以用国际商业常用的,比如 TCP/IP 、IIS,等等

但自己也可以开发一个小型、适合自身产品的简单协议

比如: AB 20 ID 18 02 XX XX BA
说明一下吧
第一个字节: AB 是协议开始字节,作为开始标记

第二个字节: 20 命令一,告诉从机要操作那个功能模块

第三个字节: ID 设备ID或设备设置通道,就是从机的身份证,只有ID和自己的ID相同,才会根据命令操作,否则掉弃

第四个字节:18 命令二,功能模块要操作的功能,比如,这个18 代表 要控制外设的开关,如果是 20 ,就是向串口返馈数据

第五个字节: 02 数据长度,表示后面跟着有多少个 数据

第六第七字节: XX XX 数据,根据数据作操作,比如结合 第四个字节 18,数据是  01 01 的话,那么 就是 第一通道 开(第一个01 表示第一通道 ,第二个01 表示状态 为开 00表示为关)。

第八字节:BA 校验和、结速字节,如果是BA 那么不去检验校验和,只是标示命令结速,其如是其他,那么这个字节作为校验,前面所有 字节相加 ,然后保留前8位,再加上 这个 校验字节,如果是 FF ,那么就是说,这命令接收到是正确的,如果不是FF,就是说明 这命发送途中可能受到干扰,这时 可向主机后馈一个 数据接收错误的信息,让主机重发。

OK,协议的实现大体就是这样

有空再来说说 如何在程序中去实现这种协议

好久没打过这么多字了,现在用笔都不会写了,所以里面有很多错别字,呵呵,请见谅



路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)