当前位置:文档之家› 基于Matlab+GUI的串口通信编程实现

基于Matlab+GUI的串口通信编程实现

基于Matlab+GUI的串口通信编程实现
基于Matlab+GUI的串口通信编程实现

基于MatlabGUI的串口通信编程实现

王战军1,沈明2

(1.91329部队装备部,山东威海264200;2.92859部队,天津300061)

摘要:Matlab不仅具有强大的科学计算功能,还内置了GUI工具用于进行界面开发。利用Matlab的GUI工具和内置的串口通信API,设计开发一个可视化的串口通信例程,实现IMU原始数据的接收采集,并利用Matlab强大的科学计算功能,对数据进行实时处理,图形化显示数据处理结果。最后介绍了编译发布Matlab程序的步骤与注意事项。

关键词:MatlabGUI;串口通信;IMU;软件编译

中图分类号:TP311文献标识码:A文章编号:1004-373X(2010)09—0038—03

SerialCommunicationProgramDevelopmentBasedonMatlabGUI

(1.PLA91329Unit,Weihai264200.China;2.PLA92859Unit,Tianiin300061,China)

Abstract:Matlabhaspowerfulscientificcomputationability,andanembeddedGUItoolisusedtointerfacedevelopment.AvisualizedserialcommunicationroutinesisdesignedwiththeGUItoolandembeddedserialcommunicationAPI,therecep—tionandacquisitionofIMUoriginaldataisrealizedthescientificcomputationabilityofMatlabisusedforprocessingdatareal-timlyanddisplayingresultgraphically.Intheend,stepstocompileandreleasetheprogramisintroduced.Keywords:MatlabGUI;serialcommunication;IMU;softwarecompiler

0引言

Matlab是MathWorks公司开发的一种科学计算

软件。Matlab运行稳定、可靠、使用方便,是广大科研

人员进行科学研究的得力助手。Matlab不仅具有强大

的科学计算功能,还具有满足一般要求的数据采集以及

界面设计开发功能。MatlabGUI(GraphicUserInter-

face)就是内置于Matlab的进行图形界面开发的模块。

本文利用MatlabGUI设计通过串口进行数据发送和

接收的界面,并利用内置于Matlab的串口通信API实

现串口数据发送与接收功能。

1MatlabGUI介绍

启动Matlab后,运行guide命令即可以启动Mat-labGUl开发工具。如图1所示。

新建BlankGUI,如图2所示j

在新建BlankGUI界面中,包含了一般的界面元素,如菜单、按钮、坐标轴、控件等。添加必要的串口通信参数设置按钮。

运行后的界面如图3所示。

收稿日期:2009-10-24

38图1MatlabGUI开发界面图2新建Blank

GUI界面

笠现益皂壬蘧苤2垄Q!Q笙差旦翘总差墨墨Q翅臣运焦皇篮皇蕉鲞盈

实现形式为:

A—fread(obj.size)

图3串口通信界面

2串口数据发送与接收功能实现

2.1建立串口通信流程的基本步骤

Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数(波特率、数据位、停止位、校验位等)、进行中断控制、流控制。从建立串口通信到结束串口通信的完整流程包括以下几个步骤:

(1)为应用程序创建串口对象。实现该功能的函数为:

obi—serial(’port’,’PropertyName’,PropertyValue,…)

其中参数port为完整的串口名称,如coml。PropertyName为串口通信参数,如baudrate,startbits等。创建串口对象的过程中,也可以忽略Proper-tyName。其函数为:

obj=serial(7port’)

(2)连接打开串口。实现该功能的函数为:

fopen(obj)

obj即为使用创建串口对象函数的返回值。在连接打开串口后,可以对串口通信参数进行修改。

(3)设置或者修改串口通信参数。在能够有效地进行串口通信前,必须设置正确的串口通信参数。实现该功能的函数为:

props—set(obj,’PropertyName’,PropertyValue,…)

obj即为使用创建串口对象函数的返回值;Proper—tyName为串口通信参数,如baudrate,startbits等。

(4)从串口读写数据。在前面三个步骤正常完成后,即可以从串口读数据或者向串口写数据,也就是接收或者发送数据。实现读串口功能的函数有多个。其区别在于根据到达串口数据的类型选择合适的读函数。主要包括:fgetl,fgets,fread,fscanf。这里主要介绍fread,fread函数实现从串口读入二进制数据。fread的

A为读入的数据,以数组的形式存储,存储数据形式为字节;obj即为使用创建串口对象函数的返回值;size指定一次读操作读入字节的个数。实现写串口的函数有两个,分别为fwrite和fprintf。fwrite以二进制形式向串口写入数据,实现形式为:

fwrite(obj。A)

obj即为使用创建串口对象函数的返回值;A为写入的数据,以数组形式存储。fwrite以文本形式向串口写入数据,即以ASCII码的形式向串口写数据,实现形式为:fprintf(obj,’cmd’)

obj即为使用创建串口对象函数的返回值;cmd为写入的文本数据,以数组形式存储。

(5)关闭串口以及释放串口对象占用的存储空间。关闭串口函数为:felose(obj)。释放串口对象占用的内存空间,函数为:delete(obj)。释放串口对象在Matlab工作区中占用的存储空间,函数为:clearobj。

以上5步是建立串口通信过程到关闭串口.释放串口占用资源的基本步骤。基本步骤可以实现手动收发数据。其例程如下:

