单片机与RS-232的串口通信+VB程序
- 格式:doc
- 大小:42.00 KB
- 文档页数:4
总成绩个性化教育系列工程设计报告设计题目基于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串口通信实验准备:需要准备一些与串口通信有关的设备,如(外置式)调制解调器、计算机串口与调制解调器的连接线、一根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中怎样用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) 是一种功能强大、简单易学的程序设计语言。
绘制出来。
保存所有数据,将其另存为.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通信的基本概念以及常用通信技术。
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;}。
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 '当输入占用时,告诉控件读入整个缓冲区。
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”,单击“发送字符”命令,信息返回到第一组的计算机。
中国校外教育计算机教学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 设置并返回通讯端口号。
单片机与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。