基于VC++6.0实现的串口通讯
利用VC_6_0实现温度采集模块的串行通信
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的简单串⼝通信软件编程(⼀)基于对话框编程基本步骤: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实现串口
{
MessageBox("掩码设置失败.","提示");
return;
}
DWORD param;
hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunction,¶m,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的多串口通信方法_王中训
该多路串行通信系统由上位机和下位机构成 ,如图 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实现的串口通讯
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 ( ) ;
s
_
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的串口通信实验报告
网络与通信实验报告题目:串口通行实验班级: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实现串行通讯的三种方法
摘要:本文介绍了在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 + + 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 机通信程序段和汇编语言编写的单片机通信程序 ,并成功应用于干扰场强测量仪检定系统 。
VC6_0环境下GPS差分定位中串口通信的实现(1)
&In form ationcom m u nication s 信息通信12摘 要:文章从对G P S 的差分技术的概述开始,继而以加拿大Novatel 公司生产的OEM4-G2L 板卡为例,介绍了N M E A 0183协议及其中$G P G G A 定位语句的格式,然后以详细的实例说明了基于VC6.0的计算机与G P S 接收机在差分定位中的串口通信程序。
关键词:G P S ;N M E A 0183;串口通信;M S C o m m 控件中图分类号:TN967.1 文献标识码:A 文章编号:1673-1131(2007)01-0012-03余志奇 沈琦/武汉大学测绘学院(武汉 430079)The Realization of GPS Receiver’s Serial Communications in Difference Position under the Environment of VC6.0Y U Z h i Q i , S H E N Q i(School of Geodesy and Geomatics at Wuhan University, Wuhan, 430079,China)Abstract: This article from to the GPS difference technology outline start, subsequently the OEM4-G2L board which produces by Canadian Novatel Corporation is an example, introduced the NMEA0183 agreement and its $GPGGA locate statement form, then the author showed by the detailed example based on the VC6.0 computer and the GPS receiver in difference position string mouth signal procedure.Key words: GPS; NMEA0183 protocol; Serial communication; MSComm controls余志奇(1982-),男,湖北省武汉市人,武汉大学测绘学院2005级硕士研究生,主要研究方向:卫星定位导航技术及其工程应用。
用VC++6.0实现PC与单片机之间串口数据交换
用VC++6.0实现PC机与单片机之间的串口数据交换参考连接:《串行通信》大全工业控制领域(如DCS系统),经常涉及到串行通信问题。
为了实现微机和单片机之间的数据交换,人们用各种不同方法实现串行通信,如DOS下采用汇编语言或C语言,但在Windows 环境下却存在一些困难和不足。
在Windows操作系统已经占据统治地位的情况下(何况有些系统根本不支持DOS如Windows2000)开发Windows 环境下串行通信技术就显得日益重要。
VC++6.0是微软公司于1998年推出的一种开发环境,以其强大的功能,友好的界面,32位面向对象的程序设计及Active X 的灵活性而受广大软件开发者的青睐,被广泛应用于各个领域。
应用VC++开发串行通信目前通常有如下几种方法:一是利用Windows API通信函数;二是利用VC的标准通信函数inp、inpw、inpd、outp、outpw、outpd等直接对串口进行操作;三是使用Microsoft Visual C++的通信控件(MSComm);四是利用第三方编写的通信类。
以上几种方法中第一种使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种需要了解硬件电路结构原理;第三种方法看来较简单,只需要对串口进行简单配置,但是由于使用令人费解的VARIANT 类,使用也不是很容易;第四种方法是利用一种用于串行通信的CSerial类(这种类是由第三方提供),只要理解这种类的几个成员函数,就能方便的使用。
笔者利用CSerial类很方便地实现了在固定式EBM气溶胶灭火系统分区启动器(单片机系统)与上位机的通信。
以下将结合实例,给出实现串行通信的几种方法。
1 Windows API通信函数方法与通信有关的Windows API函数共有26个,但主要有关的有:CreateFile() 用“comn”(n为串口号)作为文件名就可以打开串口。
ReadFile() 读串口。
基于VC++ 6.0的高速串口通信数据采集系统
基于VC++ 6.0的高速串口通信数据采集系统1 引言串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一,他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用.高速串口数据采集软件的设计不同于普通串口通信,其要求在接收数据采集设备发送大量数据的同时完成对已接受到数据的实时存储,如果处理不好二者之间的关系,会造成数据的缺失甚至程序的崩溃.这就要求应用程序能够同时处理两件以上不同的任务.Win32是基于线程的抢先式多任务操作系统,使得应用程序能够同时执行多个任务,即在一个进程中可以同时运行多个线程.一个线程是指程序的一条执行路径,系统不停的在多个线程之间切换.由于时间很短,看上去多个线程在同时运行.对于通讯这种需要花费大量时间来测试I/O操作,同时又要保持响应用户其它操作的应用程序来说,创建多线程是最佳选择.2 系统结构系统的组成结构如图1所示.中央控制PC机是系统的核心,要求数据采集软件具有良好的稳定性和兼容性.所以独立设计了一套基于Visual C++ 6.0的多线程通讯软件,它与前端的扫描仪串口通信是典型的主从式,在硬件上通过MOXA公司的串口卡实现500K波特的采集速率.图1 数据采集系统结构3 用MSComm控件实现高速串口数据采集的问题MSComm控件在串口编程时非常方便,程序员不必花时间去了解较为复杂的API函数,只需要在串口通信资源的属性(Properties)一项中配置串口,串口通信的波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小以及超时设置等均在此时进行配置.完成串口配置之后即可打开串口,进行数据读写.对于一般数据交换及串口通信来说,MSComm控件完全能够满足要求.但由于控件本身对于接收缓冲区大小设置的限定,为高速数据采集软件的设计带来了麻烦.如果接收缓冲区不能满足设计的要求,当缓冲区内数据达到消息响应值并响应存储命令时,而新采集的数据传输速度大于已接收到数据的存储速度,就会造成接收缓冲区的溢出,直接导致系统的崩溃.这一点在程序设计初期深有体会.在程序设计时也尝试当缓冲区达到阈值响应消息时,在消息响应中启动一个新的线程,先将缓冲区中接收到的数据取出到新开辟的内存单元中,再进行数据存储.程序可以运行,但出现了新的问题,即有的数据帧中的数据发生丢失.分析产生这种数据丢失的原因,还是由于控件本身对于接收缓冲区大小设置的限定.4 程序设计创新4.1多线程程序设计思想在32位Windows系统中,术语多任务是指系统可以同时运行多个进程,而每个进程也可以同时执行多个线程.进程就是应用程序的运行实例.每个进程都有自己私有的虚拟地址空间,每个进程都有一个主线程,但可以建立另外的线程.进程中的线程是并行执行的,每个线程占用CPU的时间由系统来划分.可以把线程看作是操作系统分配CPU时间的基本实体,系统不停的在各个线程之间切换,它对线程的中断是汇编语言级的.系统为每一个线程分配一个CPU时间段,某个线程只有在分配的时间段内才有对CPU的控制权.进程中所有的线程共享进程的虚拟地址空间,这意味着所有线程都可以访问进程的全局变量和资源.这一方面为编程带来了方便,但另一方面也容易造成冲突.虽然在进程中进行费时的工作不会导致系统的挂起,但会导致进程本身的挂起.所以,如果进程即要进行长期工作,又要响应用户的输入,那么它可以启动一个线程来专门负责费时的工作,而主线程仍然可以与用户进行交互.由此可见,利用Win32的重叠I/O操作和多线程特性,可以编出高效的通信程序.高速串口数据采集软件的特点是接收数据的速度要求很高,接收数据量很大,而控制扫描仪发送的命令字数据量很小.根据这些特性,可以在程序中创建一个辅助工作者线程专门来监视串行口的输入.由于写串口的数据量不大,不会太费时,所以在主线程中完成写端口的任务是可以的,不必另外创建线程.4. 2多线程程序设计①数据采集程序流程根据多线程程序的开发思想,该数据采集软件由负责人机交互的多线程和对串口进行处理的后台辅助线程组成.主线程是数据采集程序的管理者,用来初始化串口(通过调用Win32 API函数),自定义通信事件消息,创建、删除辅助线程,进行人机交互的操作及协调好各线程的运行.程序流程如图2所示.图2 数据采集程序框图②后台辅助线程分析后台辅助线程是数据采集软件的核心,包括串口监视线程,读线程。
VC++6.0串口
打开VC++6.0,新建基于对话框的工程RS485Comm,在主对话框窗口IDD_RS485COMM_DIALOG上添加两个按钮,ID分别为IDC_SEND和IDC_RECEIVE,标题分别为“发送”和“接收”;添加一个静态文本框IDC_DISP,用于显示串口接收到的内容。
在RS485CommDlg.cpp文件中添加全局变量:HANDLE hCom; //全局变量,串口句柄在RS485CommDlg.cpp文件中的OnInitDialog()函数添加如下代码: // TODO: Add extra initialization herehCom=CreateFile("COM1",//COM1口GENERIC_READ|GENERIC_WRITE, //允许读和写0, //独占方式NULL,OPEN_EXISTING, //打开而不是创建0, //同步方式NULL);if(hCom==(HANDLE)-1){AfxMessageBox("打开COM失败!");return FALSE;}SetupComm(hCom,100,100); //输入缓冲区和输出缓冲区的大小都是1024COMMTIMEOUTS TimeOuts;//设定读超时TimeOuts.ReadIntervalTimeout=MAXDWORD;TimeOuts.ReadTotalTimeoutMultiplier=0;TimeOuts.ReadTotalTimeoutConstant=0;//在读一次输入缓冲区的内容后读操作就立即返回,//而不管是否读入了要求的字符。
//设定写超时TimeOuts.WriteTotalTimeoutMultiplier=100;TimeOuts.WriteTotalTimeoutConstant=500;SetCommTimeouts(hCom,&TimeOuts); //设置超时DCB dcb;GetCommState(hCom,&dcb);dcb.BaudRate=9600; //波特率为9600dcb.ByteSize=8; //每个字节有8位dcb.Parity=NOPARITY; //无奇偶校验位dcb.StopBits=TWOSTOPBITS; //两个停止位SetCommState(hCom,&dcb);PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);分别双击IDC_SEND按钮和IDC_RECEIVE按钮,添加两个按钮的响应函数: void CRS485CommDlg::OnSend(){// TODO: Add your control notification handler code here// 在此需要简单介绍百特公司XMA5000的通讯协议://该仪表RS485通讯采用主机广播方式通讯。
VC_6_0环境下GPS接收机串口通信的实现
文章编号:100723817(2002)0520023202中图分类号:P228.4 文献标识码:B V C++6.0环境下GPS接收机串口通信的实现李淑慧(武汉大学测绘学院,武汉市珞喻路129号,430079)摘 要 首先简单介绍了GPS接收机串口通信的基本概念,然后通过实例详细介绍了计算机与GPS接收机进行数据传输的两种方法:一种是使用W in32A P I通信函数的文件读写方式;另一种是通过V C++6.0提供的M SComm控件实现。
关键词 GPS;串口通信;W in32A P I函数;M SComm控件 开发GPS数据处理软件,首先要解决计算机和GPS接收机的串口通信。
在GPS接收机和计算机的数据传输过程中,计算机的串行端口作为CPU和串行设备间的编码转换器,提供了计算机与GPS接收机之间的数据传输通道。
作为数据终端设备,GPS接收机采用异步串行方式利用D型R S2 232C串行二进制数据交换电缆接口将采集到的数据通过串行端口传输给计算机[1]。
V isual C++封装了W indow s A P I函数,使得W indow s 应用程序的开发变得简单易学。
利用V C++6.0开发W indow s32位环境下计算机和GPS接收机的串口通信程序,可以直接利用W indow s A P I的通信函数,另外还可以利用V C提供的M SComm控件(即M icro soft Comm unicati on Contro l)。
1 W in32A P I串行通信的文件读写方式在W in32中,所有的设备都被看成是文件。
串口通信可以像访问普通文件那样通过A P I通信函数来实现,系统的虚拟驱动程序负责执行特定的工作[2]。
通过程序实例,可以具体实现GPS接收机的串口通信。
这个例子是按照事件驱动的方式进行读写的,同时利用了多线程,将串口的读写放在一个用户自定义的线程中完成。
在开始进行数据采集的时候打开这个有关串口通信的线程,然后串口的创建、设置、读写都在这个线程中进行。
vc++6.0基于MsComm控件的串口通讯方法
这是龚建伟老师提供的一个基于MSComm控件的串口调试程序,下面给出了在Visual C++环境下详细的制作过程。
附带的源代码是我根据这些步骤编写出来的,可以供大家参考哦!目录:1.建立项目2.在项目中插入MSComm控件3.利用ClassW i z ard定义CMSComm类控制变量4.在对话框中添加控件5.添加串口事件消息处理函数O nCo mm()6.打开和设置串口参数7.发送数据8.发送十六进制字符9.在接收框中以十六进制显示10.如何设置自动发送11.什么是VARIANT数据类型?如何使用VARIANT数据类型?1.建立项目:打开V C++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下A dd To Project子菜单中的Co mponents and Co ntro ls…选项,在弹出的对话框中双击Registered ActiveX Contro ls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。
选择Micro soft Communicatio ns Control, versio n 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。
(如果你在控件列表中看不到M icro soft Co mmunicatio ns Control, versio n 6.0,那可能是你在安装V C6时没有把A ct iveX一项选上,重新安装V C6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Contro ls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
VC6.0MFC串口通信编写全过程(推荐文档)
其于MFC 的串口调试助手编辑过程一、新建打开VC6.0 文件 新建 工程 MFC AppWiard(exe)位置(选择保存工程位置) 工程名称(输入工程名XXXX )确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a 、右击串口通信控件 建立类向导Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
基于VC6.0的多台MSP430单片机和PC机串口通讯实现方案
中 , 定 一 个 明确 而合 理 的通 讯 协 由于 单 片 机 多 应 用 于 实 时 性 较 强 的 确 议 是关 键 , 括 对 数 据格 式 、 讯 方 控 制 场 合 , 此 , 应 将 及 时 响 应 和 包 通 因 式、 传送 速 度 、 送 步 骤 、 纠 错 方 控 制对 象 的动 作 放 在 优 先 考 虑 的位 传 检
波特 率 为 9 0 , 部 时钟 为 A L 。 60外 C K
软侔 计
下位机 程序设计
主要 由数据发送和数据接 收子 程 序 组 成 设 计 单 片机 通 信 程序
系统通讯协议
在 P 机 和 多 台 单 片 机 的 通 讯 时 ,必 须 充 分 发 挥 单 片 机 的效 率 。 C
率 的整数倍, 这一组 合也能使 MS 4 0 P 机 发 送 单 片 机 接 收 的 时候 也 相 P 3 C 正常 工 作 而且 还可 以使 其 通 讯 协 议 似 的协 议 规 定 。
工作在最大 的波特 率 。 采用这 一技
术 ,即使用 手表晶振 ( 7 8 z, 3 6 H ) 波 2 特率也可 以达到 4 D 和 9 0 , 80 6 0 选择
维普资讯 http://www.cqvቤተ መጻሕፍቲ ባይዱ
Di &pi¨s设计应用 e n Apc n s g lr c。
基于V 6 的多台M 3 单片机和 C. 0 40 S P P C机串口 通讯实现方案
S r l ei a Com m u i a i e h d B t e C d M S 4 0 nc t onM t o e we n P an P 3
MS 4 0 19单 片机支 持 两种 不 P 3F6
代码 效率 。 数字控 制 的振 荡器 提供 快 同的 串行协议 , 通用 同步 协议 ( S T U AR 速从所有低 功耗模式 苏醒 到活动模式 协 议 ) 同 步 协 议 ( P 协议 ) 用 控 和 SI , 的能 力时 间少 于 6 。 P 3 F6 msMS 4 0 19带 制寄存器 U T 表 1 C L( )中的控 制位 有两个 1 定时器 ( 6位 带看 门狗功 能 ) S N 来 选 择所 需 的模 式 。Y C O 、 YC SN = :
基于VC6.0的多单片机和PC机串口通讯实现方案
基于VC6.0的多单片机和PC机串口通讯实现方案
引言
在计算机控制系统中,不可避免的要采用多机系统进行通信。
在由一台
PC 机(上位机) 和多台单片机(下位机) 构成的分布式控制系统中,通过PC 机的串口与多台单片机的通信是最方便的。
在这样的分布式控制系统中,单片机
与微机之间的多路通信是整个系统的关键。
系统组成及通讯原理
系统构成
由上位机(即计算机)、通讯接口和下位机3 部分组成。
上位机选用的是
工控机,智能终端由单片MSP430F169 和外围传感器放大电路等构成。
要想与PC 串口连接或者其它带有串口的终端连接,必须要进行EIA-RS-232C 与MSP430 电平和逻辑关系的转换。
本设计采用MAX3232 芯片,可完成
3V~5V 电平与串口电平的双向转换。
MSP430F169 单片机属于德州仪器公司MSP430F14X/16X FLASH 系列。
该系列是一组超低功耗的微控制器,工作电压范围1.8~3.6V。
由于具有16 位RISC 结构,16 位寄存器和常数寄存器,MSP430 达到了最大的代码效率。
数字控制的振荡器提供快速从所有低功耗模式苏醒到活动模式的能力时间少
于6ms。
MSP430F169 带有两个16 位定时器(带看门狗功能)、速度极快的8 通道12 位A/D 转换器(ADC)(带内部参考电压、采样保持和自动扫描功能)、一个内部比较器和两个通用同步/异步发射接收器、48 个I/O 口(均可独立控制)
的微处理器结构。
硬件乘法器提高了单片机的性能并使单片机在编码和硬件上
可兼容。
通讯原理。
基于VC_6_0的PC机和单片机串口通信
基于VC++6.0的PC机和单片机串口通信∗王英杰林怡青彭美春聂一彪广东工业大学机电工程学院 广东 广州,510090摘 要:本文使用VC++6.0提供的串行通信MSComm控件以及Windows API函数实现PC机和单片机之间的通信。
详细介绍了实现的方法,给出了应用实例。
关键词:串口通信;多线程;API函数;单片机Program for Serial Communication between PC and Single Chip Microprocessor based on Visual C++6.0WANG Yingjie LIN Yiqing NIE YibiaoGuangdong University of Technology Guangdong Guangzhou, 510090Abstract: This paper use a Serial Communication Control MSComm and Windows API function supplied by Visual C+ + 6.0 to realize serial communication between PC and single chip microprocessor. Introduce realization methods detailedly, provide application examples. Keywords: serial communication; multi-thread; API function; single chip microprocessor.1 引 言在现代工业控制中,串口通信的应用越来越广泛。
单片机和PC机之间的串口通信在进行数据交换时经常被使用。
在串行通信时,要求通信双方都采用一个标准接口,RS-232C 接口是单片机和PC机进行通信最常用的一种接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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控件实现串口数据通讯,用户不必了解具体的硬件原理,简化了编程,使程序透明化,适应性好,可移植性高。
经实践证明,在各种环境下运行情况良好。
在此基础上稍加改动,即可实现在不同通讯协议和不同通讯设备(如单片机、计算机等设备)之间的串口通讯。
由于这种技术具备简单,易操作,可靠性高等优点,未来将越来越多的被采用。