当前位置:文档之家› 串口通信程序设计

串口通信程序设计

串口通信程序设计
串口通信程序设计

2011级通信工程

《基于ARM9嵌入式Linux系统开发原理与实践》课程设计报告

设计题目:基于Linux的网络通信程序设计

XX学号:

王强邓祖坤陶晓明

学院:工程技术学院专业:通信工程班级:2011级3班指导教师:方飞

2014年6月30日题目:基于Linux的网络通信程序设计

1 程序设计的基本原理与思路

2 1.1 MFC简介3

1.2 MSm控件简介4

1.2.1 事件驱动方式4

1.2.2 查询方式5

1.3 设计的基本思路5

2 程序设计与代码分析6 2.1 建立工程6

2.2 在工程中插入MSm控件7

2.3 利用ClassWizard定义CMSm类控制对象8

2.4 向对话框中添加发送数据和接收数据的编辑框9

2.5 添加串口事件消息处理函数Onm()11

2.6 “开始”——打开串口和设置串口参数13

2.7 “发送”按钮——发送数据15

2.8 相关控件的属性18

2.9 相关响应函数的建立18

3 总结19

参考文献20

摘要

Linux系统是一种自由的Unix类多用户、多任务的操作系统,可以运行在目前已知的PC机、ARMS、MIPS和PowerPC等多种计算机平台,已成为应用广泛、可靠性高、功能强大的计算机操作系统。Linux具有内核小、效率高、源代码开放等优点,还内含了TCP/IP网络协议,很适合在服务器领域使用,而服务器主要用途之一就是进行网络通信。随着计算机办公自动化处理技术的应用与推广、网络的不断普及,人们期待一种便捷、高效、环保、安全的网络通信方式。

本设计就是考虑到这一现状,基于Linux操作系统下的TCP/IP网络通信原理、多线程编程技术,使用linux编译工具GCC和调试工具GDB设计了一个网络通信程序,实现计算机与开发板之间的网络通信。

关键词:Linux系统;编译工具GCC;调试工具GDB

1 程序设计的基本原理与思路

本设计的基本原理是利用MFC应用程序以及Microsoftmunications Control控件的基本知识而设计的。Microsoft munications Control控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

1.1 MFC简介

MFC是Visual C++是核心。MFC类库将所有图形用户界面的元素如窗口、菜单、按钮等都以类的形式进行了封装,MFCAppWizard向导根据继承性利用MFC 派生出自己的类,并对Windows应用程序进行了分解,利用MFC派生类对应用程序重新进行组装,同时还规定了应用程序中各个MFC派生类对象之间的相互

联系,实现了标准Windows应用程序的功能,这就是向导生成的所谓MFC应用程序框架。每个MFC类都包括了一些函数,函数放到类中,符合C++编程方法,这些函数必须通过类定义对象才能使用。因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&MFC编制软件时的大量内在环节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便开发者编程为目的。因此就造成了MFC对类封装中的一定程度的的冗余和迂回,使开发者在开发过程中必定要付出一定代价,但这是可以接受的。

1.2 MSm控件简介

