- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
12.1串口通信的内部机制应用程序经常要与外部设备进行通信,这种通信通常是通过一个标准的并行口和两个串行口进行的。外部设备主要是与并行口相连的打印机,与串口相连的调制解调器、鼠标以及其他与串口、并口相连的仪器设备。12.1.1Windows串行通信的工作原理 常用的DOS系统主要是工作在响应中断方式。PC机串行通信程序大多利用其BIOS块的INT14H中断,以查询串口的方式完成异步串行通信。 与DOS响应中断的工作方式不同,Windows是一个事件驱动的,并与设备无关的多用户操作系统。同时Windows禁止应用程序直接和硬件交互,程序员只能通过Windows提供的各类驱动程序来管理硬件。在这种情况下,Windows系统充当了应用程序与硬件之间的中介。12.1.2串行通信的操作方式下面介绍串行通信的几种操作方式:1.同步方式 同步方式中,读串口的函数试图在串口的接收缓冲区中读取规定数目的数据,直到规定数目的数据全部被读出或设定的超时时间已到时才返回。2.查询方式 查询方式,即一个进程中的某一线程定时地查询串口的接收缓冲区,如果缓冲区中有数据,就读取数据;若缓冲区中没有数据,该线程将继续执行,因此会占用大量的CPU时间,它实际上是同步方式的一种派生。3.异步方式 异步方式中,利用Windows的多线程结构,可以让串口的读写操作在后台进行,而应用程序的其他部分在前台执行。4.事件驱动方式 若对端口数据的响应时间要求较严格,可采用事件驱动方式。事件驱动方式通过设置事件通知,当所希望的事件发生时,Windows发出该事件已发生的通知,这与DOS环境下的中断方式很相似。12.1.3单线程与多线程下的串口通信通常可按以下四步实现串行通信:按协议的设置初始化并打开串行口,这样做就是通知Windows本应用程序需要这个串口,并封锁其他应用程序使它们不能使用此串口。配置这个串口。在串口上往返地传输数据,并在传输过程中进行校验。不需要此串口时,关闭串口。即释放串口以供其它应用程序使用。在这四个步骤中,主要的程序代码集中在第(3)步。12.2串口通信的实现12.2.1串口的初始化 在Win32位环境中,串口和其它通讯设备都作为文件处理。串口的打开、关闭、读取、写入所用到的函数与文件操作所用到的函数相同。 串口通讯程序以调用CreateFile()函数开始,该函数的返回值是一个通信资源句柄,在随后的其它端口操作中使用。 一旦当端口处于打开状态,就可以自动分配一个发送/接收缓冲区,当然也可以调用SetComm()函数改变发送/接收缓冲区的大小。12.2.2串口的配置 当用CreateFile函数打开一个串行通信资源句柄时,系统将根据资源最近一次被打开时的设置,来初始化和配置资源。如果设备从没有被打开过,将使用系统的缺省值进行配置。 设备控制块(DeviceCentrolBlock,DCB)通过用户编程,就可以实现对串口的配置。串行口和串行通信驱动程序是通过一个数据结构进行配置的,这个数据结构被称为设备控制块(DeviceControlBlock),简称DCB。DCB结构的成员,确定了资源配置的设置。12.2.3超时设置 通信资源句柄有一套影响读写操作的相关的超时参数,当一个超时后,就能引起各种操作的结束,即使指定数目的字符尚未读写完。在读写操作中发生超时并不作为错误处理。利用超时参数可以定义两种超时:间隔超时-当接收到相邻字符的时间间隔超过给定的毫秒数时,间隔超时将发生。从接收第一个字符开始计时,当接收到一个新的字符时重新开始计时。总量超时-当读写花费的时间操作超过计算出的毫秒数时,总量超时将发生。计时从I/O操作开始后立即进行。写操作只支持总量超时,读操作支持两种超时,可以单独使用或组合使用。 超时参数的设置可以用COMMTIMEOUTS结构实现。12.2.4串口的写操作 在串口配置成功后,下一步就可以进行读/写串口的操作了。写串口程序相对比较简单,调用WriteFile()函数就可以实现。函数调用的一个例子如下: WriteFile(hCom1,out,length,nToWrite,o); 其中hCom1是串口的句柄,out为指向存储写入数据的缓冲区,length表示要发送的数据长度,nToWrite为实际写入的字节数,o为指向一个OVERLAPPED结构,使数据的写操作在后台进行。12.2.5串口的读操作 实现读串口的关键在于判断何时去读才能读完全部的数据。首先用SetCommMask()函数设置的事件掩码值为EV_CHAR,使Wa
您可能关注的文档
- Visual Basic应用任务教程课件:Visual Basic入门.ppt
- Visual Basic应用任务教程课件:数据库管理.ppt
- Visual Basic应用任务教程课件:数组与过程.ppt
- Visual Basic应用任务教程课件:文件管理.ppt
- Visual Basic语言程序设计及实验教程课件:Visual Basic语言基础.ppt
- Visual Basic语言程序设计及实验教程课件:过程.ppt
- Visual Basic语言程序设计及实验教程课件:键盘鼠标事件和图形操作.ppt
- Visual Basic语言程序设计及实验教程课件:顺序结构程序设计.ppt
- Visual Basic语言程序设计及实验教程课件:选择结构程序设计.ppt
- Visual C++程序设计教程(第二版)课件:Android Eclipse集成开发环境.ppt
文档评论(0)