手把手教你用VC6.0写串口与单片机通讯程序

合集下载

利用VC++6.0实现上位机与PLC的串行通信(1)

利用VC++6.0实现上位机与PLC的串行通信(1)

利用VC++6.0实现上位机与PLC的串行通信作者:惠鸿忠, Hui Hongzhong作者单位:聊城大学刊名:微计算机信息英文刊名:CONTROL & AUTOMATION年,卷(期):2006,22(16)被引用次数:12次参考文献(4条)1.郭飒基于OPENGL的灯光控制系统的实现[期刊论文]-微计算机信息 2004(05)2.苗长新注浆泄漏监测程序的设计及其串行通信实现[期刊论文]-微计算机信息 2003(06)3.李现勇Visual C++串口通信技术与工程实践 20024.SIMATIC S7-200可变程序控制器系统手册引证文献(12条)1.吴镇平基于PLC的桥式组合大切机监控系统设计[期刊论文]-闽西职业技术学院学报 2010(1)2.徐洋.王宏华.周强.李俊星基于MSP430单片机的无刷直流电机实验测试平台设计[期刊论文]-机械制造与自动化2010(4)3.杨英琴.侯力.郑熙.王裕林.陈丹PLC控制系统在厚壁钢管超声波探伤中的应用[期刊论文]-机械设计与制造2010(12)4.吴镇平.林海涨.李捷辉利用VC++6.0实现PLC实时监控[期刊论文]-装备制造技术 2009(7)5.王少江.侯力.薄立朗.匡红PLC和变频器在超声波自动探伤系统的应用[期刊论文]-煤矿机械 2009(4)6.唐捷.蔡智圣.李争名.赵士滨基于PC机并口通信的多媒体设备控制系统的设计与实现[期刊论文]-光盘技术2009(2)7.李波.舒朝君.江彦.余磊.刘永喜.胡玉庆.皮智敏基于VC的PLC数据采集管理系统[期刊论文]-现代电子技术2009(6)8.董奎勇.钱炜.王明军.熊磊基于VC++的月球车的数据采集处理系统[期刊论文]-微计算机信息 2008(28)9.黄良希.LI Ding-zhu用于机动车路考系统的车载通讯系统研究[期刊论文]-微计算机信息 2008(23)10.汤光华.吴青自由口模式下S7200 PLC与上位机的通信[期刊论文]-微计算机信息 2008(13)11.李志伟基于AT指令的串行通信程序的设计[期刊论文]-微计算机信息 2007(9)12.安宪军.黄尔烈.贾少锐.张常全基于Delphi7.0的上位机与PLC的通信[期刊论文]-微计算机信息 2007(7)本文链接:/Periodical_wjsjxx200616021.aspx。

基于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

串口调试助手VC60程序

串口调试助手VC60程序

串口调试助手VC60程序目次:1.建立项目那可能是你在安装VC6时没有把Active某一项选上,重新安装VC6,选上Active某就可以了),//{{AF某_INCLUDES()#include\(这时运行程序,如果有错,那就再从头开始)。

4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_R某DATA,另一个用于输入发送数据,ID为IDC_EDIT_T某DATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。

别忘记了将接收编辑框的Propertie->Style中把Miltiline和VerticalScroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。

休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。