MSm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API 函数,而且在VC、VC++、Delphi等语言中均可使用。Microsoft munications Control (以下简称MSm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。

1.2.1 事件驱动方式

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者Carrier Detect (CD) 或Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用MSm 控件的Onm 事件捕获并处理这些通讯事件。Onm 事件还可以检查和处理通讯错误。在编程过程中,就可以在Onm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSm

控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSm 控件。

1.2.2 查询方式

查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查mEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

1.3 设计的基本思路

Windows应用程序要使用串口进行通信,必须在使用之前向Windows操作系统提出资源申请要求(打开串口),申请得到允许后要对串行端口相关参数进行配置(设置串口),配置好参数后进行数据传输(读写串口),通信完成后必须释放资源(关闭串口)。

程序模块图如图1.3.1所示。

打开串口设

退

出程序

图1.3.1 程序模块

知道了要做什么后,接下来就要部署该做些什么了:首先要解决的问题是弄清楚MSm控件与命令消息的名称类型和功能;其次是通过分析串行端口通信的具体过程,在通信过程中应用程序需要做哪些事情,以便在应用程序中加入对这些过程支持的代码;在对应用程序的流程有了大致的轮廓以后,再开始考虑程序框架和应用程序外观的设计;最后,也是最关键的就是编写实现通信的代码将通信程序的基本功能实现,紧接着就是程序的调试和完善。

2程序设计与代码分析

2.1 建立工程

打开VC++6.0,建立一个基于基本对话框的MFC应用程序SmTest的工程。

新建SmTest工程和SmTest工程初始界面如图2.1.1和图2.1.2所示。

图2.1.1 新建SmTest工程

图2.1.2 SmTest工程初始界面

2.2 在工程中插入MSm控件

在菜单栏中选择Project菜单下Add To Project子菜单中的“ponents and Control”选项,在弹出的对话框中双击Registered ActiveX Controls文件夹,则所有注册过的ActiveX控件出现在列表框中。选择Microsoft munications Control, version 6.0,单击Insert按钮将它插入到我们的Project中来。这时在ClassView视窗中就可以看到CMSm类了,并且在控件工具栏Controls中出现了图标,用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

向工程添加MSm控件和向对话框添加MSm控件如图2.2.1和图2.2.2所示。

图2.2.1 向工程添加MSm控件

图2.2.2 向对话框添加MSm控件2.3利用ClassWizard定义CMSm类控制对象

点击鼠标右键打开ClassWizard->Member Viariables选项卡,选择SerialPortTestDlg类,为IDC_MSM1添加控制变量:m_ctrlm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "msm.h" //}}AFX_INCLUDES。

定义CMSm类控制对象如图2.3.1所示。

图2.3.1 定义CMSm类控制对象

2.4 向对话框中添加发送数据和接收数据的编辑框

向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。然后将接收编辑框的Properties->Styles中把Miltiline 和Vertical Scroll属性选上,在发送编辑框若想输入多行文字,也可选上Miltiline。

添加发送和接收数据编辑框如图2.4.1所示。

图2.4.1 添加发送和接收数据编辑框

再打开ClassWizard->Member Viariables选项卡,选择CSmTestDlg类,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明:m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。

定义两编辑框变量类型如图2.4.2所示。

图2.4.2 定义两编辑框变量类型

2.5 添加串口事件消息处理函数Onm()

打开ClassWizard选择Message Maps,选择类CSmTestDlg,选择IDC_MSM1,双击消息Onm,将弹出的对话框中将函数名改为OnOnmMsm1。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnOnmMsm1()函数加入相应的处理代码就能实现自已想要的功能了。

添加串口事件消息处理函数如图2.5.1所示。

图2.5.1 添加串口事件消息处理函数

相关代码如下:

void CSmTestDlg::OnOnmMsm1()

{

// TODO: Add your control notification handler code here

VARIANT variant_inp;

COleSafeArray safearray_inp;

LONG len,k;

BYTE rxdata[2048]; //设置BYTE数组An 8-bit integerthat is not signed. CString strtemp;

if(m_ctrlm.GetmEvent()==2) //事件值为2表示接收缓冲区内有字符{

////////以下你可以根据自己的通信协议加入处理代码

variant_inp=m_ctrlm.GetInput(); //读缓冲区

safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量

len=safearray_inp.GetOneDimSize(); //得到有效数据长度

for(k=0;k

safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组

for(k=0;k

{

BYTE bt=*(char*)(rxdata+k); //字符型

strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放

m_strRXData+=strtemp; //加入接收编辑框对应字符串

}

}

UpdateData(FALSE); //更新编辑框内容

}

2.6 “开始”——打开串口和设置串口参数

可以在需要的时候打开串口,在程序中做一个“开始”按钮,在该按钮的处理函数中打开串口和设置串口参数。在主对话框的CSmTestDlg:: OnButtonStart ()打开串口。

添加“开始”按钮如图2.6.1所示。

图2.6.1 添加“开始”按钮添加“开始”按钮响应函数如图2.6.2所示。

图2.6.2 添加“开始”按钮响应函数

加入如下代码:

void CSmTestDlg::OnButtonStart()

{

// TODO: Add your control notification handler code here

if(m_ctrlm.GetPortOpen())

m_ctrlm.SetPortOpen(FALSE);

m_ctrlm.SetmPort(1); //选择1

if( !m_ctrlm.GetPortOpen())

m_ctrlm.SetPortOpen(TRUE);//打开串口

else

AfxMessageBox("cannot open serial port");

m_ctrlm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位

m_ctrlm.SetInputMode(1); // 以二进制方式检取数据

m_ctrlm.SetRThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的Onm事件

m_ctrlm.SetInputLen(0); //设置当前接收区数据长度为0

m_ctrlm.GetInput();//先预读缓冲区以清除残留数据

}

2.7“发送”按钮——发送数据

先为“发送”按钮添加一个单击消息即DBN_CLICKE处理函数,打开ClassWizard->Message Maps,选择类CSmTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数。

添加“发送”按钮如图2.7.1所示。

图2.7.1 添加“发送”按钮

添加“发送”按钮响应函数如图2.7.2所示。

图2.7.2添加“发送”按钮响应函数

在函数中添加如下代码:

void CSmTestDlg::OnButtonManualsend()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE); //读取编辑框内容

m_ctrlm.SetOutput(COleVariant(m_strTXData));//发送数据}

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/d812895266.html,/Jolt/javacomm20-win32.zip。 ?如果是非Windows平台,请到Sun网站选择其他版本下载。地址如下: https://www.doczj.com/doc/d812895266.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/d812895266.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/d812895266.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/d812895266.html,技术广泛应用的今天,Visual S https://www.doczj.com/doc/d812895266.html,没有将此控件加入控件库,所以人们采用了许多方法在Visual https://www.doczj.com/doc/d812895266.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/d812895266.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)

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