基于VC++6.0实现的串口通讯

合集下载

利用VC_6_0实现温度采集模块的串行通信

利用VC_6_0实现温度采集模块的串行通信
% 来稿日期: "##7 5 6" 5 "6
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTU
中图分类号:UY98
本文所述系统 Y= 机与外围设备间选用 8 针串口的 DA 5 "9" 5 = 标准进行串口通信,因为互不使用对方的传送控制信 号,故采用三线制串口通信接线方法,即发送数据线 D[. : " 脚;、 接收数据线 U[. : 9 脚 ; 和信号地 LK. : $ 脚 ; 三脚相连, 其 (或线 ) (或线 ) 中接收数据针脚 与发送数据针脚 彼些交叉相连, 信号地对应相接。传输线采用屏蔽双绞线。这里计算机与外部 设备进行数据交换的示意图见图 6 ] " ^ 。
9) /) / 程序主控模块的实现步骤
(" ) 创建项目: 创建一个基于对话框的 +U& 应用程序项目, 命名为 &>00J@TGBK。 (/ ) 插人通信控件: 选择 RB>VNAD 菜单下 5KK W> RB>VNAD 子菜 单中的 &>0S>FNFD. GFK &>FDB>H. 选项,在弹出的对话框中双击 1NX@.DNBNK 5AD@MNO &>FDB>H. 项,则所有注册过的 5AD@MNO 控件出 现在 列 表 框 中 。 选 择 +@AB>.>CD &>00EF@AGD@>F. &>FDB>HY MNB.@>F () $ ,单击 :F.NBD 按钮即可将通信控件插人该工程。该插人动作 引起的变化一是在 &HG..%@NL 窗口中出现相应的 &+2&>00 类; 二是在对话框编辑器工具栏中出现该控件图标。 (9 ) 设置主界面, 添加控件及其控制变量: 在主对话框编辑 器窗口中添加 +2&>00 控件和其它需要的控件,为每一个控件 添加控制变量名和变量类型。设对应 +2&>00 控件的变量名为 变量类型选为 &+2&>00 类。本文所述系统采用的是 4 0Z&>0, 路热电偶采集温度,相应的 4 个接收显示温度数值的静态文本 框控件的控制变量依次设为 0Z.DB1NAN@MN$ = 0Z.DB1NAN@MN* , 变量 “自动发送 ” “开始接收 ” 主界面中 和 按钮控 类型选为 &2DB@FX 类。

基于VC6.0MFC的简单串口通信软件编程

基于VC6.0MFC的简单串口通信软件编程

基于VC6.0MFC的简单串⼝通信软件编程(⼀)基于对话框编程基本步骤:1.新建基于对话框的⼯程;2.拖曳所需的基本控件,构成界⾯;3.使⽤类向导(CLASS WIZARD)创建与基本控件对应的成员变量、成员函数,确定与函数相应的消息或事件——即触礁发该函数执⾏的条件(如单击等)。

(⼆)使⽤mscomm控件:1.基本设置:m_com.SetCommPort(1); //选择COM1m_com.SetInBufferSize(1024); //设置输⼊缓冲区的⼤⼩,Bytesm_com.SetOutBufferSize(256); //设置输出缓冲区的⼤⼩,Bytesif(!m_com.GetPortOpen()) //打开串⼝m_com.SetPortOpen(TRUE);m_com.SetInputMode(1); //设置输⼊⽅式为⼆进制⽅式m_com.SetSettings("4800,s,8,1");m_com.SetRThreshold(1); //为1表⽰有⼀个字符引发⼀个事件 m_com.SetInputLen(0);2.似乎每次设置m_com.SetSettings("4800,s,8,1"),必须先关再开串⼝才有效。

设置的校验位似乎只对发送数据有效,对接收数据⽆效。

3.虽然m_com.SetRThreshold(1)设置接收到⼀个字符就引发⼀个事件(触发执⾏函数),但执⾏函数读取到的数据可能不⽌1Byte,如另⼀串⼝连续发送多个字节,当串接收到第⼀个字节后就触发函数,但在函数去输⼊缓冲区读取数据时可以读到8Byte。

(三)MFC的⼀些基本使⽤:1.Unsigned char 与char不同,在执⾏加减时,char型当作带符号数(可能为负)。

2.当控件对应的变量是控件类时,可能通过该类的成员函数来获取数据或执⾏操作:如m_com是mscomm控件的变量,可以执⾏m_com.SetPortOpen(FALSE)来关闭串⼝。

VC++6.0实现串口

VC++6.0实现串口
if (!SetCommMask(hCom,EV_RXCHAR | EV_TXEMPTY))
{
MessageBox("掩码设置失败.","提示");
return;
}
DWORD param;
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunction,&param,0,&dwThreadID);
6.1.4 PC
利用Visual C++ API函数和MSComm控件编写程序实现PC与PC串口通信。
(1)两台计算机互发字符并自动接收,如一台计算机输入字符串“Please returnabc123”,执行“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,执行“发送字符”命令,信息返回到第一组的计算机。实际上就是编写一个简单的双机聊天程序。
{
MessageBox("端口打开失败.");
return;
}
SetupComm(hCom,1024,1024); //设置发送和接收缓冲区大小
//设置串口信息
DCB b;
GetCommState(hCom,&dcb);
dcb.BaudRate = 9600;
dcb.fBinary = True;
rOverLaped.hEvent = CreateEvent(NULL,True,False,NULL);//创建一个事件对象
if (ReadFile(hCom,DataBuffer,rst.cbInQue,&factbyte,&rOverLaped))
//读取数据到缓冲区中