好了,再接着来,下面是关键了:{//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArrayafearray_inp;LONGlen,k;BYTEr某data[2048];//设置BYTE数组An8-bitintegerthatinotigned.CStringtrtemp;afearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray 型变量len=afearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;kafearray_inp.GetElement(&k,r某data+k);//转换为BYTE型数组for(k=0;kBYTEbt=某(char某)(r某data+k);//字符型trtemp.Format(\将字符送入临时变量trtemp存放m_trR某Data+=trtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。

用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机与单片机之间的串行通信

基于VC++6.0的PC机与单片机之间的串行通信
许宜申;朱欣华
【期刊名称】《现代电子技术》
【年(卷),期】2003(000)005
【摘要】介绍了在Windows系列(Windows 98/2000/XP)环境下,如何利用
VC++6.0的通信控件MSComm来实现PC机与单片机之间的串行通信.硬件电路中,采用MAX232AESE芯片解决了PC机与单片机之间通信连接电平的不一致问题;软件部分,分别利用VC6++6.0和汇编语言,给出了他们之间的通信程序.
【总页数】3页(P6-7,11)
【作者】许宜申;朱欣华
【作者单位】苏州大学,物理学院,江苏,苏州,215006;东南大学,仪器科学与工程系,江苏,南京,210096
【正文语种】中文
【中图分类】TN919.6+5
【相关文献】
1.基于VC++6.0的PC机与多台单片机的串行通信 [J], 宋向荣;韩克敏;陈梦华
2.基于VC++6.0和C51的PC机与单片机串行通信仿真 [J], 徐兴元;沈宪章;瓮嘉民
3.基于的PC机和MCS-51单片机之间的串行通信 [J], 何文才;杜鹏;刘培鹤;牛晓蕾;张媛媛
4.在VC++6.0中用内嵌汇编语言实现PC机与单片机的串行通信 [J], 吴来杰;文
清华;江进国;舒晓勇
5.基于VC++
6.0利用WinAPI函数实现PC机与PIC单片机的串行通信 [J], 朱圣烽
因版权原因,仅展示原文概要,查看原文内容请购买。

用VC++6.0实现PC与单片机之间串口数据交换

用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串口

打开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中使用mscomm串口控件

图解VC++6.0中使用mscomm串口控件

m_ComPort.SetInputMode(1);//以二进制方式读写数据 m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于 1 个字符时,将引发接收数据的 OnCommMscomm 事件 m_ComPort.SetSettings("9600,n,8,1"); //设置波特率等参数 if(!m_ComPort.GetPortOpen()) //打开串口
safearray_inp.GetElement(&k,rxdata+k); //转换为 BYTE 型数组 BYT E bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量 strtemp 存放 m_receive+=strtemp; } break; default: // 传输事件出错 m_ComPort.SetOutBufferCount(0); break;
在 sportDlg.cpp 中增加: BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )
ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) //映射 //ActiveX 控件事件
END_EVENTSINK_ M AP()
// TODO: Add your control notification handler code here UpdateData(TRUE); int len; CByteArray array; len=m_send.GetLength(); array.RemoveAll(); array.SetSize(len); for(int i=0;i<len;i++)

基于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事件发生之前,接收缓冲区或发送缓冲区中可以接收的字符数。

VC++6.0实现串口

VC++6.0实现串口
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(3)设置初始化函数OnInitDialog(),添加代码实现对话框串口通信的初始化工作,如下:
BOOLCPc_pcDlg::OnInitDialog()
{…//VC自动生成的代码
// TODO: Add extra initialization here
IsStop = False;
}
else
{
res = WaitForSingleObject(rOverLaped.hEvent,5000);
}
IsStop = False;
m_strReceive+=DataBuffer;
(1)掌握PC与PC串口通信的线路连接方法。
(2)利用VisualC++ API函数和MSComm控件实现PC与PC串口通信的程序设计方法。
6.1.2 PC
本设计用到的硬件和软件清单见表6-1。
表6-1设计用软、硬件
序号
名称
数量
1
PC或IPC
1
2
串口通信线(三线制)
1
3
Visual C++6.0
1
(2)按照弹出的应用向导对话框依次填写,第1步选择基于对话框,其他均采用默认。
(3)单击“完成”,将会弹出一个关于新工程信息的对话框。单击“确定”按钮。这样MFC向导便自动生成了一个名称为pc_pc_api的工程。
2
(1)应用程序中添加了一个对话框资源IDD_PC_PC_API_DIALOG,打开属性对话框,将对话框标题改为“PC与PC串口通信API”。

基于VC++6.0的PC机和单片机串口通信

基于VC++6.0的PC机和单片机串口通信

