用API函数实现串行通讯

以往的DOS系统是通过DOS中断和BIOS中断向用户提供串行接口的通讯能力。在Windows环境下,C++的开发工具既没有提供象DOS和BIOS中那样专门的串行通讯控制方法,也不允许用户直接控制串口的中断。

为了保证资源共享,Windows系统完全接管了各种硬件资源,使用中断来控制端口将破坏系统的多任务性,使系统的稳定性受到影响。但Windows同时也提供了功能强大的API函数使用户能间接的控制串行通讯。

1、实现串行通讯的相关API函数

API函数不仅提供了打开和读写通讯端口的操作方法,还提供了名目繁多的函数以支持对串行通讯的各种操作。常用函数及作用如表5-1所示。

表5-1 常用串行通讯API函数及其作用

函数名 作用

CreateFile 打开串口

GetCommState 检测串口设置

SetCommState 设置串口

BuilderCommDCB 用字符串中的值来填充设备控制块

GetCommTimeouts 检测通信超时设置

SetCommTimeouts 设置通信超时参数

SetCommMask 设定被监控事件

WaitCommEvent 等待被监控事件发生

WaitForMultipleObjects 等待多个被监测对象的结果

WriteFile 发送数据

ReadFile 接收数据

GetOverlappedResult 返回最后重叠(异步)操作结果

PurgeComm 清空串口缓冲区,退出所有相关操作

ClearCommError 更新串口状态结构体,并清除所有串口硬件错误

CloseHandle 关闭串行口

2、打开串口

函数CreateFile原本用于打开文件,但它同样可用于打开一个通信端口。与系统中其他对象一样,通信端口也是用句柄来标识的。CreateFile函数返回被操作的通信端口句柄,其调用方法如下:

HANDLE CreateFile (

时间: 2024-11-01 16:21:26

用API函数实现串行通讯的相关文章

pb 串行通讯-使用汽车OBD诊断,波特率设置错了会影响整车网络吗?

问题描述 使用汽车OBD诊断,波特率设置错了会影响整车网络吗? 我发现读报文的时候波特率设置错了,整车会在仪表报故障.我没有向总线发送数据啊!难道串行总线通信,用一个错误的波特率接受数据会影响总线? 解决方案 if so, we cannot read the obd data anymore

C#中串行通讯控件mscomm.ocx遇到的很奇怪的问题!?

问题描述 我在用c#开发一个收发短信的程序,需要与串口短信猫通信,于是我就采用了mscomm32.ocx控件,注册引用一切正常,代码可以通过编译,生成的程序运行也很正常,没有任何错误提示,但是运行时却总是没有结果,我设置断点调试了一下,结果发现出现了一个很奇怪的问题,实在无法理解,各位谁有这方面的经验,帮助一下啊,在线等ing--下面是出现问题的代码:部分代码:----stringBuffer="";stringbufy="AT+CSCA?r";inti=0;whi

pb 串行通讯-急求,大家好,我是PB软件的新手,在使用MSCOMM控件编写的时候遇到问题

问题描述 急求,大家好,我是PB软件的新手,在使用MSCOMM控件编写的时候遇到问题 在使用MSCOMM控件编写oncomm程序的时候,显示错误:coo31:syntax error string Is_input,Out_input choose case Ole_MSC.object.commevent case 2 //CommEvent属性为CommEvReceive Ole_MSC.object.InputLen=10000 //读入缓冲区中的数据长度 Is_input=Ole_MSC

详解PHP对象的串行化与反串行化_php实例

什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候 今天我们要提到四个函数 全部串行化 1.serialize(对象名) 将指定的类对象串行化 $str=serialize($per) //将per对象串行化,结果返回给$str 2.unserialize(串行化后的返回值) 返回结果是对象 $per=unserialize($str); 局部串行化 3.__sleep() 串行化某对象的部分属性. 4.__wakeup()反串行化时,初始化(其实是修改)对象内容 前两个的使

php面向对象全攻略 (十六) 对象的串行化_php基础

把对象串行化 有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串, 等到达另一端时,再还原为原来的对象,这个过程称之为串行化,就像我们现在想把一辆汽 车通过轮船运到美国去,因为汽车的体积比较大,我们可以把汽车拆开成小的部件,然后我们把这些部件通过轮般运到美国去,到了美国再把这些部件组装回汽车. 有两种情况我们必须把对象串行化,第一种情况就是把一个对象在网络中传输的时候要 将对象串行化,第二种情况就是把对象写入文件或是数据库的时候用到串行化. 串行化有两个过程,一个是串行

php面向对象 自动加载类 对象串行化 多态的应用

自动加载类很多开发者写面向对象的应用程序时,对每个类的定义建立一个 PHP 源文件.一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件的列表. 在软件开发的系统中,不可能把所有的类都写在一个PHP文件中,当在一个PHP文件中需要调用另一个文件中声明的类时,就需要通过include把这个文件引入.不过有的时候,在文件众多的项目中,要一一将所需类的文件都include进来,是一个很让人头疼的事,所以我们能不能在用到什么类的时候,再把这个类所在的php文件导入呢?这就是我们这里

串口通讯-有关串行口通讯的流程图

问题描述 有关串行口通讯的流程图 "基于ARM的的一维条码数据采集的设计与实现"这个是我的毕设题目,写论文时需要画一个流程图,是关于串口通讯处理流程图,里面含计数.显示.中断什么的,请问这个流程图怎么画啊??

vc-VC里怎样实现向另一应用程序发送命令行参数?需要调用哪些API函数?

问题描述 VC里怎样实现向另一应用程序发送命令行参数?需要调用哪些API函数? 现要写一个程序甲,甲向乙程序发送命令行参数,乙解析该参数并作相应操作, 现在问题是具体甲怎样向乙发送命令行参数?需要调用哪些API函数? (抱歉还是菜鸟,没有金币悬赏~谢谢各位大神了!) 解决方案 如果a是启动进程B的话,那么CreateProcess就可以启动B,同时带上命令行参数,B解析参数进行动作. 如果B已经启动了,这个其实就是进程通信,最简单的方式是发送消息,PostMessage.B根据消息进行对应的操作

Windows API 函数列表 附帮助手册

原文:Windows API 函数列表 附帮助手册 所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了.   帮助手册:700多个Windows API的函数手册 免费下载   API之网络函数 API之消息函数 API之文件处理函数 API之打印函数 API之文本和字体函数 API之菜单函数 API之位图.图标和光栅运算函数 API之绘图函数 API之设备场景函数 API之硬件与系统函数 API之进程和线程函数 API之控件与消息函数     1. API