基于VC_6_0的多串口通信方法_王中训

基于VC_6_0的多串口通信方法_王中训
1 系统结构
该多路串行通信系统由上位机和下位机构成 ,如图 1所 示 ,上位机为 PC机 , PC机通过多用户卡可扩展出八个串口 , 下位机为单片机 。与传统的 TTL 等数字电路的逻辑电平不 同 , RS2232标准规定信号电压在 - 15 ~ - 3 V 和 3~15 V ,传 号和空号之间至少有 6V 的电压差 ,提高了数据传输的可靠 性和抗干扰能力 。因此 ,单片机与 PC机需要用一个电平转 换板 , 用 MAX232 芯 片 实 现 TTL 电 平 和 RS232 电 平 相 互 转换 。
图 2 单线程实现多串口通信流程 3. 2 创建读写线程 ,实现串行通信
如图 3所示 ,打开并配置完串口后 ,开启两个线程 ,一个 读线程和一个写线程 ,主线程主要负责将所有串口接收到的 数据进行处理显示以及各个子线程的调度和管理 ,读线程负 责读取八个串口的数据 ,写线程负责向需要控制的串口中写 入数据 。在实际应用中向串口写入数据的操作并不频繁 ,所 以写线程在刚开始创建时即被挂起 ,当需要向串口发送数据 时才激活写线程 ;当写操作完成后 ,又被挂起 ,以减少系统开 销 ,提高程序的执行效率 [4 ] 。
由于运用标准通信函数需要对硬件电路的结构原理非常了解编程比较复杂scomm控件进行串口编程scomm控件是微软公司提供的indows环境下实现串行通信的利用它可以非常简单地实现串行通scomm控件虽然简单易用但在实际测试中也发现了其本身的一些缺点如实时性不高高速通信时准确率较差和处理速度较慢等缺点另外由于其本身存在一i函数实现串口编程利用有很强的灵活性但需要用户详细了解串口程序开发过程和一些复杂indows系统中串口和其他通信设备是作为文件处理的
第 28卷 2008年 6月
计算机应用 Computer App lications

基于VC++6.0实现的串口通讯

基于VC++6.0实现的串口通讯