基于VC++6.0的PC机和单片机串口通信UJ{li『J用技术零零六总第六十七期基于VC++6.0的PC机和单片机串口通信王英杰林怡青彭美春聂~彪广东l业大学机电工程学院广东广I,510090摘要:本文使用VC++6.0提供的串行通信MSComm控件以及WindowsAPI函数实现Pc机和单片机之间的通信详细介绍了实现的方法,给出了应用实例关键词:串口通信:多线程;API函数;单片机ProgramforSerialCommunicationbetweenPCandSingleChipMicr0pr0cess0rbasedonVisualC++6.0 WANGYingjieLINYiqingNIEYibiao GuangdongUniversityofTechnologyGuangdongGuangzhou,510090 Abstract:ThispaperuseaSerialCommunicationControlMSCommandWin dowsAPIfunctionsuppliedbyVisualC++6.0torealizeserialcommunicationbetween PCandsinglechipmicroprocessor.Introducerealizationmethodsdetailedly,provideappli cationexamples.Keywords:serialcommunication;multi-thread;APIfunction;singlechipmi croprocessor.1引言在现代_l业控制中,串口通信的应用越来越广泛.单片机和PC机之间的串口通信在进行数据交换时经常被使用.在串行通信时,要求通信双方都采用一个标准接口,RS.232C接口是单片机利PC机进行通信最常用的一种接口.单片机与PC机进行串口通信最简单的二线制法,即接收数据针脚(RxD)与发送数据针脚(TxD)相连,彼此交叉,信号地(GND)对应相接.但是,串口还不能直接和单片机相连,可以选用MAX232和MAX485进行电平转换.MAX232用于RS.232C标准;MAX485用于RS485标准.RS.232C标准规定在码元畸变小于4%的情况下,传输电缆长度最大约为l5米,最高传输速率为20kbit/s.RS485标准最人传输距离约为1219米,最大传输速率约为l0Mbit/sIlj.为了实现单片机和PC机之间的串口通信,采川VC6.O++来实现编程,VC6.O++是一种功能强大的面向对象的Windows编程开发平台.与以往DOS下串行通信不同,Windows不提倡应用程序直接控制硬件,而是通过Windows系统提供的设备驱动程序来进行数据传递.串口在Win32中是作为文件来处理的,而不是直接对端口进行操作.本文采用MSComm…基金资助:广州市科技计划项目资助课题(项目编号:No.2002Jl—℃o3O1)作者简介::_F英杰(1979一),男,河南驻马店人,硕士究生,究方向主要为汽车电子控制.36U脑用技术二零零六总第六十七期控件,WindowsAP!函数米实现PC机与单片机之间的通信.2使用VC什提供的MSComm控件实现串行通信MicrosoftCommunicationControl(简称MSComm)是Microsoft公司提供的简化Windows下的串行通信编程的ActiveX控件,为应用程序提供了串口接收发送数据的简便方法.MSComm控件通过串行端口传输和接收数据为应用程序提供串行通信功能.MSComm提供了两种处理通信问题的方法:一是事件驱动法,主要是利用OnComm事件捕获并处理这些通信时间,也可以检查和处理通信错误:二是查询法,在这种情况下,每当应用程序执行完一个串口操作后,将查看MSComm控件的CommEvent属性以确定执行结果或者检查某一事件是否发生.2.1,在VC集成开发环境中用MSComm控件进行串口编程的基本步骤:(1)在建立的Workspace中插入MSComm控件:(2)添加MSComm控件的ID的控制变量;(3)对串口进行初始化,设置MSComm控什的属性;(4)添加串口事件的消息处理函数OnComm()l~,在函数中编写数据处理代码;(5)编写串口发送等其它代码;(6)关闭串口.2.2应用举例(1)初始化串口,在OnlnitDialogO函数中添加.mcom.SetCommport(1);//选择COM1m—corn.SetlnBufferSize(1024);//设置输入缓冲区的大小mcorn.SetOutBufferSize(512);//殴置输出缓冲区的大小if(!m—corn.GetPortOpenO)mcom.SetPortopen(TRUE);//打开串口mcom.SetlnPutModel(1);//设置输入方式为二进制方式m—com.SetSettings(“9600,n,8,1”);//设置波特率9600,无校验,8个数据位,1个停I上位m—corn.SetRThreshold(1);每一个字符到接收缓冲触发接收数据的OnComm事件mcorn.SetInputLen(O)://设置当前接收数据长度为0I11corn.GetlnputO;//预读缓冲区以消除残留数据(2)向单片机发送数据UpData(TRuE);UpData(FALSE);charData[21;Data[0]=0x32;Data【1】=OxFF;CByteArrayarray;array.RemoveAll0;array.SetSize(2);for(intI-O;i&lt;2;i ++)array.SetAt(i,Data[i]);m—com.SetOutput(COleV ariant(array));(3)接收单片机发米的数据,径OnComm事件中添加.V ARIANTvarianttrap;COleSafeArraysafearraytmp;LONGlen.k:BYTE rxdata[20];//没置BYTE数组CStringstrtemp;varianttmp=mCorn.GetlnputO;//渎缓冲区safearray_tmp=varianttrap;//VARIANT型变姑转换为ColeSafeArray 型变量len=safearraytmp.Get0neDimsize();//得到有效数据度for(k0;k&lt;len;k++)safearray—trap.GetElement(&amp;k,rxdata+k);//转换为BYTE型数组for(k=0;k&lt;len;k++)//将数组转换为Cstring型变{BYTEbt=(char)(rxdata+k);//字符型strtemp.Format(“%c”,bt);//将字符送入临时变量strtemp存放mReceive+=strtemp;//D,入接收编辑框对应字符串37U甘讧i用技术二零零六总第六l七期ch=bt:)3用WindowsAPI函数实现串口通信住Windows环境.VC++6.0提供了完备的AP!戍川程序函数,通过这些函数与通信便件接口.通信函数是中断驱动的:发送数据时,先将其放入缓冲区,串口准备好后,就将其发送出去;传来的数据迅速申请中断,使Windows接收它并将其存入缓冲区,以供读取.发送过程较易实现,接收处理方式主要有查询和中断两种方式.采用查询方式时,CPU要不断的测试串口是否有数据以防止接收串口数据出现遗漏;而采用中断方式则无需测试串口,一曰.有数据传至.CPU中当前任务,由中断服务程序完成操作.3.1应用Win32API函数进行串口程的一般编程步骤(1)打开串口:CreateFile函数;(2)建立通信事件:CreateEvent函数;(3)初始化串口.设置串口参数:SetCommState函数;(4)建立读数据的线程:(5)写数据:WriteFile函数:(6)结束时关闭端口:若程序中打开了其它线程,则先终止线程.停止WaitCommEvent函数的等待以及关闭端口CloseHandle函数.3.2应用举例主要介绍一下在API串口通信中如何结合异步通信,多线程等手段,编写出高质量的通信程序.下面为上位机通信程序部分代码.(1)取得通讯端口的资源HANDLEhCom;hCom=CreateFile(“COM2”,//文件名GENERICREADIGENERICWRITE,//允许读写O,//独占方式NULL.OPENEXlsTlNG.//打开而不是创建FILEFLAGOvERLAPPED.//异步方式NULL);ASSERT(hCom!=INV ALID检测打开串口操作是否成功. HANDLEVALUE);//SetCommMask(hCom,EV—RXCHARlEVTXEMPTY);//设置事件驱动的类型SetupComm(hCom,1024,512);//设置输入,输出缓冲区的大小PurgeComm(hCom,PURGETXABORTlPURGE_R_XABORTlPURGE _TXCLEARlPURGERXCLEAR);//消干净输入,输出缓冲区COMMTIMEOUTSCommTimeOuts://定义超时结构,并填写该结构setCommTimeouts(hCom,&amp;CommTimeOuts);//设置读写操作所允许的超时(2)通讯参数的设定DCBdeb;//定义DCB结构If(!Getcommstate(hCom,&amp;dcb))//取得串El配置并填充~UDCB 结构ReturnFALSE;38腑心用技术_二零零六总第六十七期dcb.BaudRate=96o0://设置波特率为9600dcb.ByteSize=8;//设置每字节位数为8位dcb.ParityNOPARITYdcb.StopBits;ONESTOPBIT;//设置一个停止位dcb.tBinary=TRUE:dcb.tParityFALSE:SetCommState(hCom,&amp;dcb);//重新配置串口,使配置有效(3)启动一个辅助线程,用于串口事件的处理.Windows提供了两种线程.辅助线程和用户界面线.区别在于:辅助线程没有窗口,所以它没有白己的消息循环.但是辅助线程很容易编程,通常也很有刚.在此,我们使用辅助线程.主要用它米监视串口状态,看有无数据到达,通信有无错误;而主线程则可专心进行数据处理,提供友好的用户界面等重要的工作. hCommWatchThread=CreateThread((LPSECURITY—丌RIBUTES)NULL,//安全属性0,//初始化线程栈的大小,缺省为与主线程大小相同(LPFHREADSTARTROUTINE)CommWatchProc,//线程的全局函数GetSafeHwnd0,//此处传入了主框架的旬柄0,&amp;dwThreadtD);ASSERT(hCommWatchThread!=NULL);(4)数据处理为辅助线程弓一个全局函数,主要完成数据接收的_』二作. UINTCommWatchProc(HWNDhSendWnd){DWORDdwEvtMask=0;SetCommMask(hCom.EVRXCHARIEVTXEMPTY)://有哪些串口事件需要监视?WaitCommEvent(hCom,&amp;dwEvtMask,OS);//等待串口通信事件的发生,检测返回的dwEvtMask,知道发生了什么串口事件:if((dwEvtMask&amp;EV—RXCHAR)=EVRXCHAR)f//缓冲区中有数据到达COMSTA TComStat:DWORDdwLength;ClearCommError(hCom,&amp;dwErrorFlags,&amp;ComStat); dwLength=ComStat.cblnQue://输入缓冲区有多少数据?if(dwLength&gt;O){BOOLtReadStat;fReadStat=ReadFile(hCom,IpBuffer,dwLength,&amp;dwBytesRead;&amp;READOS(npTTYInfo));//读数据if(!fReadStat){if(GetLastError0=ERROR—IO—PENDING){while(!GetOVerlappedResuIt(hCom,&amp;READ_OS(npTTYlnfo),&amp;dwBytesRead,TRUE)){dwError=GetLastError();if(dwError==ERROR—IO—INCOMPLETE)continue;39I肭用技术零零六总笫六_卜七期//缓冲数据没有读完,继续::PostMessage((HWND)hSendWnd,WM_NOTIFYPROCESS,0,O);//通知主线程,串口收到数据}?(5)在主线程中发送F行命令BOOLfWriteStat;charszBuffer[count];…………//准备好发送的数据,放在szBuffer[]q~fWriteStat=WriteFile(hCom,szBuffer,dwBytesToWrite,&amp;dwBytesWritten,&amp;WRITE_OS(npTTYlnfo));//写数据interr=GetLastError0;if(1fWriteStat)(if(GetLastError0==ERROR—IO—PENDING){while(!GetOverlappedResult(hCom,&amp;WRITEOS(npTTYlnfo),&amp;dwB~esWriRen,TRUE)){dwErrorGetLastError0;iffdwE~om=ERROR_IO—INCOMPLETE){dwBytesSent+=dwBytesWritten;continue;)本文使用了多线程技术,在辅助线程中监视串口,有数据到达时依靠事件驱动,读入数据并向土线程报告:并且,WaitCommEvent0,ReadFile(),WriteFile()都使用了异步通信技术,依靠重叠(overlapped)读写操作,让串口读写操作在后台运行. 4单片机通信程序设计下位机采用MCS.5l系列的805l单机.下位机的串行通信程序设计可以采用查询法或中断法来进行数据的收发.无论采用什么方法,其串行数据的发送只要简单地从累加器向串口缓冲寄存器传送数据即可(使用MOVSBUF,A指令);其串行数据的接收只要从串口缓冲寄存器向累加器传送数据即可(使用M0V A,SBUF~‟令).实际应用中,单片机通信程序一般采用中断方式与PC机进行通信,PC机作为主控方.当单片机收~-UPC机发送来的地址信号时,便转入相应的中断服务子程序,$1JPC机进行通信.其接收中断服务予程序流程如图所示,该中断服务子程序也适用于多机通信的系统..发送中断服务子程序同理,不再赘述.5结束语本文主要介耋f{TPC机与单片机之间的串行通信技术.重点介绍了怎样使用MSComm控件平IIWin32API函数实现串行通信.MSComm~较简单只用于较简单的系统,Win32API函数应用较广但比较复杂繁琐,但使用灵活,功能也强大很多.参考文献[1]曾自强,lj.用VC++实现单片机与PC机串口通信的三种方法[J]自动化与仪器仪表,2005年第3期,[2]龚建伟.VisualC++/Turboc串LI通信编程实践[M]北京:电了T.业版社.2004.[3]lffI贵波,乔爽.PC机与单)-t~Lm行通信的实现方法探讨[J],交通科技与经济,2005年第3期.。

VC6.0MFC串口通信编写全过程(推荐文档)

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串口编程例程

VC6.0串口编程例程

引言在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。

我们可以通过设备管理器来查看COM的硬件参数设置,如图1。

图1 在Windows上查看PC串口设置迄今为止,几乎每一台PC都包含COM。

本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。

作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。

不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。

尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。

RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。

本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。

在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见):作者email:21cnbao@(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述);硬件原理众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。

