2013年(5)
分类: C/C++
2013-05-22 17:22:58
在计算机中,数据通信主要有两种:一种是串口通信,每个字符的二进制位按位排列进行传输,速度慢,但传输距离较远。鼠标口和usb口都属于串口。另一种是并行通信,每个字符的二进制位使用多条数据线同时进行传输,传输速度快,但传输距离相对比较近。计算机内部传输一般使用这种方式,打印口也属于并行端口。
一、串口通信原理
串行端口是cpu和串行设备间的编码转换器,当数据从串口发送出 时,字节数据转化为串行的位。在接收时,串行的位转化为字节数据。在Windows下串口是系统的一种资源,应用程序要使用串口进行通信,必须向计算机申请该串口资源,使用完毕,应释放资源。
二、串口通信特点
1,通信成本低,仅一条通信链路
2,传输速度慢。
三、串口通信传输方式
1,单工通信,固定的由发送端发送数据到接收端 电台与电视机
2,半双工通信,允许双向互相发送数据,但是不能同时 对讲机
3,双工通信,允许双方互相同时发送和接收数据 手机
四、MSComm控件串口通信开发
MSComm空间是微软公司提供的ActiveX空间,用于简化串口程序开发。在Visual C++和VS2005环境中都可以方便地添加该控件。当导入CMSComm类后,就可以在程序中使用MSComm控件了。
1,MSComm常用方法
1)GetCommPort() 获取串口号
2)SetCommPort() 设置端口号
3)GetRThreshold()与SetRThreshold()用于获取与设置接收缓冲区接收到多少个字符,MSComm控件触发Oncomm事件。
4)GetInputMode()与SetInputMode()用于获取和设置传输数据的类型,参数为1,二进制传输,参数为0,文本传输。
5)SetSettings()用于设置波特率、奇偶校验,数据位和停止位参数
6)GetInput()用于从接收缓冲区获取数据
7)SetOutput()用于向发送缓冲区写入数据
8)GetPortOpen()/SetPortOpen()获取串口状态,打开或关闭串口
9)GetCommEvent()获取串口发生的事件。1----发送数据;2---接收数据;3----CTS信号发生变化,准备发送数据;4---DSR信号发生变化,准备接受数据。
2,串口配置代码
if ( m_com . GetPortOpen ())
m_com . SetPortOpen ( FALSE );
m_com . SetCommPort ( com ); // 设置端口
if (! m_com . GetPortOpen ())
m_com . SetPortOpen ( TRUE ); // 打开串口
else
AfxMessageBox ( "cannot open serial port" );
m_com . SetSettings ( "9600,n,8,1" ); // 设置波特率,校验,数据位,停止位
m_com . SetInputMode (0); // 以文本方式捡取数据
m_com . SetRThreshold (1); // 参数表示每当串口接收缓冲区中有多于或者等于个字符时将引发一个接收数据的OnComm 事件
m_com . SetInputLen (0); // 设置当前接收区数据长度为
2, 串口接收OnComm 事件代码如下
intresEvent;
resEvent =m_mscom.GetCommEvent();
switch(resEvent)
{
case 2: //接收数据
{
if(IsSended) //开始接收数据
{
VARIANTdata;
data= m_mscom.GetInput();
CStringstr;
str= data.bstrVal;
IsSended= FALSE;
MessageBox(str);
}
}
break;
}
3,串口发送数据代码如下
CString str ;
m_data.GetWindowText(str);
IsSended =FALSE; //发送完成
m_mscom.SetOutput((COleVariant)str);
IsSended =TRUE; //发送完成
Sleep(1000);//延时1妙
本文转载自CSDN博客,原文链接:http://blog.csdn.net/xue815020462/article/details/8941578