S一---serial(’COMl’)l

fopen(s);

S.BytesAvailableFcnMode2’terminator7;

S.BytesAvailableFcn=@instrcallback;

fprintf(s。’*IDN?’);

out=fscanf(s);

运行以上语句后,显示的结果如下:

BytesAvailableeventoccurredat17:Ol:29fortheobject:

Serial—COMl.

串口数据接收完毕后,需要关闭串口,并释放串口对象占用的资源,使用的命令如下:

fclose(s);

delete(s);

clear

S;

2.2串口中断设置及中断处理函数

要实现自动收发数据,还需要定义串口中断处理函数以及触发串口中断的方式。定义串口中断处理函数也就是定义串口数据接收或者发送函数。定义触发串口中断的方式其目的是为了在串口检测到接收数据的时候,通知并启动串口数据接收函数进行数据接收操作;在串口输出缓存为空的时候,通知启动串口数据发送函数。

(1)触发串口中断的方式。在Matlab串口通信编程中,Matlab通过检测到串口通信事件,从而触发串口中断。涉及到串口读写的事件包括:Bytesavailable,Outputempty。其中Bytesavailable事件有两种:一种

39

是接收到的字符数达到人工设定的数目时,则系统产生该事件;另一种是当接收到指定字符时,系统产生该事件。Outputempty事件是在系统检测到输出缓存区为空时,产生该事件。

Bytesavailable事件需要事先设置。可以使用函数:set(obj,’BytesAvailableFenMode’,’byte’);set(obj,’BytesAvailableFcnCount’,240);以上两个函数设置当串口检测到输入缓存中到达了240个字符的数据时,则触发串口中断。另外,也可以设置为当系统检测到某个字符达到串口,则触发串口中断。其设置函数为:set(obj,7BytesAvailableFcnMode’,’terminator’);set(obj,’terminator’,7H’)。以上两个函数设置当串口检测到字符H时,则触发串口中断。

输出缓存为空事件的产生。该事件由系统自动检测产生,不需要用户特别设置。该事件一般在输出缓存中的最后一个字符发送完毕后产生。用户可以定义该事件引起的串口中断处理函数。

(2)串口中断处理函数。串口中断处理函数可以根据用户需要自行定义。如串口读中断处理函数可以这样定义:obj.BytesAvailableFcn=@receiveData。re-ceiveData即为串口读中断处理函数。在读中断处理函数中可以进行串口读操作。即将输人缓存区中的数据读到用户自定义的存储变量中,以备后续的数据处理与分析。类似可以定义输出缓存为空时触发的串口中断处理函数:obj.OutputEmptyFcn=@writeData。

本文开发的串口通信程序用于接收采集IMU(In-ertialMeasurementUnit)输出的加速度计和陀螺的测量数据。通过定义串口读中断事件和串口中断处理函数,实现了数据的自动采集,并以Matlab图形方式实时显示数据。

3串口通信程序的编译发布

3.1编译程序

为了对代码进行保密,以及方便用户发布可以在不同平台运行的可执行程序,Matlab提供了Matlab程序编译与发布功能。在进行Matlab程序编译之前,需要设置编译工具。在Matlab命令窗口中,输入运行mbuild—setup,进行编译工具设置。如图4所示。

mbuild—setup命令运行后,Matlab会检测已经安装在本机上的编译器,用户可以自行选择任意一个编译器,选择完毕后,运行编译命令,Matlab将使用用户选定的编译器对程序进行编译。

设置完毕编译工具后,即可以在命令窗口中运行编译命令,将Matlab程序编译成可执行程序。命令格式为:

mec[-options]mfilel[mfile2…mfileN];

options为编译参数;mfilel为待编译的Matlab文件,如果包含多个Matlab文件,可以直接列在mfilel后面。

圈4设置Matlab编译工具

如将一个文件名为myfun.m的Matlab文件编译成一个独立可执行程序,可以使用mec命令:

mce—mmyfun;

mee命令可以用使用多个编译参数,相应参数的含义可以参见Matlab帮助文档。

3.2发布程序

Matlab文件编译完毕后,生成的可执行程序还需要Matlab环境的支持,要发布到没有安装Matlab的机器上运行,还需要进行最后一项工作,即打包Matlab组件运行环境(MatlabComponentRuntime,MCR)。将MCR与可执行程序一起打包,拷贝到其他没有安装Matlab的机器上,在该机器上安装MCR,安装完毕即可以直接在该机器上运行编译的Matlab可执行程序。MCR安装文件位于:

MatlabRoot\toolbox\compiler\deploy\win32

在2008版Matlab中,已经内置了Matlab编译发布工具箱,在Matlab命令窗口中运行deploytool命令,即可以调出该工具窗口,通过该工具可以方便、快捷地编译发布Matlab程序。

4结语

Matlab具有强大的科学计算功能和图形显示功能,选用Matlab作为数据处理与分析工具是合适的,但其界面开发和数据采集功能相对较弱,不如VisualC++或者LabView强大。不过,对于一般的界面开发,和普通功能的串日通信开发,Matlab是足以胜任的,同时也可以直接利用其强大的数据分析与处理功能。本文基于MatlabGUI的串口通信功能的编程实现表明

(下转第44页)

基于Matlab GUI的串口通信编程实现

作者:王战军, 沈明

作者单位:王战军(91329,部队装备部,山东,威海,264200), 沈明(92859部队,天津,300061)