这样的设备通常有如图2所示的管脚分布,当其向外传输数据时,CPU并行的将数据写入这类芯片的寄存器,UART再将寄存器中的数据一位一位地移动并向外传输;当外界向其传输数据时,UART一位一位地接收数据,并将其移位组合为并行数据,CPU再并行地读取这些数据。

基于VC++6.0的串口通信的设计

基于VC++6.0的串口通信的设计

基于VC++6.0的串口通信的设计
王娇;姚竹亭
【期刊名称】《电子测试》
【年(卷),期】2009(000)011
【摘要】本文主要介绍了如何利用VC++6.0 MSComm控件来实现PC与基于LPC2210的嵌入式系统之间的串口通信.以MFC来设计界面编制程序,同时用MSComm控件通过串口发送和接收数据,实现上下机位的串口通信.首先给出了系统的硬件组成与搭建,及系统的通信原理,接着分别实现上下机位的软件设计,最后通过具体实例由下机位向PC的串口输入一个字符串,并在ADS1.2的开发环境中,启动AXD进行仿真调试,得到系统的测试结果.结果表明完全可以实现上下机位的通信联系,证明了该系统的可靠性和稳定性.
【总页数】4页(P47-50)
【作者】王娇;姚竹亭
【作者单位】中北大学机械工程与自动化学院,山西太原,030051;中北大学机械工程与自动化学院,山西太原,030051
【正文语种】中文
【中图分类】TP391
【相关文献】
1.基于VC++6.0的数据可视化串口通信 [J], 叶艳艳;樊峰;陈西曲
2.基于VC++6.0的RS-422串口通信设计 [J], 丁云霞;曾连荪
3.基于VC++6.0的串口通信程序开发 [J], 白宁;金华晋
4.基于VC++6.0的串口通信协议监测方法 [J], 曹佃生
5.基于VC++
6.0的PC机与PLC串口通信的实现及其应用 [J], 李子彬;赵志诚;张井岗
因版权原因,仅展示原文概要,查看原文内容请购买。

