- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章 串口通信程序的开发 12.1 串口通信的内部机制 应用程序经常要与外部设备进行通信,这种通信通常是通过一个标准的并行口和两个串行口进行的。外部设备主要是与并行口相连的打印机,与串口相连的调制解调器、鼠标以及其他与串口、并口相连的仪器设备。 12.1.1 Windows串行通信的工作原理 常用的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函数打开一个串行通信资源句柄时,系统将根据资源最近一次被打开时的设置,来初始化和配置资源。如果设备从没有被打开过,将使用系统的缺省值进行配置。 设备控制块(Device Centrol Block,DCB)通过用户编程,就可以实现对串口的配置。串行口和串行通信驱动程序是通过一个数据结构进行配置的,这个数据结构被称为设备控制块( Device Control Block ),简称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()函数设置的事件
您可能关注的文档
- Visual C# 2008程序设计电子教案+习题答案+源代码曹静 第9章.ppt
- Visual C# 2008程序设计电子教案+习题答案+源代码曹静 第10章.ppt
- Visual C# 2008程序设计电子教案+习题答案+源代码曹静 习题参考答案 第六章.doc
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch01.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch02.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch03.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch04.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch05.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch06.ppt
- Visual C# 2008程序设计教程 教学课件 作者 978 7 302 26232 9 ch07.ppt
文档评论(0)