i f ( m — c t r l C o m m. G e t C o m m E v e n t ( ) = = 2 )
{ v _ i n p = m_ c t r l C o mm. Ge t l n p u t ( ) ;

_
i n p=v i n p;

( 2 ) 利 用 VC 的标 准通 讯 函数 直接 对 串口进 行 操 作 ; ( 3 ) 使 用 通 讯控 件 ( MS Co mm) 。 以上 几种 方 法 中前 两 种 由 于使 用 时 需要 的 专 业 程 度 比较
V C + + 6 . 0环 境 下 利 用 MS C 0 mm 控 件 实 现计 算 机 与 外 部 设 备 之 间 的 串 口通 讯 。
【 关键词 】 串 口通讯 ; V C + + 6 . 0 ; MS C o m m
【 中图分类号 】 T P 2 7 + . 5
【 文献标识码 】 A
2 0 1 5年 7 月 上
基于 V C + + 6 . 0实现 的 串口通讯
张 波涛 , 闰锦 丽 , 罗 维 ( 陕西长岭电子科技有限责任公司 产品开发部, 陕西 宝鸡 7 2 1 0 0 6 )
【 摘 要 】 串行 通讯广泛 应用于计 算机与其 它设备 之间的通讯 中 , 是计 算机 与外部 设备进行 数据通讯 时经常使 用的 方式 之~。 本文介绍 了
即 可 完成 串 口编 程 , 实现 与被 控 制 对 象 的 串行 通 讯 、 数 据 交换 ,
发 送 代 码如 下 : v o i d C S e r i a l P o r t T e s t D l g : : 0 n S e n d ( C S t r i n g s t r ) { i n t i , k ; c h a r d a t a [ 5 1 2 ] ; k = S t r 2 H e x ( s t r , d a t a ) ;

基于VC++ 6.0的串口通信实验报告

基于VC++ 6.0的串口通信实验报告

网络与通信实验报告题目:串口通行实验班级:0309103学号:*********姓名:***指导老师:付大丰日期:2012-10-21一、实验要求把两台计算机的串口通过串口线连在一起,通过串口实现两台计算机通讯。

可以利用高级语言、C语言编程实现,要求程序界面友好,有发送和接收功能,其接收和发送内容可在屏幕上显示。

二、实验原理串口通讯把数据的字节分解成单个的二进制比特流依次传输,其结构简单,连接线少,应用非常广泛。

实现串口通信的方法很多。

如:利用标准通信函数实现串口通信、利用API实现串口通信和利用ActiveX控件实现。

本文主要采用ActiveX控件Microsoft CommunicationsControl(MSComm)编程,Windows平台先进的ActiveX技术使得对串口编程不再需要处理烦琐的细节。

利用已有的AxtiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务。

以下对ActiveX控件属性进行简单介绍,在ClassWizard中为新创建的通信控件定义成员对象(CMSComm m_comm),通过该对象便可以对串口属性进行设置,MSComm控件共有27个属性,这里只介绍其中几个常用属性:CommPort:设置并回通讯端口号,缺省为COMl。

Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。

PortOpen:设置并返回通讯端口的状态,也可以打开和关闭端口。

Input:从接收缓冲区返回和删除字符。

Output:向发送缓冲区写一个字符串。

InputLen:设置每次Input读入的字符个数,缺省值为0,表明读取接收缓冲区中的全部内容。

InBufferCount:返回接收缓冲区中已接收到的字符数,将其置0可以清除接收缓冲区。

InputMode:定义Input属性获取数据的方式(为0:文本方式;为1:二进制方式)。

RThreshold和SThreshold:表示在OnComm事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。

用VC6。0实现串行通讯的三种方法

用VC6。0实现串行通讯的三种方法

摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。

在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。

依据不同的条件实现对串口的灵活编程控制是我们所需要的。

在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。

串行通信程序开发环境为 VC++ 6.0。

Windows下串行通信与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。

串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。

与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。

以下将结合实例,给出实现串行通信的三种方法。

实现串行通信的三种方法方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。

此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。

基于VC_6_0的PC机与单片机串行通信设计

基于VC_6_0的PC机与单片机串行通信设计
OF SI GNAL PROCESSIN G CIRCU IT Type No . C4674 FOR IM2 PROV ED TETRA - LA TERAL 2 - DIM ENSIONAL PSD ,2000
基于 VC + + 610 的 PC 机与单片机串行通信设计
赵莉 赵波 徐华英
(江苏省计量测试技术研究所 ,南京 210007)
( mm)
A 区 ( ±215mm)
- 010026 + 01006
B区
- 5 至 - 215mm - 010353 215 至 5mm - 010382
+ 01052 + 01056
Hale Waihona Puke 21 背景光 二维 PSD 传感器的光谱响应比较宽 (330nm~ 1100nm) ,其峰值响应波长为 900nm (红外光) ,因此 在使用时总存在一定强度的背景光 ,这是造成位置 检测误差的主要原因之一 。减小背景光影响可采用 光学的方法即在 PSD 感光面上加上一透过波长与 信号光源匹配的干涉滤光片 ,可滤掉大部分的背景
设计及 Active X 的灵活性而受到软件开发者的青 睐 ,被广泛应用于各个领域 。
本文介绍在 Windows 环境下 , 利用 MSComm 控件来完成 PC 机和 MCS - 51 单片机 (8051) 之间 的串行通信 。
二 、硬件连接设计
本例是近距离 (15 米以内) 串行通信 , PC 机和 单片机之间通过 RS - 232 直接相连 。由于单片机 串口的输入输出均为 T TL 电平 ,而 PC 机上的 RS
摘 要 本文介绍了如何利用通信控件 MSComm 设计 PC 机与单片机之间的串行通信 。硬件部分采用 MAX232A ESE 芯片解决了 PC 机与单片机之间通信连接电平的不一致问题 ;软件部分给出了 VC + + 610 编写的 PC 机通信程序段和汇编语言编写的单片机通信程序 ,并成功应用于干扰场强测量仪检定系统 。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于VC++6.0实现的串口通讯
摘要:串口通讯作为一种灵活、方便、可靠的通讯方式,广泛应用于计算机与其它设备之间的通讯以及工业控制系统中,是计算机与外部设备进行数据通讯时经常使用的方式之一。

本文介绍了VC++6.0环境下利用MSComm控件实现计算机与外部设备之间的串口通讯。

关键词:串口通讯VC++6.0MSComm
一、引言
串口作为计算机标准配置中的对外接口,由于其简便、易行及数据传输可靠等优点,使其成为计算机与外部设备之间通讯的主要手段之一,广泛应用于工业控制系统中。

VC++6.0作为面向对象的可视化开发工具,具有良好的界面设计能力,利用具有良好运行效率和稳定性的MSComm控件,可以简单方便的实现串口通讯功能。

二、MSComm控件介绍
VC++6.0是基于Windows操作系统的主流编程可视化语言。

应用VC++6.0开发串行通讯通常有如下几种方法:
1.利用Windows API通讯函数。

2.利用VC的标准通讯函数_inp,_inpw,_inpd,_outp,_outpw,_outpd等直接对串口进行操作。

3.使用Microsoft Visual C++的通讯控件(MSComm)。

以上几种方法中,前两种由于使用时需要的专业程度比较高,需要了解内部接口及标准通讯函数的定义,因此比较困难;第三种方法较简单,对使用者要求不高,只需对串口进行简单配置即可。

Microsoft Communications Control(以下简称MSComm)是Microsoft公司基于组件对象模型(COM)开发的简化Windows下串口通讯编程的ActiveX控件,它为应用程序提供了通过串口接口收发数据的简便方法。

该控件屏蔽了通讯过程中的底层操作,用户只需通过设置并监视其属性和事件,即可完成串口编程,实现与被控制对象的串行通讯、数据交换,并监视或响应在通讯过程中可能发生的各种错误和事件。

具体有两种处理方法:
一是事件驱动(Event-Driven)。

二是查询法。

应用MSComm控件进行串口通讯编程的步骤如下:
(1)在建立的程序工程中插入Microsoft Communications Control控件。

(2)添加MSComm控件ID的控制变量(或对象)。

(3)对串口进行初始化,设置MSComm控件的属性。

(4)添加串口事件的消息处理函数OnComm()函数,在该函数中根据需要,编写数据处理代码。

三、串口通讯的实现
1.建立应用工程
打开Visual C++6.0,建立一个基于对话框的MFC应用程序:SerialPortTest。

然后在对话框中添加ActiveX控件下的Microsoft Communications Control,其中该控件在运行时是不显示的,设计时可以放在对话框任何位置。

2.初始化串口
串口初始化是使用MSComm控件的控制变量m_ctrlComm对相应函数的参数
进行设置来完成。

3.串口接收数据
串口通讯过程中的数据处理采用事件驱动方式(Event-Driven),这种方式的优点是实时性强,可靠性高。

通过OnComm事件和CommEvent属性捕捉并检查通讯事件和错误的值。

发生通讯事件或错误时,将触发OnComm事件,CommEvent属性的值将被改变,应用程序检查CommEvent属性值并做出相应的反应。

4.串口发送数据
串口发送数据可以建立在一个编辑控件和一个按钮控件的基础上,以事件驱动(Event-Driven)方式来实现。

其中编辑控件中输入需要通过串口发送的数据,通过按钮来实现串口数据的发送。

其中发送代码如下:
void CSerialPortTestDlg::OnSend(CString str)
{
int i,count;
char data[512];
count=Str2Hex(str, data); //要发送的数据内容
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(count);
for(i=0;i<count;i++)
m_Array.SetAt(i,data[i]);
m_ctrlComm.SetOutput(COleVariant(m_Array));
}
四、结语
在VC++6.0对话框的基础上利用MSComm控件实现串口数据通讯,用户不必了解具体的硬件原理,简化了编程,使程序透明化,适应性好,可移植性高。

经实践证明,在各种环境下运行情况良好。

在此基础上稍加改动,即可实现在不同通讯协议和不同通讯设备(如单片机、计算机等设备)之间的串口通讯。

由于这种技术具备简单,易操作,可靠性高等优点,未来将越来越多的被采用。

相关文档
最新文档