资源描述:
《vc串口通信资料汇集整理(pdf)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、VC串口通信资料汇集整理(PDF)2脚:发送数据TXD;3脚:接收数据RXD;4脚:请求发送RTS;5脚:清除发送CTS;6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD;1脚:保护地;7脚:信号地.②电气特性:数据传输速率最大可到20Kbps,最大距离仅15m.注:看了微软的MSDN6.0,其WindowsAPI中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256Kbps!也不知道到底是什么串行通讯设备?但不管怎样,一
2、般主机和单片机的串口通讯大多都在9600bps,可以满足通讯需求.③接口的典型应用:大多数计算机应用系统与智能单元之间只需使用3到5根信号线即可工作.这时,除了TXD,RXD以外,还需使用RTS,CTS,DCD,DTR,DSR等信号线.(当然,在程序中也需要对相应的信号线进行设置.)以上接法,在设计程序时,直接进行数据的接收和发送就可以了,不需要对信号线的状态进行判断或设置.(如果应用的场合需要使用握手信号等,需要对相应的信号线的状态进行监测或设置.)三.16位串口应用程序的简单回顾16位串口应用程序中,使用的16位的Wind
3、owsAPI通信函数:①OpenComm()打开串口资源,并指定输入,输出缓冲区的大小(字节);CloseComm()关闭串口;例:intidComDev;idComDev=OpenComm("COM1",1024,128);CloseComm(idComDev);②BuildCommDCB(),setCommState()填写设备控制块DCB,然后对已打开的串口进行参数配置;例:DCBdcb;BuildCommDCB("COM1:2400,n,8,1",&dcb);SetCommState(&dcb);③ReadComm,W
4、riteComm()对串口进行读写操作,即数据的接收和发送.例:char*m_pRecieve;intcount;ReadComm(idComDev,m_pRecieve,count);Charwr[30];intcount2;WriteComm(idComDev,wr,count2);16位下的串口通信程序最大的特点就在于:串口等外部设备的操作有自己特有的API函数;而32位程序则把串口操作(以及并口等)和文件操作统一起来了,使用类似的操作.四.在MFC下的32位串口应用程序32位下串口通信程序可以用两种方法实现:利用Act
5、iveX控件;使用API通信函数.使用ActiveX控件,程序实现非常简单,结构清晰,缺点是欠灵活;使用API通信函数的优缺点则基本上相反.以下介绍的都是在单文档(SDI)应用程序中加入串口通信能力的程序.一使用ActiveX控件:VC++6.0提供的MSComm控件通过串行端口发送和接收数据,为应用程序提供串行通信功能.使用非常方便,但可惜的是,很少有介绍MSComm控件的资料.⑴.在当前的Workspace中插入MSComm控件.Project菜单>AddtoProject>ComponentsandControls>Re
6、gisteredActiveXControls>选择Components:MicrosoftCommunicationsControl,version6.0插入到当前的Workspace中.结果添加了类CMSComm(及相应文件:mscomm.h和mscomm.cpp).⑵.在MainFrm.h中加入MSComm控件.protected:CMSCommm_ComPort;在Mainfrm.cpp::OnCreare()中:DWORDstyle=WS_VISIBLE
7、WS_CHILD;if(!m_ComPort.Create(N
8、ULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){TRACE0("FailedtocreateOLECommunicationsControl");return-1;//failtocreate}⑶.初始化串口m_ComPort.SetCommPort(1);//选择COM1m_ComPort.SetInBufferSize(1024);//设置输入缓冲区的大小,Bytesm_ComPort.SetOutBufferSize(512);//设置输入缓冲区的大小,Bytes//if(!m
9、_ComPort.GetPortOpen())//打开串口m_ComPort.SetPortOpen(TRUE);m_ComPort.SetInputMode(1);//设置输入方式为二进制方式m_ComPort.SetSettings("9600,n,8,1");//设置波