单片机与RS-232的串口通信+VB程序
基于VB的单片机和PC机串口通信设计
总成绩个性化教育系列工程设计报告设计题目基于VB的单片机与PC串口通信设计学院电气信息学院专业班级自动化081班学生姓名陈凯学生学号*********说明1.个性化教育周结束后,每个学生都必须认真撰写《工程设计报告》。
通过撰写工程设计报告,系统地回顾和总结工程设计的全过程,将实践性教学的感性认识升华到一定的理论高度,从而提高个性化教育教学效果。
2.工程设计报告应包括:设计题目、设计说明书及总结、参考文献、附件等几部分。
设计说明书及总结是报告的主体,该部分至少应包括:软、硬件设计;性能指标;调试说明;工程设计的收获与体会等几部分。
3.工程设计报告要求条理清晰,内容详尽,数据准确。
字数不少于5000字。
4.工程设计报告的撰写是工程设计的重要组成部分,它是成绩评定的主要依据之一。
学生在工程设计完成后需按指导教师要求提交合格的工程设计报告。
不交工程设计报告者不得参加成绩评定。
5.工程设计报告至少应分:设计期间的工作表现和工程设计报告质量两部分,指导教师应分别按百分制评定成绩。
各设计平台可根据需要添加其它评价内容。
6.工程设计各环节所占比例由各设计平台指导小组自行确定。
7.学生成绩评定表中的总成绩应为各环节分数与所占比例乘积的算术和。
8.封面成绩为五级分制成绩,量化标准按学校有关文件执行。
9.工程设计报告可打印也可下载格式后手写,工程设计报告完成后应按封面,说明,工程设计报告内容的顺序进行装订成册。
10.个性化教育周完成后将工程设计报告交学院教学办公室保存。
学生成绩评定表基于VB的单片机和PC机串口通信设计一、设计目的:1.熟悉并掌握串口标准及通信原理。
2.掌握51单片机的串口编程。
3.熟悉上位机软件VB6.0的编程环境,能够应用其进行程序的编写和调试,掌握MSCOMM组件的设置方法。
二、设计要求:1.对四路模拟量进行AD采集,并将转换结果送1602液晶进行实时显示。
2.将采集结果通过串口发送给PC机,在上位机软件上进行数据的监控显示。
使用VB中的MSComm控件实现RS-232串口通信
使用VB中的MSComm控件实现RS-232串口通信实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根DTE到DTE 的无调制解调器连接线(接法见本章有关习题的参考答案),在实验前检查计算机的两个串口是否能够正常工作。
实验环境:Windows 95/98操作系统,Microsoft VB 5.0以上程序设计环境。
对例题中涉及调制解调器的内容,采用计算机与调制解调器连接的方式;对在例题中设计数据传输的内容,须事先将DTE 到DTE的无调制解调器连接线的两端,分别插入Com1和Com2串口。
实验说明:VB中的MSComm控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。
MSComm控件提供下列两种处理通讯的方式:(1)事件驱动(实时)方式,这是处理串行端口交互作用的一种非常有效的方法。
在许多情况下,在事件发生时需要得到通知,例如,在Carrier Detect(CD)或RequestToSend(RTS)线上一个字符到达或一个变化发生时。
在这些清况下,可以利用MSComm控件的OnComm事件捕获并处理这些通讯事件。
OnComm事件还可以检查和处理通讯错误。
(2)轮询方式,在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。
如果应用程序较小,并且是自保持的,这种方法可能是更可取的。
例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“OK”响应。
每个使用的MSComm控件都对应着一个串行端口。
如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。
可以在Windows“控制面板”中改变端口地址和中断地址。
下面这个简单的例子采用了轮询方法演示了用调制解调器进行基本的串行通讯:Private Sub Form_Load()Dim Instring As String '保存输入子串的缓冲区mPort=3 '使用COM3。
VB基础与RS-232C通信技术第1章 概述
4. 工程窗口 用于浏览工程中所包含的窗体和模块、查看代码、查 看对象。
a)单个工程
b)工程组
5. 属性窗口 属性窗口位于工程 窗口下方,用来显示 和设置被选定对象的 属性值。
6. 窗体布局窗口 窗体布局窗口中绘制了一个计算机显示器,并在上面 形象地显示了运行时窗体在显示器上的位置。
7. 窗体布局窗口 即对象窗口,就是工作台,在它上面可以使用窗体和工 具箱中提供的控件构造应用程序的界面。
1.3.1 VB 的安装
确认硬件配置和 软件环境满足 VB6.0 的安装与 使用条件
1.3.2 VB 的启动
常用的工
程类型为 标准EXE 类型
1.4 VB集成开发环境
1. 菜单栏 通过菜单栏可以实现VB的所有功能。 2. 工具栏 提供VB6.0中常用菜单命令的快速访问,只需要单击工 具栏上的按钮即可执行相应的菜单命令。 3. 工具箱窗口 相当于一个零件箱,里面包含的是用来构造应用程序界 面的部件——“控件”。
3. 企业版为专业编程人员开发程序提供了功能强大的 组内分布式应用程序。它包括专业版的所有特效, 加上BackOffice工具。
1.2 VB语言的特点
1. 可视化编程 2. 面向对象的程序设计 3. 结构化程序设计语言 4. 事件驱动编程机制 5. 数据库访问及强大开放的特点
1.3 VB的安装与启动
7. 类: 用来创建对象的样板,包含所创建对象的状态描 述和方法定义,对象是类的一个实例,如球和排球的关系。
8. 窗体:是创建应用程序界面的基础,相当于一块画布, 应用程序界面会全部在此画出,是运行应用程序时,与用 户交互操作的实际窗口。
9. 控件:组成用户界面的基本构件,如标签、命令按钮 等。每个控件按钮可以看作是一个类,单击按钮在窗体上 画下,即为由相应的类创建的对象。
VB串口通信程序代码
vb中怎样用mscomm控件实现串口通信本问分两部分均来自第一部分jessezappy(晶晶)================================================================================== If MSComm1.PortOpen Then MSComm1.PortOpen = FalsemPort = 1 '假定是用COM1口' 设定传输速率等,可依照您的需求更改MSComm1.Settings = "9600,N,8,1"MSComm1.PortOpen = True'---------初始化Modem-------------MSComm1.Output = "ATZ"MSComm1.Output = "AT&F"MSComm1.Output = "ATE0"MSComm1.Output = "ATM1"MSComm1.Output = "ATQ0"MSComm1.Output = "ATV0"'--------------------------拨号-------------MSComm1.Output ="ATDT163" '拨163'---------------------------接通后MSComm1.Output ="SDFJDKSJLKFA" '发送字符串'---------------------Private Sub MSComm1_OnComm() '用串口事件捕捉数据..If MSComm1.InBufferCount Then' 通讯埠中假如有资料的话, 则读取进来InStringB = InStringB & MSComm1.Input' 如果资料中有Chr(13) 和Chr(10) 的话, 则显示出来If InStr(InStringB, vbCrLf) Theninstring = instring & InStringBAddText Text3, InStringB, FalseInStringB = ""End IfEnd IfEND SUB'-------------------------挂断--------MSComm1.PortOpen = False '这个挂断方法不能适用所有MODEM,我正在研究...通用办法================================================================================================第二部分:===========================================================================最后借你一篇文章看,作者不是我,里面的不一定都对..'-----------------------------------------------------------VB Mscomm控件应用江苏戚墅堰机车车辆厂设计处(213011) 李秉璋--------------------------------------------------------------------------------Visual Basic 6.0(以下简称VB) 是一种功能强大、简单易学的程序设计语言。
RS232串口通信技术在Visual Basic中的应用及注意问题
绘制出来。
保存所有数据,将其另存为.DXF格式数据。
3DXF数据到GIS数据的转换3.1CAD与GIS数据结构比较CAD与GIS的图形格式存在较大的差异,对它的标准没有统一的支持,这就造成数据共享具有极大的不便性。
CAD主要由线宽、颜色、线型、符号等静态图形集合了多个图层,它的图层与GIS中严密组织的图层存在较大分别,GIS的单一文件中将各种实体和元素都包含在了里面,利用各种图层和标注来描述属性数据,SuperMap中数据根据类型进行分层存储管理。
3.2转换方法SuperMap中有三种导入CAD数据的方式,也就是将CAD类型数据分别导入成复合数据集、简单数据集以及CAD数据中指定的图层。
在进行转换时,需要将绘制的DWG格式图件转化为DXF。
不管是图形的数据转换或是属性数据的转换,在转换中不管多少都会产生一些问题,如数据冗余、要素丢失、要素变形等,所以需要对SuperMap进行适当的改造。
3.3CAD中数据优化处理在CAD中进行数据的优化处理,主要包括地物编辑,如多边形经过CAD的优化处理后看不出缺口就行了,但在SuperMap中就要求多边形严格闭合。
另外还有转换要素的选择及重新分层,在CAD 中是通过各种符号和颜色来表示地物,形成不同的图层,有些对GIS有用,而有些需要筛选。
3.4GIS中数据优化处理SuperMap图形处理能力相比于CAD较弱,在进行转换时需要在CAD中进行处理后在转入,当转入SuperMap数据时,为了让图形更加美观和完善,可继续进行处理。
如将同类相邻的地物转入到CAD时,可以对其进行并等运算、逻辑运算等,使它形成一个整体。
4总结在地理信息系统中,数据是它的核心,注重对数据的处理才能得到准确完整的地理图。
为了满足用户的需求,要不断对地理信息系统进行深入的研究,为用户提供精确地、实时的地理数据。
参考文献:[1]陈浩.基于GIS的多尺度生态地理物种入侵预测建模[D].武汉大学,2010.[2]王富强.空间知识地图构建理论和方法研究[D].解放军信息工程大学,2013.[3]李三玉.GIS图形数据更新解决方案[J].现代计算机,2005,10: 109-111.摘要:本文介绍了RS232通信的基本概念以及常用通信技术。
LabWindowscvi之RS-232串口通信编程源代码
LabWindows/cvi之RS-232串口通信编程源代码/* LabWindows/CVI User Interface Resource (UIR) Include File *//* Copyright (c) National Instruments 2006. All Rights Reserved. *//* *//* W ARNING: Do not add to, delete from, or otherwise modify the contents *//* of this include file. *//**************************************************************************/#include <userint.h>#ifdef __cplusplusextern "C" {#endif/* Panels and Controls: */#define PANEL 1#define PANEL_OKBUTTON_2 2 /* callback function: receivefile */#define PANEL_OKBUTTON 3 /* callback function: receivefilename */#define PANEL_STRING_2 4#define PANEL_QUITBUTTON 5 /* callback function: QuitCallback */#define PANEL_STRING 6#define PANEL_DECORATION_2 7#define PANEL_COMMANDBUTTON 8 /* callback function: filesel */#define PANEL_DECORATION 9#define PANEL_TEXTMSG 10#define PANEL_TEXTMSG_2 11/* Menu Bars, Menus, and Menu Items: *//* (no menu bars in the resource file) *//* Callback Prototypes: */int CVICALLBACK filesel(int panel, int control, int event, void *callbackData, int eventData1, int eventData2);int CVICALLBACK QuitCallback(int panel, int control, int event, void*callbackData, int eventData1, int eventData2);int CVICALLBACK receivefile(int panel, int control, int event, void *cal lbackData, int eventData1, int eventData2);int CVICALLBACK receivefilename(int panel, int control, int event, void*callbackData, int eventData1, int eventData2);#ifdef __cplusplus}#endif#include <ansi_c.h>#include <utility.h>#include <rs232.h>#include <cvirte.h>#include <userint.h>#include "232.h"static int byteswritten;static char filename[MAX_FILENAME_LEN];static char pathname[MAX_PATHNAME_LEN];static int panelHandle;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "232.uir", PANEL)) < 0)return -1;//打开并配置串口Com1OpenComConfig (1, "", 57600, 1, 8, 1, 32767, 32767);//设置通信超时时间SetComTime (1, 5.0);//禁止串口软件握手SetXMode (1, 0);//禁止硬件握手SetCTSMode (1, LWRS_HW HANDSHAKE_OFF); DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACK sendfilename (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){int comstatus;int outputqueuelen;switch (event){case EVENT_COMMIT:strcat (filename, "\r");//向Com1写入文件名字符串byteswritten = ComWrt (1, filename, strlen(filename));break;}return 0;}int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT://关闭串口Com1CloseCom (1);QuitUserInterface (0);break;}return 0;}int CVICALLBACK filesel (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int selstatus;switch (event){case EVENT_COMMIT:filename[0] = '\0';selstatus = FileSelectPopup ("", "*.*", "*.*", "打开文件", VAL_LOAD_BUTTON, 0, 0, 1, 1, pathname);if (selstatus >= 0){SetCtrlVal (panelHandle, PANEL_STRING, pathname);//获得文件名SplitPath (pathname, NULL, NULL, filename);}break;}return 0;}int CVICALLBACK sendfile (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int outputqueuelen;switch (event){case EVENT_COMMIT://设置串口Com1调制解调器参数XModemConfig (1, 10.0, 10, 5.0, 1024);//设置从串口Com1发送文件数据XModemSend (1, pathname);//获得串口Com1输出队列的字符串数目outputqueuelen = GetOutQLen (1);if (outputqueuelen == 0){MessagePopup ("文件传输", "文件传输完毕!");}break;}return 0;}接收程序#include "toolbox.h"#include <ansi_c.h>#include <rs232.h>#include <cvirte.h>#include <userint.h>#include "232.h"static int bytesread;static char filename[MAX_PATHNAME_LEN];static char pathname[MAX_PATHNAME_LEN];static int panelHandle;int main (int argc, char *argv[]){if (InitCVIRTE (0, argv, 0) == 0)return -1; /* out of memory */if ((panelHandle = LoadPanel (0, "232.uir", PANEL)) < 0) return -1;//打开并配置串口Com2OpenComConfig (2, "", 57600, 1, 8, 1, 32767, 32767);//设置通信超时时间SetComTime (2, 5.0);//禁止串口软件握手SetXMode (2, 0);//禁止硬件握手SetCTSMode (2, LWRS_HW HANDSHAKE_OFF);DisplayPanel (panelHandle);RunUserInterface ();DiscardPanel (panelHandle);return 0;}int CVICALLBACK receivefilename (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT:filename[0] = '\0';SetCtrlVal (panelHandle, PANEL_STRING, "");//读取字符串直到回车符出现bytesread = ComRdTerm (2, filename, 260, 13);//当出现回车符后,在其后加上结束符filename[bytesread]= '\0';SetCtrlVal (panelHandle, PANEL_STRING, filename);break;}return 0;}int CVICALLBACK QuitCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){switch (event){case EVENT_COMMIT://关闭串口Com2CloseCom (2);QuitUserInterface (0);break;}return 0;}int CVICALLBACK filesel (int panel, int control, int event,void *callbackData, int eventData1, int eventData2){int selstatus;switch (event){case EVENT_COMMIT:selstatus = DirSelectPopup ("", "保存文件", 1, 1, pathname); if (selstatus){strcat (pathname, "\\");strcat (pathname, filename);SetCtrlVal (panelHandle, PANEL_STRING_2, pathname);}break;}return 0;}int CVICALLBACK receivefile (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){int result;int filesize;int inputqueuelen;FILE *stream;switch (event){case EVENT_COMMIT:GetCtrlVal (panelHandle, PANEL_STRING_2, pathname);//判断文件是否存在result = FileExists (pathname, &filesize);if (!result){stream = fopen (pathname, "wb+");fclose (stream);}//设置串口Com2调制解调器参数XModemConfig (2, 10.0, 10, 5.0, 1024);//设置从串口Com2接收文件数据XModemReceive (2, pathname);//获得串口Com2输入队列的字符串数目inputqueuelen = GetInQLen (2);if (inputqueuelen == 0){MessagePopup ("文件保存", "文件保存完毕!"); }break;}return 0;}。
vb rs-232
End Sub
Private Sub MsComm1_OnComm()
Dim intInputLen As Integer
Dim i As Integer
Select Case mEvent
Case comEvReceive
if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
m_MSComm.SetPortOpen(TRUE);//打开串口
else
m_MSComm.SetOutBufferCount(0);
// 控件事件的响应声明
// *.h
//{{AFX_MSG(CGolfView)
Output 向传输缓冲区写一个字符串。
如何使用://以VC++为例:
首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。 换句话说,只需要设置和监视MSComm控件的属性和事件。
break;
}
UpdateData(FALSE); //更新图象内容
return TRUE;
VB5.0/6.的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制.特别是在中文Wln95/98下通信时更会出现问题。下面就从基础开始介绍,然后逐步讨沦MSComm控件在编程中出现的问题以及编程技巧。
VB串口通信源程序[1]
Private Sub Form_Load()'设置打开端口If OpenPort(3) = False ThenMsgBox "串口打开失败!"End IfEnd SubPrivate Sub Command1_Click()Dim sBuf(2) As BytesBuf(0) = &H55sBuf(1) = &H31sBuf(2) = &HFFIf SendByte(sBuf) = False ThenEnd IfEnd Sub'收到数据产生MSComm事件Private Sub MSComm1_OnComm()Dim i As IntegerDim rBuf() As ByterBuf = MSComm1.InputFor i = 0 To UBound(rBuf)Debug.Print rBuf(i)Next iEnd Sub'串口初始化Private Function OpenPort(PortNum As Integer) As BooleanOn Error GoTo ErrExit '出错转移到ErrExit处理With Me.MSComm1.CommPort = PortNum '端口号.Settings = "9600,n,8,1" '波特率=9600bps;n(无奇偶校验)e(偶校验)o(奇校验);8位数据位;1位停止位.InputMode = 1 '采用二进制数据传输.NullDiscard = False 'NULL字符从端口传送到接受缓冲区.DTREnable = False 'DTR线无效.EOFEnable = False '不寻找EOF符.RTSEnable = False 'RTS线无效.InBufferCount = 0 '清空接受缓冲区.OutBufferCount = 0 '清空传输缓冲区.SThreshold = 0 '不产生MSComm事件.RThreshold = 1 '产生MSComm事件.InputLen = 0 '当输入占用时,告诉控件读入整个缓冲区。
VB串口通信程序设计典型实例{修}
V B串口通信程序设计典型实例利用VB开发串口通信程序既可以使用MSComm控件也可以调用Windows API函数实现。
不过,只要MSComm控件可以被选用,我们推荐选择此控件实现,因为MSComm控件的功能和API调用一样强,甚至比它还好且使用起来更加简单。
在本章提供的串口通信程序设计中,除了PC与PC串口通信外,PC与单片机、PC与智能仪表、PC与PLC、PC与GSM短信模块等串口通信任务的实现均采用MSComm控件。
6.1 PC与PC串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需3根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台PC串口3线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。
6.1.1 PC与PC串口通信程序设计目的(1)掌握PC与PC串口通信的线路连接方法。
(2)利用MSComm控件和API函数实现PC与PC串口通信的程序设计方法。
6.1.2 PC与PC串口通信程序设计用软、硬件本设计用到的硬件和软件清单如表6-1所示。
表6-1设计用软、硬件6.1.3 PC与PC串口通信程序硬件线路图线路说明,在计算机通电前,按图6-1所示将两台PC通过串口线连接起来:计算机A 串口COM1端口的TXD与计算机B串口COM1端口的RXD相连,计算机A串口COM1端口的RXD与计算机B串口COM1端口的TXD相连,计算机A串口COM1端口的GND与计算机B串口COM1端口的GND相连。
图6-1 PC与PC串口通信线路6.1.4 设计任务利用MSComm控件和VB API函数编写程序实现PC与PC串口通信。
任务要求,两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。
VB6_0在PC机与单片机串行通信中的应用
中国校外教育计算机教学08/2010VB6.0在PC 机与单片机串行通信中的应用田玉1张文友2蔚明2赵雅楠2(1.河北移动承德分公司;2.承德广播电视大学)摘要!在开发微机控制及数据采集系统中,要实现PC 机与单片机中的串行通信,经常用到的是RS232接口。
我们普通PC 机后面的COM 端口即RS232接口。
VB6.0提供了M SC OMM 通信控件,只需编写少量的程序代码,即可在W i ndow s 环境下轻松实现串口的数据交换。
本文以笔者曾研制的压力测定系统为例简单介绍通过VB 实现计算机串口通信的方法。
关键词!串口通信RS232VB6.0随着计算机技术的迅速发展及其在各领域的广泛应用,远程控制以及数据采集系统多采用上位机和下位机的主从工作方式,由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,因而成为主要的通信手段。
微机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用微机。
而单片机具有价格低,功能强,抗干扰能力好,以及面向控制等特点,所以下位机采用单片机来构成主从式多机工作模式。
一、VB6.0实现串行通信方法VB 提供的通信控件M sco mm 32.ocx ,使用前只需从Pro j ect 菜单下的Co mponents 中选择M i crosoft Co mm C ontro l6.0把M sco mm32.ocx 控件调入工具框中即可使用。
利用该控件可对串行通信的数据发送和接收进行设置,还可对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以通过触发On C o mm 事件来追踪、处理通信和错误事件的发生。
由于每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
硬件连接:(1)当单片机以RS232接口为端子连接时,单片机与计算机的连接如下图:(2)当仪表以RS485接口(其它接口如422等类同)为端子连接时,单片机与计算机的连接如下图:2.M S CO MM 控件简介为支持串行通信的实现,VB6.0中M scomm 控件提供了众多的串行通信属性,但首先必须要熟悉的几个属性主要包括:C o mmPor:t 设置并返回通讯端口号。
基于VB6_0实现PC机与单片机的串行通讯
2009.04(上)ChinaCollectiveEconomy集体经济·摘要:文章介绍利用VB6.0的串行通讯控件可实现PC 机与多单片机之间的串行通讯,并结合实例使用RS-232接口进行串行通信的基本程序。
基于高级语言实现的PC 机与单片机的通讯提高了单片机的开发水平,同时也降低了单片机的开发难度,我们以此为开发工具并用于多种医疗器械的中心控制部分,对推动已有医疗器械的更新换代和新型医疗器械的研发都具有重要的实用价值。
同时,也为单片机在其他应用领域的开发展示了更为广阔的前景。
关键词:VB6.0;单片机;串行通讯;MSComm 控件;医疗器械控制一、前言当前,信息技术在医疗行业的应用越来越多。
随着计算机技术特别是单片微型机技术的发展,在各种单片机应用系统的设计中,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。
而串行通信是指按照逐位顺序传递数据的通信方式,在控制领域的现场监测、分布控制等场合有着重要的应用价值。
鉴于PC 机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,通过PC 机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。
因此,如何实现PC 机与单片机之间的通讯具有非常重要的现实意义。
在VB 环境下PC 机与单片机之间实现串行通讯的软硬件方案十分关键。
PC 机的通讯程序使用Visual Basic 编写,VB 是Microsoft 公司推出的Win -dows 应用程序开发工具,因其具有面向对象的设计方法,友好的用户界面、编程高效、数据处理及驱动底层硬件功能强等优点而受到广泛的使用,而且VisualBasic 6.0版本带有专门实现串行通讯的MSCOMM 控件,成为许多用户开发PC机与单片机串行通信程序的首选工具。
本文PC 机通讯程序利用VB 提供的MsComm 串行通讯控件来完成,单片机的程序用汇编语言来写。
VB界面与单片机进行通讯之VB编程
Option ExplicitDim Text6change As StringDim a As StringDim j As IntegerPrivate Sub Form_Load()If MSComm1.PortOpen = True ThenMSComm1.PortOpen = FalseEnd IfForm1.Picture = LoadPicture("")BSE1.SchemeStyle = 0BSE1.EndSubClassingBSE1.InitSubClassingCombo1.AddItem "COM1"Combo1.AddItem "COM2"Combo1.AddItem "COM3"Combo1.AddItem "COM4"Combo1.AddItem "COM5"Combo1.AddItem "COM6"Combo1.AddItem "COM7"Combo1.AddItem "COM8"Combo1.AddItem "COM9"Combo1.AddItem "COM10"Combo1.AddItem "COM11"Combo1.AddItem "COM12"Combo1.AddItem "COM13"Combo1.AddItem "COM14"Combo1.AddItem "COM15"Combo1.AddItem "COM16"Combo1.ListIndex = 2MSComm1.Settings = "2400,N,8,1" '2400波特率,无校验,8位数据位,1位停止位MSComm1.RThreshold = 1 '设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
串口RS232通信程序(Verilog)
串口RS232通信程序(Verilog)串口有9个管脚,其中只有三个是最重要的,分别是pin 2: RxD (receive data). 接收数据pin 3: TxD (transmit data). 发送数据pin 5: GND (ground). 地串行通信时序我们先来看看字节0x55的发送0x55的二进制代码是01010101,但发送时由低字节开始的,因此发送次序依次为1-0-1-0-1-0-1-0.串行通信电平·"1" is sent using -10V (or between -5V and -15V).·"0" is sent using +10V (or between 5V and 15V).由于计算机RS232的电平与电路板(通常+5V)之间电平的不同所以要用到转换芯片如果PCB板电源+-5V的话用MAX232如果PCB板(FPGA)电源是+-3.3V的话用MAX3232这个图的串口如果采用母头的话,要用交叉公母线,保证是PCB板上这边的RxD连计算机的TxD(3 Pin),PCB板这边的TxD连计算机的RxD(2 Pin).串行通信波特率这里要弄清楚波特率与比特率的差别:比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位(bit)数来表示,其单位为每秒比特数bit/s(bps)、每秒千比特数(Kbps)或每秒兆比特数(Mbps)来表示(此处K和M分别为1000和1000000,而不是涉及计算机存储器容量时的1024和1048576)。
波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。
波特率与比特率的关系为:比特率=波特率X单个调制状态对应的二进制位数两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍;依次类推。
2021VB语言下上位机与单片机串口通讯的的延时方法范文3
2021VB语言下上位机与单片机串口通讯的的延时方法范文vb设计论文六篇:VB语言下上位机与单片机串口通讯的的延时方法 摘要:PC机与单片机之间通讯时,要制定延时方案, 以保证通讯高效、准确。
本文介绍了时钟控件Timer和Get Tick Count函数延时方法, 并编写设计延时方案。
最后通过实例介绍了两种方法组合使用, 实例已经过长时间的考验, 运行稳定可靠。
对于设计同类型的延时方案有借鉴意义。
关键词:延时;时钟控件Timer; GetTickCount; 在信息技术高速发展的时代,通讯技术是其关键问题, 其中控制更是系统稳定运行的核心。
现今多以PC为上位机, 单片机将所需的数据通过串口发送给上位机, 由上位机进行分析、处理。
上位机根据实际数据, 通过串口发出命令进行干预、控制。
在这个过程有很多处理方法和规则, 其中延时方案尤为重要。
延时方案设计的是否合理, 直接影响到数据传输的正确性和效率, 也影响到整个系统的运行是否稳定。
在PC中有各种可以实现串口通讯的语言,本文选用VB6.0作为开发语言。
Visual Basic采用可视化的图像用户界面、面向对象的程序设计思想、事件驱动的工作机制和结构化的高级程序设计语言。
可高效、快速的开发出WINDOWS环境下功能强大、图形界面丰富的应用软件[1]。
Visual Basic6.0通过调用MSComm控件进行串口通讯, 其中有几种延时方法, 本文就HEW互感器误差管理系统各个版本中的用到的两种延时方法进行阐述。
一、上位机与单片机串口通讯实现 上位机与单片机之间以串行总线接口为RS-232。
VB6.0通过调用控件MSComm来实现通讯传输。
通过属性CommPort设置COM口, 属性Settings设置通讯参数, 如:波特率, 数据位, 校验位等。
由Outpu向单片机发送命令, 属性Input将接收的数据进行处理。
一个简单的例子,使用通讯端口COM1, 波特率为9600, 无奇偶校验码, 8位数据位, 1位停止位, 发送字符“A”。
基于VB实现PC机与单片机的串行通讯
基于VB实现PC机与单片机的串行通讯摘要:本文介绍使用VB6.0开发工具实现PC机与单片机的串行通讯的基本原理和方法。
并结合具体实例给出使用RS-232接口进行串行通信的基本程序。
关键词:VB,单片机,串行通讯引言随着计算机技术尤其是单片微型机技术的发展,人们已越来越多地采用单片机来对一些工业控制系统中如温度、流量和压力等参数进行检测和控制。
PC机具有强大的监控和管理功能,而单片机则具有快速及灵活的控制特点,通过PC 机的RS-232串行接口与外部设备进行通信,是许多测控系统中常用的一种通信解决方案。
因此如何实现PC机与单片机之间的通讯具有非常重要的现实意义。
本文将论述在VB环境下PC机与单片机之间实现串行通讯的软硬件方案。
PC机的通讯程序使用Visual Basic编写,VB是Microsoft公司推出的Windows应用程序开发工具,因其具有界面友好,编程简便等优点而受到广泛的使用,而且Visual Basic 6.0 版本带有专门实现串行通讯的MSCOMM控件。
1、硬件原理目前的PC机都有至少一个串行通讯端口RS-232,RS-232端口可用于两台计算机之间进行通讯,RS-232的逻辑电平用正负电压表示,且信号使用负逻辑,逻辑0的电压范围是+5V~+15V,而逻辑1的电压范围是-5V~ -15V,RS-232端口是计算机与其他设备沟通的最常用的接口,不但实作简单,而且价格便宜。
在8051单片机的内部有一个全双工的异步串行I/O 口,它的输入和输出使用5V逻辑而不是RS-232电压,如何进行两种信号的转换,是连接时需要解决的问题,事实上,解决的方法很简单,只需使用一个诸如 MAX232这样的专用芯片即可。
电路结构见下图。
MAX232包含两个将TTL输入转换成RS-232输出的驱动器,还包含两个将RS-232输入翻译成CMOS输出的接收器,这些驱动器和接收器具有反向的功能。
4个外置的电容大小为1uF,如果使用极化电容,注意极性,引脚6的电压为负,因此它的电容的正极连接到地,电容等级至少为15V。
RS-232接口与单片机串行通信程序
RS-232接口与单片机串行通信程序单片机的串行口是非常有用的,通过他我们可以把单片机系统的数据传回电脑处理或者接受电脑传过来的数据而进行相应的动作,下面我就给大家介绍上一下电脑的RS-232 接口与单片机串行通信程序设计方法,51hei 上还有很多这样的文章大家去搜索下。
RS-232 简介:在串行通讯时,要求通讯双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通讯.RS-232-C 接口(又称EIA RS-232-C)是目前最常用的一种串行通讯接口. (“RS-232-C”中的”-C”只不过表示RS-232 的版本,所以与”RS-232”简称是一样的)它是在1970 年由美国电子工业协会(EIA)联合贝尔系统,调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准.它的全名是”数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25 个脚的DB-25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定.后来IBM 的PC 机将RS232 简化成了DB-9 连接器,从而成为事实标准.而工业控制的RS-232 口一般只使用RXD,TXD,GND 三条线.下面,让我们使用S51 增强型单片机实验板来开发一个简单的串口通信实验程序,这是一个串口通信综合实验,需要全套餐客户的相关配件配合才能完成。
通过该实验程序,我们可以检测实验板串口的状态,接收计算机发送来的数据,然后再发送回计算机,如果程序中发送和接收窗中显示的字符相同,则说明实验板的串口是良好的,能够正常收发数据,另外单片机接收计算机的控制指令,根据控制指令来控制实验板上的继电器动作。
首先让我们来看看我们做的通讯软件的实际效果。
RS-232 接口与单片机串行通信程序设计的界面图 1 注:当前按键:“K”,按键的ASC 码:“75”,按键的16 进制码:。
VB编写RS232串口程序向下位机单片机发送数据的问题
VB编写RS232串口程序向下位机单片机发送数据的问题Public Sub out()Dim tmp, buf As Stringtmp = Format(Date, "yymmdd") & Format(Time(), "hhmmss")MSComm.Output = tmpEnd Sub怎么改才能发送16进制的数据啊?因为下位机是单片机只能接收16进制的数据而这个程序好象是以ASC码形式发送的Option ExplicitDim a1 As String '定义a1为全局变量Dim bytData(1) As BytePrivate Sub cmdSend_Click()Call SendData(bytData)End SubPublic Function SendData(ByRef bytData() As Byte) As LongOn Error Resume NextMSComm1.InBufferCount = 0 '清空接收缓冲区MSComm1.Output = bytData '发送数据DoDoEventsLoop Until MSComm1.OutBufferCount = 0 '等待,直到数据发送完毕MSComm1.OutBufferCount = 0 '清空发送缓冲区End FunctionPrivate Sub Form_Load()mPort = 1 'COM端口MSComm1.Settings = "9600,n,8,1"MSComm1.InputMode = comInputModeBinary '采用二进制传输MSComm1.InBufferCount = 0 '清空接受缓冲区MSComm1.OutBufferCount = 0 '清空传输缓冲区MSComm1.RThreshold = 1 '产生MSComm事件MSComm1.PortOpen = True '打开端口Text3 = ""bytData(0) = &HF0bytData(1) = &HFEnd Sub另见/question/24721391.html我的答复,是一简化的串口调试精灵代码,在TXTSEND中写16进制命令,可手动单次发送或自动发送。
使用VB开发串口、USB通信软件
寻 找EOF字符。
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Handshake常数。 Handshake常数如表所示。
常数
值
描述
comNone 0 无握手
comXonXoff 1 XOn/Xoff握手
使用VB开发串口、USB通信软件
使用串口通信控件
针对串口通信,微软公司专门提供了MSComm控件, 使用该控件进行串口通信设计是十分方便的,程序员不必 花时间去了解较为复杂的API函数。通过简单修改控件的 属性和使用控件提供的方法,就可以实现对串口的配置、 完成串口接收和发送数据。
使用VB开发串口、USB通信软件
使用VB开发串口、USB通信软件
使用Windows的API应用程序接口
• Settings属性的设置由4个设置组成,格式如下:
BBBB
P
D
S
各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为数 据位数,S为停止位数。其默认值为“9600,N,8,1”。
• InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。 InputLen 属性的默认值是0。设置InputLen为0时,使用Input将使MSComm 控件读取缓冲区中全部的内容。
4
comEvCD
5
comEvRing
6
使用VB开co发mE串v口EO、F USB通信7软件
描述 发送事件 接收事件 clear-to-send线变化 data-set ready线变化 carrier detect线变化 振铃检测 文件结束
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机与RS-232的串口通信+VB程序单片机部分程序采用C语言编写(C51)//-----------------------函数声明,变量定义--------------------------------------------------------#include <reg51.h>#define COUNT 10 // 定义接收缓冲区大小unsigned char buffer[COUNT]; //定义接收缓冲区unsigned char point; //定义接收数据个数指示变量void UART_init(); //串口初始化函数void COM_send(void); //串口接收函数unsigned char CLU_checkdata(void);//计算校验位函数//--------------------------------------------------------------------------------------------------// 函数名称: UART_init()串口初始化函数// 函数功能:在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s// 串口接收中断允许,发送中断禁止//--------------------------------------------------------------------------------------------------void UART_init(){//初始化串行口和波特率发生器SCON =0x58; //选择串口工作方式,打开接收允许TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)TR1 =1; //启动定时器T1ET1 =0;ES=1; //允许串行口中断PS=1; //设计串行口中断优先级EA =1; //单片机中断允许}//--------------------------------------------------------------------------------------------------// 函数名称: com_interrup()串口接收中断处理函数// 函数功能:接收包括起始位’S’在内的十位数据到数据缓冲区//--------------------------------------------------------------------------------------------------com_interrupt(void) interrupt 4 using 3{unsigned char RECEIVR_buffer;if(RI) //处理接收中断{RI=0; //清除中断标志位RECEIVR_buffer=SBUF; //接收串口数据if(point==0) //如果还没有接收到起始位{if(RECEIVR_buffer==’S’) //判断是否起始标志位point++; //是准备接收下一位elsepoint=0; //不是,继续等待起始位}else if(point>0&&point<10) //判断是否接收够十位数据buffer[point++]=RECEIVR_buffer; //不够,把接收到的数据放入接收缓存区else point=0; //缓冲区已满,清除缓存区内数据重新接收}If(TI) //处理发送中断{TI=0;}}//--------------------------------------------------------------------------------------------------// 函数名称: COM_send()串口发送函数// 函数功能:把数据缓冲区的十位数据发送出去//--------------------------------------------------------------------------------------------------void COM_send(void){for(point=0;point<=10,TI=1;point++) //连续发送十位数据//把缓存区的数据都发送到串口{SBUF=buffer[point];TI=0;}}//--------------------------------------------------------------------------------------------------// 函数名称: CLU_checkdata()计算校验位函数// 输入变量:无// 输出变量: checkdata,包括起始位在内的前九位数据的校验和// 函数功能:计算校验和//--------------------------------------------------------------------------------------------------unsigned char CLU_checkdata(void){ //计算校验位unsigned char checkdata=0;for(point=0;point<9,TI=1;point++){checkdata=checkdata|buffer[point];}return(checkdata);}//------------------------------------------------------------------------------------------ // 函数名称:主函数// 函数功能:调度个子函数,完成通信过程//--------------------------------------------------------------------------------------------------void main(void){unsigned char checkdata;do{UART_init(); //初始化串口if(point==10) //判断数据是否接收完成checkdata=CLU_checkdata; //调用求校验和函数if(checkdata==buffer[9]) //判断校验和是否正确COM_send();//正确则调用发送程序point=0;}while(1);}VB部分程序//---------------------------------------SComm控件的常用属性和方法-----------------------------Commport;设置或返回串口号。
SettingS:以字符串的形式设置或返回串口通信参数。
Portopen:设置或返回串口状态。
InputMode:设置或返回接收数据的类型。
Inputlen:设置或返回一次从接收缓冲区中读取字节数。
InBufferSize:设置或返回接收缓冲区的大小,缺省值为l 024字节。
InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数。
Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。
OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。
OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。
Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。
设置好这些属性和方法,程序很容易就可以编出来了,其中要注意的是串口的波特串设置,OnComm事件的程序编写。
程序的设计是这样的,计算机向单片机发送一个’S’,表示通信开始。
然后紧接着又发送9个字符,其中最后一个字符是前面9个字符(包括’S’)的校验和。
单片机正确接收到10个字符后,把10个字符从新又送回来。
//---------------------------------------初始化串口设计-----------------------------Private Sub Form_Load()Comm1.Setting="9600,n,8,1," ’设置波特率和发送字符格式mPort=1 ’设置通讯串口Comm1.InputLen=0 ’设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据Comm1.InBuffersize=512Comm1.InBufferCount=0Comm1.OutBufferCount=0Comm1.Rthreshold=1Comm1.PortOpen=TrueEnd Sub ’打开串口//--------------------------------------给单片机发送’S’,开始通信-----------------------------Private Sub Command1_C1ick()Timer1.Enabled=TrueEnd SubPrivate Sub Command2_C1ick()Varbuffet=“S”Comm1.Ouput=varbuffeTimer2.Enabled=TrueEnd SubPrivate Sub Form_Unload(Cancel As Integer)Comm1.PortOpen=FalseEnd Sub//---------------------------------------向单片机发送数据-----------------------------Private Sub Timer2_ Timer()Outputsignal=Str(Text2.text) ’向单片机发送数据Temp(1)=Cbyte(outputsignal)Varbuffer=tempComml.Output=varbufferTimer2.Enabled=FalseEnd Sub//---------------------------------------接收单片机发送的数据,并显示-----------------------------Private Sub Comm1_OnComm()Select Case mEvent ’设置oncomm事件,读取片机内存的值Case comEvReceiveInputsignal=comm1.InputText1.Text=Asc(Inputsignal) ’单片机内存的值用textbox显示出Case ElseEnd selectEnd Sub。