微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > WINDOWS环境下PC机与单片机的通信

WINDOWS环境下PC机与单片机的通信

时间:03-29 来源:互联网 点击:

在自动控制系统中,PC机与单片机组成上位机和下位机,其基本构成是:下位机(单片机系统)完成信号检测、A/D转换和简单的控制功能,通过系统总线(如RS-232、RS-485、USB)与上位机(PC机)相连,进行监测、控制,形成主从式结构。下面就上位机和下位机之间目前几种常用的通讯方法作一些介绍。

1、RS-232的串行通讯

在工业控制中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,成本低,且完全能满足要求,所以应用广泛。

1.1、利用VC++的标准通信函数

利用VC++的标准通信函数_inp和_outp可实现串口通信。下面是一个串口初始化的程序:
Void init_com (PORT)
{char i;
outp(PORT+3,0x80);
outp(PORT,0x0C);
outp(PORT+1,0);
outp(PORT+3 ,0x3a);
outp(PORT+3 ,0x03);
i=inp(PORT+5) 0xfe;
outp(PORT+5,i);}

1.2、使用串行通信控件MSComm

MSCOMM控件,即Microsoft Communication Control,是Microsoft为简化Windows下串行通信编程而提供的ActiveX控件。它提供了一系列标准通信命令的使用接口,利用它可以建立与串口的连接,并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。MSCOMM控件可用于创建电话拨号程序、串口通信程序和功能完备的终端程序。

串行通信控件MSComm32.OCX提供了使用RS-232来进行数据通信的所有协议,VC编程语言为该控件提供了标准的事件处理函数、过程,并通过属性和方法提供了串行通信的设置。它使用户能够方便地访问Windows串行通信驱动程序的大多数特性,包括输入、输出缓冲区的大小及决定何时使用流控制命令挂起数据传输等。

在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_Serial),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性。如果需要通过多个串行口与多台设备通信,那么每一个串行口对应于一个单独的MSComm控件。串行口的设置参数既可以在对话框编辑器里设定,也可以在程序代码中通过调用CMSComm类的成员函数设定。例如,我们可以在MyCOMDlg类的OnInitDialog成员函数中初始化MSComm控件的参数,代码如下:
BOOL CMyCOMDlg::OnInitDialog ()
{
CDialog::OnInitDialog ();
m_wndCOM1.SetCommPort(1);
m_wndCOM1.SetSettings(9600,e,7,1);
m_wndCOM1.SetRThreshold(1);
m_wndCOM1.SetSThreshold(0);
m_wndCOM1.SetInputLen(1);
m_wndCOM1.SetPortOpen(TRUE);
Return TRUE
}

打开所需串口后,我们需要考虑串口通信的时机。在接收或发送数据过程中,可能需要监视并响应一些事件和错误,所以事件驱动是处理串行端口交互作用的一种非常有效的方法。使用OnComm事件和CommEvent属性捕捉并检查通信事件和错误的值。发生通信事件或错误时将触发OnComm事件,CommEvent属性的值将被改变,应用程序通过检查CommEvent属性值并做出相应的反应。

如图1是PC机与多个单片机连接的原理图,图2是其通信程序流程图。

1.3、使用API函数

Windows 应用程序要与标准串口通信,Windows函数库中提供了24个低级函数,这些函数为与外部设备的通信提供了基本的工具,文件输入和文件输出函数为通信资源句柄的打开、关闭以及执行读写操作提供了基本的接口,Win32 API也包含一系列访问通信资源的通信函数,具体工作过程如下:首先打开一个通信资源句柄CreateFile(),接着进行串行通信资源的配置(包括波特率、奇偶校验、停止位和数据位等信息),通过SetCommState()、GetCommState()进行修改和查询完成初始化设置;串行通信资源的读写通过ReadFile()、WriteFile()来完成收发数据,监视串行通信资源某些可能发生的事件可通过WaitCommEvent()来完成,向与某通信资源相关的设备驱动程序发送控制命令,使驱动程序执行特定任务。

控件虽然简单易用,但由于必须拿到对话框中使用,在一些需要在线程中实现通信的应用场合下,控件的使用显得捉襟见肘。API是附带在Windows内部的一个极其重要的组成部分。Windows的32位API主要是一系列很复杂的函数和消息集合。它可以看作是Windows系统为在其下运行的各种开发系统提供的开放式通用功能增强接口。通信程序在CreateFile处指定串口设备及相关的操作属性,再返回一个句柄,该句柄将被用于后续的通信操作,并贯穿整个通信过程。串口打开后,其属性被设置为默认值,根据具体需要,通过调用GetCommState(hComm,dcb)读取当前串口设备控制块DCB设置,修改后通过 SetCommState(hComm,dcb)将其写入。运用ReadFile()与WriteFile()这两个API函数实

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top