用Visual C++6.0实现计算机与单片机串行通信的两种方法的研究

用Visual C++6.0实现计算机与单片机串行通信的两种方法的研究

用Visual C++6.0实现计算机与单片机串行通信的两种方法
的研究
王庆利;鞠大亮
【期刊名称】《电气自动化》
【年(卷),期】2005(27)6
【摘要】本文探讨了在Visual C++6.0环境下分别利用MSComm控件和CAN 通讯卡实现计算机与单片机串行通信的两种方法,并作了比较,也给出了例程,显示了各自的优点和适用场合,具有一定的实用意义.
【总页数】3页(P38-39,45)
【作者】王庆利;鞠大亮
【作者单位】天津大学自动化学院,天津,300072;天津大学自动化学院,天
津,300072
【正文语种】中文
【中图分类】TP311
【相关文献】
1.使用VisualBasic实现PC与89C51单片机之间的串行通信 [J], 张润华
2.利用Visual C++6.0编制串行通信程序的实现 [J], 胡赤兵;桑瑞鹏
3.基于Visual C++6.0下的一种微机与单片机的通信实现 [J], 樊宇;程全
4.利用Visual C++6.0的MSComm控件实现计算机与变频器的串行通讯 [J], 杨

5.多媒体计算机控制接口在Visual C++
6.0中的实现 [J], 陈光
因版权原因,仅展示原文概要,查看原文内容请购买。

用VC++6.0编写串行通信程序

用VC++6.0编写串行通信程序

用VC++6.0编写串行通信程序
袁志勇;苏光奎
【期刊名称】《智能计算机与应用》
【年(卷),期】2000(000)006
【摘要】在Visual C++6.0开发平台下,介绍运用Win32 API通信函数实现PC机串行通信的技术、编程方法.
【总页数】2页(P26-27)
【作者】袁志勇;苏光奎
【作者单位】武汉测绘科技大学信息工程学院,430079;武汉测绘科技大学信息工程学院,430079
【正文语种】中文
【中图分类】TP31
【相关文献】
1.利用VC++编写Windows95平台下的串行通信程序 [J], 杜恩祥;左宪章
2.基于VC++6.0的串口通信程序开发 [J], 白宁;金华晋
3.如何用Visual C++编写32位串行通信程序 [J], 姜丽
4.用VC++6.0开发Windows XP环境下串行通信程序的方法 [J], 庞训安;王锋;邓先明
5.用C++Builder编写基于线程的串行通信程序 [J], 姜滨
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档