刊名:

现代电子技术

英文刊名:MODERN ELECTRONICS TECHNIQUE

年,卷(期):2010,33(9)

被引用次数:0次

参考文献(7条)

1.陈垚光.毛涛涛.王正林精通Matlab GUI设计 2008

2.秦襄培Matlab图像处理与界面编程宝典 2009

3.Igor Penjivrag MatlabGUI 编程 2007

4.陈安宇.陈伟.石彬Matlab图形用户界面的应用研究 2008(10)

5.张立炎.张天贺.黄亮燃料电池空气供给系统建模及基于Matlab GUI仿真界面设计 2008(2)

6.夏庆观.盛党红.温秀兰基于Matlab GUI的零件图像识别 2008(23)

7.赵震.刘志刚.刁利军基于Matlab的船用螺旋桨计算机实时仿真及GUI设计 2008(3)

本文链接:https://www.doczj.com/doc/db13177762.html,/Periodical_xddzjs201009012.aspx

授权使用:咸宁学院(xnxy),授权号:3840fde5-3ed5-4ea8-8287-9de3012a219a

下载时间:2010年8月31日

C#串口通讯编程

C#中串口通信编程收藏 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手 或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识

在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和RTS & CTS 也需要交叉。 RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序 如果想使用默认属性,按“Save Status”按钮,如果想改变属性按“Property”。它会弹出下图:

1C#中串口通信编程教程

C#中串口通信编程教程 本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET2.0提供了串口通信的功能,其命名空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。我们将使用标准的RS232C在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort类。 创建SerialPort对象 通过创建SerialPort对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp=new SerialPort(); 默认情况下,DataBits值是8,StopBits是1,通信端口是COM1。这些都可以在下面的属性中重新设置 : BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。 串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样的波特率和数据位数。

通用串口通讯程序设计

通用串口通讯程序设计 作者:和光同尘版本:V1.0 序 做硬件开发近20载,花了近十年做基础开发,对硬件开发略知一二,接触的做国防/工业大项目的人才我就是和他们沟通中获取了很多思想;人生已过而立之年,不惑解疑,总想写点什么。从一线研发(做了4年),开发(3年),硬件开发主管(12年),算起来人生从不到弱冠之年(中专毕业)开始接触MCS51、AVR等8位处理器到ARM v7核、CoretxM 核的32位处理器,CPLD/FPGA、PLC…………啰嗦了!! 最近因为工作原因需要把一些自己感悟的记录下来,希望传递给入门的有心沉下心做基础健壮扎实的初学者。

正文 做嵌入式硬件开发一般都会用到通讯数据交互,这就涉及通讯协议/规约的设计。本文从基础的串口(RS232、RS485等)为模型进行讲解。 说道串口通讯,就是编写串口程序,简单的就是1个字节的发送,1个字节的接收,但这不能满足绝大多数实际工作业务需求,实际需要一串字节数据的交互,A发送,B接收……Z 接收;Z机……B机收到根据情况需要回复(ACK)A机,这个过程就叫交互双向通讯(本文不讨论多主机、1主机相对复杂通讯机制。)。这种通讯就需要提前设计好通讯的规约(大家约定好暗号——每个字节代表什么意思)。 接下来编写通信程序(发送/接收),如何写出一个健壮高效串口程序?是否健壮高效其实很大一部分取决于通讯接收程序的架构。 通讯程序编写依据是——通讯规约,通讯帧的设计。 ●I类通用型: ||帧头段|===|数据段|===|校验码|===|帧尾段|| ●II类时隙通讯: ||开始时隙T(T1T2T3T4T5T6)|=|功能码|=|数据段|=|校验码|=|结束时隙T(T1T2T3)|注意:时隙只是纯粹的前后两帧数据的间隔时间,这期间坚决不能有数据产生。 1.1I类通用型 ◆帧头段 帧头段用于鉴别一串字节流中1帧数据起始位置,这个帧头段必须具有足够的特殊标识(易分辨)。 什么样的特殊标识可作为帧头? 根据个人经验: ①具有监测通讯波特率功能特点:0B01010101(55H)、0B10101010(AAH)或0B00000000(00H)、0B11111111(FFH); ②利用ASCII码如MODBUS ASCII规约以冒号‘:’(3AH)作为帧头。也可以采用ASCII ‘U’(55H)、‘@’(40H)等等 只要保证帧头字节数据内容,在所有通讯数据字节流中,除帧头有意为之而出现,那就是帧头。建议最好有两个字节及以上,这样数据出现与帧头一致的概率更加小,才做到独一无二的特殊性。

串行端口程序设计

串行端口程序设计 一、实验目的 了解在linux环境下串行程序设计的基本方法。 掌握终端的主要属性及设置方法,熟悉终端I /O函数的使用。 学习使用多线程来完成串口的收发处理。 二、实验内容 读懂程序源代码,学习终端I /O函数的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。 三、预备知识 有C语言基础。 掌握在Linux下常用编辑器的使用。 掌握Makefile 的编写和使用。 掌握Linux下的程序编译与交叉编译过程 四、实验设备及工具 硬件:UP-CUP S2410 经典平台、PC机Pentium 500以上, 硬盘10G以上。 软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境 五、实验原理 异步串行I /O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图2.3.1串行通信字符格式 图2.3.1给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。 接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误: ●奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。 ●帧格式错:一个字符从起始位到停止位的总位数不对。 ●溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。 每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM 连接电缆,其连接方式如下:

Java串口通信编程指南

Java串口通信编程指南

1. 概述 在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就只支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用。另外,也可以用开源的Rxtx实现串口通信,这里仅以Java Communication包,在Windows 平台实现串口通信进行说明。 2. 前期准备 2.1. 下载Java Communication包 ?下载地址如下:https://www.doczj.com/doc/db13177762.html,/Jolt/javacomm20-win32.zip。 ?如果是非Windows平台,请到Sun网站选择其他版本下载。地址如下: https://www.doczj.com/doc/db13177762.html,/download/products.xml?id=43208d3d 2.2. 配置 ?解压缩javacomm20-win32.zip ?把win32com.dll拷贝到{JAVA_HOME}\jre\bin ?把comm.jar拷贝到{JAVA_HOME}\jre\lib\ext ?把https://www.doczj.com/doc/db13177762.html,m.properties拷贝到{JAVA_HOME}\jre\lib ?set CLASSPATH={JAVA_HOME}\jre \lib\ext \comm.jar;%classpath%

3. 实现过程 主要步骤包括: ?获得串口标识 ?打开串口 ?设置串行端口通讯参数 ?获取输入(出)流 ?进行读写操作 3.1. 获得串口标识 指定串口的端口号,生成串口的标识类的实例。 https://www.doczj.com/doc/db13177762.html,mPortIdentifier是通讯端口管理器,控制访问到通讯端口的中心类。一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的并且选择一个端口便于开始。它包括如下功能: a. 通过驱动决定通讯端口是可用的。 b. 打开通讯端口为了I/O操作。 c. 决定端口的拥有者。 d. 解析端口拥有者的争夺。 e. 管理事件显示在端口拥有者的中的状态改变。 示例代码如下: 代码: 3.2. 打开串口 示例代码如下: 代码:

串行异步通信程序设计

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年秋季学期 《通信系统综合训练》课程设计 题目:串行异步通信程序设计 专业班级:通信工程(1)班 姓名:李银环 学号:11250134 指导教师:王惠琴 成绩:

摘要 在Windows环境下实现通信的方法主要有利用MSComm控件和直接用Windows API编程,软件采用Microsoft Visual C++ 6.0,利用MSComm控件编程相对来说更简单一些,而直接使用Windows API编程更灵活一些。 本次课程设计分析了串行异步通信的基本原理,在VC++6.0的环境下利用MSComm控件实现了两个PC机的COM口间的数据发送和接收。本文通过对COM1口进行初始化编程,以及对建立的工程中的每个对话框和按钮分别进行编程和设置,成功的实现了利用PC机的两个COM口进行异步通信,并能根据设置调整异步传行通信参数。 关键词:VC++6.0;MSComm控件;串行异步通信

目录 前言 (1) 第1章串行异步通信基本原理 (2) 1.1 串行通信协议 (2) 1.2 串口通信的基本概念 (3) 1.3 RS-232简介 (4) 第2章 VC++软件简介 (5) 2.1 VC++6.0简介 (5) 2.2 Microsoft Communications Control 控件 (6) 第3章串行异步通信系统分析 (7) 第4章串行异步通信系统设计 (8) 4.1建立工程 (8) 4.2 在程序中添加MSComm控件 (9) 4.3 初始化串口:设置MSComm控件的属性 (11) 4.4 发送数据 (12) 第5章串行异步通信程序调试 (18) 5.1 计算机串口设置 (18) 5.2 程序运行结果 (18) 参考文献 (20) 附录 (21) 致谢 (29)

C#中串口通信编程

本文将介绍如何在.NET平台下使用C#创建串口通信程序,.NET 2.0提供了串口通信的功能,其命名 空间是System.IO.Ports。这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信。 我们将使用标准的RS 232 C 在PC间通信。它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接。 命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类。 创建SerialPort 对象 通过创建SerialPort 对象,我们可以在程序中控制串口通信的全过程。 我们将要用到的SerialPort 类的方法: ReadLine():从输入缓冲区读一新行的值,如果没有,会返回NULL WriteLine(string):写入输出缓冲 Open():打开一个新的串口连接 Close():关闭 Code: //create a Serial Port object SerialPort sp = new SerialPort (); 默认情况下,DataBits 值是8,StopBits 是1,通信端口是COM1。这些都可以在下面的属性中重新设置: BaudRate:串口的波特率 StopBits:每个字节的停止位数量 ReadTimeout:当读操作没有完成时的停止时间。单位,毫秒 还有不少其它公共属性,自己查阅MSDN。

串口的硬件知识 在数据传输的时候,每个字节的数据通过单个的电缆线传输。包包括开始位,数据,结束为。一旦 开始位传出,后面就会传数据,可能是5,6,7或8位,就看你的设定了。发送和接收必须设定同样 的波特率和数据位数。 无猫模式 没有Modem模式的电缆只是简单地交叉传送和接收线。同样DTR & DSR, 和 RTS & CTS也需要交叉。RS232针图 这里,我们三条线。互连2和3(一段的2pin连接3pin),连接两端的5pin。 [示例程序] 主程序

MFC串口通信编程详解解析

