时间紧张,先记一笔,后续优化与完善。
在计算机中,数据通信主要有两种:一种是串口通信,每一个字符的二进制位按位排列停止传输,速度慢,但传输距离较远。鼠标口和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妙
文章结束给大家分享下程序员的一些笑话语录:
刹车失灵
有一个物理学家,工程师和一个程序员驾驶着一辆汽车行驶在阿尔卑斯山脉 上,在下山的时候,忽然,汽车的刹车失灵了,汽车无法控制地向下冲去, 眼看前面就是一个悬崖峭壁,但是很幸运的是在这个悬崖的前面有一些小树 让他们的汽车停了下来, 而没有掉下山去。 三个惊魂未定地从车里爬了出来。
物理学家说, “我觉得我们应该建立一个模型来模拟在下山过程中刹车片在高 温情况下失灵的情形”。
工程师说, “我在车的后备厢来有个扳手, 要不我们把车拆开看看到底是什么 原因”。
程序员说,“为什么我们不找个相同的车再来一次以重现这个问题呢?”