在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 3577|回复: 7

串行通信的东东。

[复制链接]
发表于 2003-12-29 15:31:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
串行通讯通用接口程序设计
  卢望忠
  串行通讯在通讯领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通讯设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。
  在串行接口连接中,按连接方式可分为两类:有规程连接和无规程连接。无规程连接原理比较简单,通讯双方无握手过程。一方有数据需要发送,则立即通过串行接口发送出去,另一方被动接受。该方式虽然容易实现但数据发送的完整性却无法得到保证,在关键任务的连接中均不采用该方式,笔者在此不再赘述。而有规程通讯过程则不同,在甲方有数据发送请求时,则向乙方发送“请求发送数据”命令。乙方收到后,如准备就绪,则回送确认信息。甲方得到乙方的确认后方可发送数据。在大多数情况下,乙方要对收到的数据进行校验,校验正确发送“通讯终止”命令,否则可发送“重发”命令。在实践过程中,有规程的串行连接过程通常要复杂得多,而且不同的设备厂商都有不同的通讯规程,目前尚未形成统一的标准。即便是同一种类型的外设,在与不同品牌的设备进行连接时,也要修改原代码来满足不同种类规程的要求,此类问题常常会困扰程序开发人员。笔者在实际工作中总结出一种简单实用的通用规程的程序设计方法,在与多种串行通讯设备的连接中取得了满意的效果。在此简单介绍其原理,并与读者共同探讨。
  在通讯的过程中,虽然规程的组合千变万化,但通讯过程中的每一步都有很多共性的东西存在。通过对多种串行通讯设备的研究,笔者将通讯过程的每一步骤进行总结,抽象出共性的东西,在此称作通讯“步骤对象”。通讯步骤对象的定义和应用是该程序设计方法的核心内容。每一种通讯规程都可以定义多个通讯步骤对象。整个通讯过程的的实现,就是每一个通信步骤对象依次被激活并执行各自定义的方法的一个连贯过程。
  通讯步骤对象(objComStep)一般包括如下属性:
  (1)序号(StepId):每一个通讯步骤都有一个唯一的标识号,一般依据该步骤在整个规程中的执行顺序号来定义。
  (2)状态(Status):每一个步骤可能有四种状态:①发送:发送命令代码;②接受:接受命令代码;③判断:对上一步骤接收到的命令进行判断,检验接收的命令或数据是否正确;④接收数据:接收真正要传输的数据。
  (3)命令代码(Command):发送或进行接收判断的控制代码。
  (4)数据代码(Data):发送或接收判断的数据代码。
  (5)肯定序号(AckStep):在发送成功后跳转到肯定序号指定的步骤;如接收判断成功,同样跳转到肯定行号。
  (6)否定序号(NakStep):在发送不成功后跳转到否定序号指定的步骤;如接收判断不成功,同样跳转到否定行号。
  (7)延迟(DelayTime):当前步骤执行完毕,延迟相应时间后跳转到下一个步骤。
  (8)循环上限(MaxRunCounts):由于每一个步骤可被重复执行,对于每一个步骤有一个循环上限,如果执行次数大于该数值,则跳转到循环跳转序号。
  (9)循环跳转序号(BeyondStep):对于当前步骤被循环执行的次数超过上限时跳转到所指定的步骤。
  (10)计数器(Counter):记载执行次数。
  通讯步骤对象的方法定义如下:
  (1)发送(Send):通过串行端口发送数据或命令代码。
  (2)接收(Receive):从串行端口接收数据或命令代码。
  (3)判断(Identify):判断接收数据是否正确。
  (4)输出数据(OutPut):将得到的数据通过网络或消息传送给其它程序模块。
  完成了对objComSetp的定义,下一步我们就能够很容易地用程序语言来将其实现。在实际编程过程中,笔者将程序总体结构分为步骤定义模块和步骤执行模块。通过步骤定义模块定义所用规程的每一个步骤的属性,将属性信息写入配置文件。步骤执行模块按配置文件中的信息依次创建步骤对象,由该对象执行相应的方法。步骤执行模块总体控制每个objComStep的激活顺序,直至完成整个通讯规程。并将在通讯过程中得到的数据输出给其它程序模块。
  下面是一个串行通讯的实例,笔者用上述的程序设计方法实现了PC机和NEC程控交换机之间的通讯。为了方便叙述,笔者将该程序称为“通讯模块”。通讯模块的目的是通过串行通讯的方法来完成用PC机对NEC电话程控交换机物业管理PMS(Property Management System)系统进行控制的任务。系统成功地实现了对交换机的控制,通过PC机实现自动开通、关闭、长途权限、电话叫早、电话留言、电话免扰、电话设置房间状态等多种功能。
  图1是该规程的状态图。
  图1
  说明:(1)在接收和发送之间的时间间隔是1秒;(2)在接收到NAK后,重复发送的次数为3;(3)接收方没有回应(NO ANSWER)而重复询问的次数为15;(4)eot规程终止。
  在通讯模块中,首先将通讯规程的每一步骤用步骤对象的定义方式定义该规程,其具体步骤如下:
序号 状态 命令代码 数据代码 肯定序号 否定序号 延迟 循环上限 循环跳转序号
1 发送 sa,ua,enq 2 1 1 15    9
2 接收 ack 5    3 1 1    9
3 判断 nak 1    4 1 3    9
4 判断 无回应 1    1 1 15    9
5 发送 data,bcc 6 5    1 15 9   
6 接收 ack 9    7 1    9
7 判断 nak 5    8 1 3    9
8 判断 无回应 5    5 1 15    9
9 发送 eot 结束 0 1   
  完成上述配置后,将信息写入配置文件或数据库。在通讯模块执行时,读入该配置信息 ,依次生成通讯步骤对象。对象方法的执行过程即是通讯规程的执行行过程。在实际编程中可将该模块与其它程序连接编译成EXE文件或生成独立的DLL文件供其它通讯程序调用,均可取得满意的效果。在其它类型的通讯、消息传递、网络数据传输中均可用该思路写出通用的接口程序,解决异种机型连接的通讯问题。
发表于 2006-8-13 20:56:43 | 显示全部楼层
非常感谢!
发表于 2006-10-31 16:37:14 | 显示全部楼层
串行通信的东东
谢谢
发表于 2006-11-3 15:08:12 | 显示全部楼层
讲得很清楚哈
发表于 2007-1-10 20:25:32 | 显示全部楼层
讲得很清楚哈
发表于 2007-1-11 15:50:11 | 显示全部楼层

呵呵

讲得可真详细啊
发表于 2010-4-13 10:14:34 | 显示全部楼层
PC MCU 串行通信的应用设计方法
发表于 2010-4-13 13:08:27 | 显示全部楼层
哈哈 看看了解下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-29 03:24 , Processed in 0.028012 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表