MFC串口通信编程介绍 主要介绍了用CreateFile(函数和WriteFile(函数读写串口的实例,以及设置串口属性的实例. 在工业控制中,工控机(一般都基于Windows平台经常需要与智能仪表通过串口 进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点.每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答. 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活.其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活.下面只介绍API串口通信部分. 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式.同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中, 虽然不会阻塞主线程,但是仍然会阻塞监听线程;而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞. 无论哪种操作方式,一般都通过四个步骤来完成: (1打开串口 (2配置串口 (3读写串口 (4关闭串口

一打开串口 Win32系统把文件的概念进行了扩展.无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的.该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile; ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为 OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O操 作;

VC++串口通信编程

在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信。串口通信方便易行,应用广泛。 一般情况下,工控机和各智能仪表通过RS485总线进行通信。RS485的通信方式是半双工的,只能由作为主节点的工控PC机依次轮询网络上的各智能控制单元子节点。每次通信都是由PC机通过串口向智能控制单元发布命令,智能控制单元在接收到正确的命令后作出应答。 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX 控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。本文我们只介绍API串口通信部分。 串口的操作可以有两种操作方式:同步操作方式和重叠操作方式(又称为异步操作方式)。同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而重叠操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。 无论那种操作方式,一般都通过四个步骤来完成: (1)打开串口 (2)配置串口 (3)读写串口 (4)关闭串口 (1)打开串口 Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的原型为: HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); ?lpFileName:将要打开的串口逻辑名,如“COM1”; ?dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列; ?dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0; ?lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; ?dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; ?dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同 步I/O操作; ?hTemplateFile:对串口而言该参数必须置为NULL;

串行通信程序设计

课程设计任务书 学生姓名: xxx 专业班级: xxx 指导教师: xxx 工作单位: xxx 题目: 串行通信程序设计 初始条件: 用汇编语言编写程序,实现两台计算机之间的通信。 要求完成的主要任务: ①制作RS-232C通信线,并用它连接两台计算机; ②在计算机上用不同的颜色设置接收、发送区域; ③能设置发送、接收的数据长度,并能显示接收的数据; ④能选择通信校验方式(奇校验、偶校验或无校验); ⑤可以将接收的数据作为文件保存起来; ⑥撰写设计说明书及调试心得。 时间安排: 第一阶段: 查阅相关资料 第二阶段: 课程设计 第三阶段: 撰写课程设计报告 第四阶段: 课程设计答辩 指导教师签名:年月日系主任(或责任教师)签名:年月日

串行通信程序设计 1方案论证 首先,要能进行串行通信,串口是基础。使用RS-232 DB-9串口,实现基本通信时,只需将其5号线(地线)相连,2、3号线(接收、发送数据线)分别交叉相连即可。 根据要求,此程序可分为界面显示、参数设置、发送数据、接收数据和保存文件五部分。以下将从这五个方面进行方案论证。 1.1 界面显示 一般情况下显示器的屏幕为25行、82列,不妨把整个屏幕看成25*80个存储单元。屏幕坐上角存储单元的坐标为(0,0),即行号为0,列号为0。因此可通过设置不同的行号和列号定位屏幕上的存储单元。 用不同颜色设置发送和接收区域,即用不同颜色的空格填充发送和接收区域。这就需要调用BIOS系统中断,先置光标位置,再写当前字符和属性。这两项功能都可调用BIOS显示输出10H号中断服务程序实现,详见表1-1 10H号中断服务程序部分功能。 表1-1 10H号中断服务程序部分功能 IBM PC的标准显示器适配器,有单色和彩色之分,其中后者能以文本和图形两种工作方式,既可以显示黑白图形又可以显示有16种颜色的彩色图形。彩色文本方式下,设置不同的属性字节即可实现不同前景和不同背景的组合。例如,0111表示灰白,1110表示黄,设置灰白底黄字的属性为01111110,十六进制表示为7EH。 显示发送和接收两个区域的方案大体分两种,一是两个带状区域,一是两个并排的矩形。从美观的角度来讲,后者更胜一筹。显示标题、提示、设置等信息时,只需先将光标定到合

C#使用SerialPort类设计串口通讯程序

使用SerialPort类设计串口通讯程序 一.概述 输送带控制模块的核心技术是与PLC的串口通讯,在Visual Studio 6.0中编写串口通讯程序,一般都使用Microsoft Communication Control(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在https://www.doczj.com/doc/db13177762.html,技术广泛应用的今天,Visual S https://www.doczj.com/doc/db13177762.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.doczj.com/doc/db13177762.html,来编写串口通讯程序:第一种方法是通过采用Visual Studio 6.0中原来的MSComm控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计 串口通讯程序。NET Framework 2.0类库包含了SerialPort类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,这里着重讨论了Visu al Studio 6.0的MSComm控件和SerialPort类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 System.IO.Ports命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/ O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using Sys tem.IO.Ports。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm 中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: ?通讯端口号 [PortName]属性获取或设置通信端口,包括但不限于所有可用的COM 端口,请注意该属性返回类型为String,不是https://www.doczj.com/doc/db13177762.html,mPort的short类型。通常情况下,PortName正常返 回的值为COM1、COM2……,SerialPort类最大支持的端口数突破了CommPort控件中CommPor t属性不能超过16的限止,大大方便了用户串口设备的配置。 ?通讯格式 SerialPort类对分别用[BaudRate]、[Parity] 、[DataBits]、[StopBits]属性设置通讯格式中的波特率、校验位、数据位和停止位,其中[Parity]和[StopBits]分别是枚举类型Parity、StopBits,Parit y类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space,Parity枚举了None、One、OnePointFi ve、Two。 SerialPort类提供了七个重载的构造函数,既可以对已经实例化的SerialPort对象设置上述相关属性的值,也可以使用指定的端口名称、波特率和奇偶校验位数据位和停止位直接初始化Seri alPort 类的新实例。 3.串口的打开和关闭 SerialPort类没有采用MSComm.PortOpen=True/False设置属性值打开关闭串口,相应的是调用类的Op en()和Close()方法。 4. 数据的发送和读取

串行通信及数据校验程序设计.

中北大学 单片机原理及接口技术 课程设计说明书 学生姓名:学号: 学院:计算机与控制工程学院 专业:自动化 题目:串行通信及数据校验程序设计 指导教师:职称: 2013年12月22日

中北大学 单片机及其接口技术课程设计任务书 12/13 学年第一学期 学院:计算机与控制工程学院 专业:自动化 学生姓名:学号 课程设计题目:串行通信及数据校验程序设计 起迄日期:12月16 日~12月20 日 课程设计地点:中北大学 指导教师:沈小林 下达任务书日期: 2013年12月16日

课程设计任务书

课程设计任务书

目录 一、设计任务 (2) 1.任务 (2) 2.通信技术要求 (2) 二、基本原理 (2) 1. AT89C51单片机的串行接口结构 (2) 2.串行口方式1的发送和接收 (4) 3.设置串行通信寄存器 (4) 三、系统方案比较与论证 (5) 1.汇编语言和C语言的特点及选择 (5) 2.并行通信与串行通信的比较 (5) 3.串行通信程序设计的比较 (6) 4.同步通信与异步通信的区别 (6) 四、系统电路设计 (6) 五、软件设计 (7) 1.发送程序设计 (7) 2.接收程序设计 (7) 3.校验程序设计 (8) 4.系统软件总体流程图 (9) 六、总结 (11) 七、参考文献 (11)

一、设计任务 1.任务 通过对单片机串行通信程序设计掌握单片机串行数据通讯的实现及数据校验的原理。 2.通信技术要求 (1)串行通信波特率:9600bps; (2)数据长度:20字节 二、基本原理 1.AT89C51单片机的串行接口结构 51单片机的串行接口是一个全双工的接口,它可以作为UART用,也可以作为同步移位寄存器用。51单片机串行接口的结构如下: (1)数据缓冲器(SBUF) 接受或发送的数据都要先送到SBUF缓存。接收SBUF和发送SBUF用同一直接地址99H,两者在物理结构上是相互独立的,单片机用它们来接收和发送数据,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。 (2)串行控制寄存器(SCON) SCON用于串行通信方式的选择,收发控制及状态指示,各位含义如下: SM0,SM1:串行接口工作方式选择位,这两位组合成00,01,10,11对应于工作方式

串口通信程序设计

1基本理论基础 1.1串行通信的方式 通信的基本方式可以分为并行通信和串行通信两种。串行通信时数据用一根传输线逐为顺序传送。串行通信又分为两种类型:串行异步通信和串行同步通信。 串行异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。 同步通信时指在约定的数据通信数率下,发送方和接收方的时钟信号频率和相位始终保持一致,通信双方发送数据和接收数据具有完全一致的定时关系。 1.2串行通信数据传送方式 单工传送:单工传送时指在通信时只能由一方发送数据,另一方接收数据的通信方式。 半双工传送:指在通信时双方都能够接收或者发送,但是不能够同时接收和发送的通信方式。 全双工传送:通信双方之间有两条通路,发送信息和接收信息可以同时进行。 1.3串行通信接口标准RS-232C RS-232C标准是美国EIA于1969年公布的通信协议。它的作用是实现不同的厂商的计算机和各种外围设备进行串行连接。 2.INS 8250 2.1INS 8250的外部引脚和结构 INS 8250是通用异步收发器UART,用作异步通信接口电路。INS 8250的引脚信号基本上可以分为两大类:与CPU系统总线相连的信号线和与通信设备MODEM连接的信号线。

2.2INS的内部寄存器及其编程方法 2.2.1波特率因子寄存器(DLL/DLH) 波特率因子寄存器是用来控制串行数据传输的数率。波特率因子=1843200÷(分频值×16)内部设置波特率因子寄存器DLL/DLH,在初始化时将选用的波特率因子值的高低、低字节分别放入DLH和DLL中。 若设定通信波特率为1200bps,波特率因子寄存器的初始化程序为: MOV DX,3FBH MOV AL,80H OUT DX,AL MOV DX,3F8H MOV AL,60H OUT DX,AL MOV DX,3F9H MOV AL,00H OUT DX,AL 2.2.2通信线路控制寄存器(LCR) 通信线路控制寄存器LRC主要用来指定异步通信数据格式,即字符长度、停止位位数、奇偶校验。LRC的控制字如下 2.2.3通信线路状态寄存器 通信线路状态寄存器用来表示数据接收和数据发送时8250的状态。控制字如下 中断源提出的中断请求被允许还是被禁止是由允许中断寄存器控制。控制字格式如下

串行通信程序设计微机原理课设

摘要 计算机与外部进行信息交换的方式有两种,一种是并行通信,另一种是串行通信。其中串行通信时,数据和控制信息是一位接一位串行传输,这样虽然速度会慢一些,但是传输距离长,硬件电路也相对简单。因此在长距离通信系统及各类计算机网中,串行传输方式是主要的通信方式。计算机提供给用户的RS-232C接口就是一个标准的串行通信接口,主要用来把数据处理装置与数据通信装置连接在一起。RS-232C标准包括接口的机械,电气及功能方面的内容,许多场合都以这种借口规范作为连接标准。 串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0,每一位数据占据一个固定的时间长度。 汇编语言是用指令的助记符,符号地址,标号等书写程序的语言,实际上是机器语言的一种符号表示,主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址,常量和变量。汇编语言是与机器语言密切相关的,是面向机器的语言。CPU不同的计算机有着不同的汇编语言,汇编语言源程序不能直接在计算机上运行,需要翻译成机器语言程序。 本次课程设计要求制作RS-232C通信线,用其实现两台计算机之间的通信。要求在计算机上用不同颜色设置接收和发送区域,能设置发送和接收的数据长度,显示接收数据,并能选择通信校验方式,将接收的数据作为文件保存起来。 关键字:汇编语言串行通信 RS-232C通信线源程序CPU

串行通信程序设计 1.串行通信的基本原理 1.1串行通信的基本概念 串行通信有两种工作方式:异步通信和同步通信。异步通信由于不需要同步信号,硬件连接简单而被广泛使用于串行部件,计算机与计算机,计算机于单片机及其仪表之间的数据交换。 (1)异步通信 所谓异步通信,是指以字符为单位传输数据,用起始位和停止位标志每个字符的开始和结束,两次传输时间间隔不固定。异步通信不需要同步信号,为了实现异步通信的要求,CPU与外设之间有两项规定,及字符格式和波特率的规定。在一个串行通信系统工作时,应该设定接收方和放松放的比特率相同;在异步通信方式中,任何一组数据总是以起始位开始,停止位结束,在起始位和停止位之间才是有效数据位,另外数据位的末尾是否用奇偶校验,起始位和停止位选用宽度等都有一定的规定。 (2)同步通信 异步通信为了可靠地传输数据,在每次传输数据时附加一些标志位。在大量数据传输时,为了提高速度,就去掉这些标志,这就是同步通信。采用同步传输,数据块开始处要用同步字符来指示,且在发送端和接收端之间要用时钟来实现同步。同步通信中使用的数据格式根据所采用的控制规程而定。 1.2串行通信中的数据传输方向 通常,串行通信数据在两个站之间是双向传输的,A站可作为发送端,B站作为接收端,也可以A站作为接收端,B站作为发送端,根据要求可分为半双工和全双工。 半双工:每次只能有一个站发送,即只能有A站发送到B站,或者有B站发送到A 站,A站和B站不能同时发送。 全双工:两个站都能同时发送成为全双工,数据传输方向示意图如图1-1所示。

串口通信原理与编程

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。 实际工作中利用串口完成通信任务的时候非常之多。已有一些文章介绍串口编程的文章在计算机杂志上发表。但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。 一.串行通信的基本原理 串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。 串口通信程序的流程如下图: 二.串口信号线的接法 一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。25芯和9芯的主要信号线相同。以下的介绍是以25芯的RS-232C为例。 ①主要信号线定义: 2脚:发送数据TXD;3脚:接收数据RXD;4脚:请求发送RTS;5脚:清除发送CTS; 6脚:数据设备就绪DSR;20脚:数据终端就绪DTR;8脚:数据载波检测DCD; 1脚:保护地;7脚:信号地。 ②电气特性: 数据传输速率最大可到20K bps,最大距离仅15m. 注:看了微软的MSDN 6.0,其Windows API中关于串行通讯设备(不一定都是串口RS-232C或RS-422或RS-449)速率的设置,最大可支持到RS_256000,即256K bps! 也不知道到底是什么串行通讯设备?但不管怎样,一般主机和单片机的串口通讯大多都在9600 bps,可以满足通讯需求。 ③接口的典型应用: 大多数计算机应用系统与智能单元之间只需使用3到5根信号线即可工作。这时,除了TXD、RXD以外,

串口通信Windows程序设计

串口通信Windows程序设计 一.工作环境 硬件连接好的串口设备(虚拟串口软件VSPM),Visual Studio 2008 二.基本知识 1.串口通信 串行口通信,IDE,USB,RS232,主要讲RS232接口,理论传输距离可以 达到50m,实际应用只有15m左右,传输速度较慢,波特率115200bps 时,速度才有14KB/S 2.串口通信传输方式 a)异步传输:异步传输将比特分成小组进行传送,小组可以 是8位的1个字符或更长。发送方可以在任何时刻发送这 些比特组,而接收方从不知道它们会在什么时候到达。双 机通讯需要设定开始位,数据位,校验位,停止位,双机 不需要同步时钟,速率慢。 b)同步传输:数据以帧的形式发送,双机时钟必须同步,否 则会出现传输错误,速度比异步传输快。 三.Windows串口程序设计基础 在Win32下,可以使用两种编程方式实现串口通信,其一是使用ActiveX控件,这种方法程序简单,但欠灵活。其二是调用Windows的API函数,这种方法可以清楚地掌握串口通信的机制,并且自由灵活。我们只介绍API串口通信部分。 同步操作时,API函数会阻塞直到操作完成以后才能返回(在多线程方式中,虽然不会阻塞主线程,但是仍然会阻塞监听线程);而异步操作方式,API函数会立即返回,操作在后台进行,避免线程的阻塞。

无论那种操作方式,一般都通过四个步骤来完成: 1.打开串口 2.配置串口 3.读写串口 4.关闭串口 (1)打开串口 HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); lpFileName:将要打开的串口逻辑名,如“COM1”;dwDesiredAccess:指定串口访问的类型,可以是读取、写入或二者并列;dwShareMode:指定共享属性,由于串口不能共享,该参数必须置为0;lpSecurityAttributes:引用安全性属性结构,缺省值为NULL; dwCreationDistribution:创建标志,对串口操作该参数必须置为OPEN_EXISTING; dwFlagsAndAttributes:属性描述,用于指定该串口是否进行异步操作,该值为FILE_FLAG_OVERLAPPED,表示使用异步的I/O;该值为0,表示同步I/O 操作; hTemplateFile:对串口而言该参数必须置为NULL;

单片机与PC机串行通信系统设计

随着计算机技术特别是单片机技术的发展,单片机的应用领域越来越广泛,单片机在工业控制、数据采集以及仪器仪表自动化等许多领域都起着十分重要的作用。但在实际应用中,在要求响应速度快、实时性强、控制量多的应用场合,单个单片机往往难以胜任,这时使用多个单片机接合PC机组成分布式系统是一个比较好的解决方案。这样,单片机的数据通信技术就变得十分重要,在某种程度上说,掌握了单片机的数据通信技术也就是掌握了单片机的核心应用技术。 现在单片机及PC机在结构、性能和经济上为实现远程串行通信提供了很好的条件,串行通信是指按照逐位顺序传递数据的通信方式,由于仅需三根传输线传送信息且通信距离相对较远,所以在控制领域的现场监测、分布控制等场合有着重要的应用价值。 本论文运用单片机系统的设计方法,对单片机与PC机的串行通信系统进行设计,通过总体方案的分析与设计,确定了所采用单片机的型号,并明确硬件设计与软件设计的内容,硬件设计方面需要对单片机控制系统的硬件电路,如时钟电路、复位电路进行设计,串口部分确定了以定时器T1工作在方式2作为波特率发生器,单片机与PC机采用了标准的RS-232C接口进行连接,其中存在着电平转换电路的设计,利用了PROTEL99SE软件进行通信系统硬件电路原理图的绘制,并生成报表。软件设计方面,利用VB的MSComm控件进行串口通信软件的开发,根据系统的功能要求,利用汇编程序进行单片机收发数据的程序编制,利用51汇编集成开发环境和STC-ISPV13下载型编程器对单片机汇编程序进行烧录。在系统软硬件调试的过程中,采用AT89C51单片机试验开发板进行功能测试。最后进行分析,验证系统的可行性。 关键词:PC机与单片机的串行通信;VB程序设计;AT89C51实验板

基本串口通信程序设计

基本串口通信程序设计 实验要求: 用TC对计算机的串口进行编程,并作一个简单的串口查询通讯程序。 实验方案: 用RS-232串口通讯线将两台计算机A、B的串口相连。 实验步骤: 1、首先对计算机串口通讯控制芯片8250的控制寄存器进行初始化和设置; 2、对计算机B的串口发送一个数据前,查询计算机A的串口的发送移位寄存器是否为空,如果是则发送数据,如果为否则继续查询,直到条件成立;执行完发送指令后,再次查询计算机A的口的发送移位寄存器是否为空,如果是则结束发送;如果为否,则继续查询,直到条件成立。 3、从计算机A的串口接受刚才从计算机B的串口发送的数据前,先查询计算机A的口的接收数据标志位是否为1,如果是则表示计算机A的口接收数据准备就绪,执行接收指令,即从计算机A的口读入数据,若否则表示没有准备好接收,继续查询计算机A的口的接收数据标志位,直到为1;接收完数据后,再次查询计算机A的串口的接受寄存器是否为空的标志位的状态,如果为1则程序转入计算机B的串口的数据发送程序;如果否,则继续查询等待,直到接收。 实验内容: 1.在COMDEBUG中针对串口通信各寄存器进行设置,掌握各寄存器在串口通信中 的作用及各参数的含义。 Com1口中的10各可编程寄存器 地址寄存器名称备注3F8H 发送保持寄存器(THR)DLAB=0 3F8H 接收缓冲寄存器(RBR)DLAB=0 3F8H 波特率因子寄存器[低](DLL)DLAB=1 3F9H 波特率因子寄存器[高](DLM)DLAB=1 3F9H 中断允许寄存器(IER)DLAB=0 3FAH 中断识别寄存器(IIR) 3FBH 线路控制寄存器(LCR) 3FCH Modem控制寄存器(MCR) 3FDH 线路状态寄存器(LSR) 3FEH Modem状态寄存器(MSR) 注:com1口的基地址为:3F8; com2口的基地址为:2F8。 在上表中,10个可编程寄存器,使用了7个地址,其中部分寄存器共用一个地址,由DLAB=0/1来区分,在DLAB=1,用于设定通讯所需的波特率; 8250的控制寄存器控制/状态字: 1)接收缓冲寄存器(RBR)和发送保持寄存器(THR) RBR暂存从线路上接收到的有效字符,等待本地读取。THR暂存等待发向线路的数据。它们共用同意I/O地址,在半双工工作环境下,互不干扰。 2)中断识别寄存器(IIR)和中断允许寄存器(IER)

相关主题
文本预览
相关文档 最新文档