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