串口通信程序设计
- 格式:doc
- 大小:1.37 MB
- 文档页数:28
摘要本文详细介绍了基于RS-485总线的单片机与多台单片机间的串行通信原理、实现方法和相应的通信硬件、软件设计。
该设计是由单片机与单片机组成的主从控制系统,其中单片机做为上位机对下位单片机是实现控制和监视功能。
它包括通信和控制两个功能模块。
单片机作为下位机在整个系统中属于从属地位,主要用来接收上位机的命令。
由于此通信的单片接口是RS232的9针接口,且下位机数目有限(32台)。
所以本设计采用了RS485总线以及RS232转RS485的协议芯片以满足长距离多机通信,本文讨论了总线接口转换、主从式通信协议设计方法,给出了采用中断式处理的通信过程流程图,并叙述了设计过程中必备的绘图软件Protel DXP的应用,以及编辑源代码软件keil uVision2的应用,实现了单片机对多个单片机组成采集终端的通信与管理。
关键词:单片机单片机RS-485 通信AbstractThe communication 、realized method and corresponding design of hardware and software between 单片and multiple MCUs based on RS-485 is described in detai in the article. This design instroduces a pincipal and subordinate control system which is composed of 单片and single chip. Divided from its function, it includes two parts: communication and control, in which 单片is used as master, and MCUs is used as slave so as to receive the single order from the master.The bus interface conversion and the design of master-slave communication protocol is introduced and The program flowchart of communication with interrupt process is also given. In the process of design, the use of unnecessary painter software and code editor software is depicted so that realize the communication and administration between 单片and multiple MCUs which composed collection terminal.Keywords: 单片MCUs RS-485 communication目录第一章绪论 (1)第二章课题实施方案 (2)2.1 系统硬件设计 (2)2.2 系统软件设计 (3)第三章硬件电路设计 (9)3.1 C51单片机结构 (9)一CPU结构 (10)二ROM存储器 (11)三I/O端口 (11)四定时器/计数器 (12)五中断系统 (13)3.1.2 51单片机引脚功能及其连接 (13)3.1.3 51 中断系统 (15)3.1.4 C-51的串行通信 (15)3.2.1串行接口RS232结构与引脚功能 (21)3.3 Protel DXP 2004原理图设计 (23)3.3.1 Protel 2004的基本操作 (23)3.3.2绘制原理图 (25)3.3.3制作芯片原理图库 (27)第四章软件电路设计 (30)4.1 系统的通信协议 (31)4.2 C51编程实现单片机与单片机之间的串行通信 (31)4.3 Windows集成开发环境uVision2 (35)4.3.1启动uVision2 (35)4.3.2创建程序 (36)总结 (41)致谢 (42)参考文献 (43)第一章绪论单片机由于其具有控制功能强、设计灵活和性能价格比高的特点。
使用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。
学校logo[请输入论文题目]专业:[请输入专业]班级:[请输入班级]学生姓名:[请输入姓名]指导教师:[请输入指导教师]完成时间:2013年3月29日用VC 6.0实现串行通信的三种方法---- 摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
---- 在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。
依据不同的条件实现对串口的灵活编程控制是我们所需要的。
---- 在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。
串行通信程序开发环境为VC++ 6.0。
---- Windows下串行通信---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTA T,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。
以下将结合实例,给出实现串行通信的三种方法。
---- 实现串行通信的三种方法---- 方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。
例2 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms 的方波,采用中断方式,设系统时钟频率为12 MHz。
解:1、计算计数初值X:由于晶振为12 MHz,所以机器周期Tcy为1 s。
所以:N=t/ Tcy =10×10-3 / 1×10-6=10000X=65536-10000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中2、求T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;ORG 0000HLJMP MAIN ;跳转到主程序ORG 000BH ;T0的中断入口地址LJMP DVT0 ;转向中断服务程序ORG 0100HMAIN:MOV TMOD,#01H ;置T0工作于方式1MOV TH0,#0D8H ;装入计数初值MOV TL0,#0F0HSETB ET0 ;T0开中断SETB EA ;CPU开中断SETB TR0 ;启动T0SJMP $ ;等待中断DVT0:CPL P1.0 ;P1.0取反输出MOV TH0,#0D8H ;重新装入计数值MOV TL0,#0F0HRETI ;中断返回END•2、串行口方式1的发送和接收例7-4:89C51串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200b/s。
编写有关的通信程序。
解:7位ASCII码加1位奇校验共8位数据,故可采用串行口方式1。
89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时,P=1。
如果直接把P 的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。
因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。
•2、串行口方式1的发送和接收•双工通信要求收、发能同时进行。
收、发操作主要是在串行接口进行,CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器。
PC与PLC的串口通信及编程实现黄植功(广西师范大学物理与电子工程学院,广西 桂林 541004)摘 要:在自由口模式下,通信协议由用户自己的梯形图程序控制。
用户可以使用梯形图程序调用各种子程序,来进行接收中断、发送中断、发送指令(XMT)、接收指令(RCV)等通信控制操作。
研究了在自由端口模式下PC与S7-200型PLC之间的通信,并采用Visual Basic编程来实现上位机与下位机之间的通信。
关键词:Visual Basic;自由端口模式;PLC通信;串口通信中图分类号:TP312文献标识码:A文章编号:1003-7551(2007)03-0035-041 引言由于具有编程方法简单易学、功能强、性能价格比高、可靠性高、抗干扰能力强、体积小、能耗低、硬件配套齐全、设计调试安装维护方便等突出优点,可编程逻辑控制器(PLC)已经广泛地应用在发达国家所有的工业部门,主要应用在数字逻辑控制、运动控制、闭环过程控制、数据处理和联网通信等方面。
在联网通信方面,PLC与其他智能控制设备一起,可以组成“集中管理、分散控制”的分布式控制系统。
在这种工业控制系统中,为了避免通信各方争用通信线路,PC与PLC之间的通信一般采用主从方式,通常采用计算机(PC)作为上位机负责完成数据分析、处理和存储、设备状态显示和打印输出等功能以实现对分布在工业现场的被控制系统进行集中的实时监测与控制;PLC作为下位机使用,承担执行上位机的输出指令、现场数据采集和设备运转状态识别等任务。
本文研究了在自由端口模式下PC与S7-200型PLC之间的通信,并采用Visual Basic编程来实现上位机与下位机之间的通信。
2 PLC与PC的电缆连接和电缆的切换时间S7-200的通信接口为RS-485,PC可以采用RS-232通信接口,RS-232/PPI多主站电缆可以连接PC与S7-200型PLC,实现S7-200 CPU 与PC的通信。
由于使用RS-232/PPI电缆,因此在S7-200 CPU的用户程序中应考虑电缆的切换时间,切换时间因波特率的不同而不同,例如,如果采用9600bit/s的波特率,则电缆的切换时间为2ms,电缆上DIP开关设置为010,如果采用19200bit/s的波特率,则电缆的切换时间为1ms。
RS232串行通信一、任务描述⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅RS-232应用范围广泛、价格便宜、编程容易并且可以比其它接口使用更长的导线,随着USB端口的越来越普遍,将会出现更多的把USB转换成RS-232或其它接口的转换装置。
但是RS-232和类似的接口仍将在诸如监视和控制系统这样的应用中得到普遍的应用。
RS232标准采用的接口是9针或25针的D型插头,常用的一般是9针插头。
本任务是STC89C52串行口经RS232电平转换后,与PC机串行口相连。
PC机可使用串口调试应用软件如:“WINDOWS 超级终端”、“串口调试助手”、“串口精灵”等,实现上位机与下位机的通讯任务目标:本实验使用串行中断法接收和发送资料。
上位机发出指定字符,下位机收到后,加一(+1)运算后回传给PC机。
波特率设为4800。
二、任务资讯⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅为了完成任务目标,提供的资讯信息包括:实训装置的RS232串行通信电路、单片机串行口工作原理、RS232串行通信编程方法及C51通用编程。
1.串行通信电路及接线图1 RS232串口通信电路图2 电源指示2.RS232串行口工作原理当PC机与单片机进行通信时,PC机的RS232接口的逻辑电平为:逻辑1= -3 ~ -15V;逻辑0=3~15V。
51单片机的逻辑电平(TTL电平标准)为:逻辑1>2.0V,逻辑0<0.8V 。
为了能够使PC机和单片机正常通信,需要电平转换芯片MAX232(如上图)。
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
. .. 2011级通信工程 《基于ARM9嵌入式Linux系统开发原理与实践》课程设计报告
设计题目: 基于Linux的网络通信程序设计 XX学号: 王强 邓祖坤 陶晓明 学院: 工程技术学院
专业: 通信工程
班级: 2011级3班
指导教师: 方飞 . .. 2014年6月30日 题目:基于Linux的网络通信程序设计
一、设计题目及要求 1、设计题目 基于Linux的网络通信程序设计 2、设计要求 (1)基本要求 1) 使用linux网络编程技术设计网络通信程序; 2) 熟练使用编译工具GCC和调试工具GDB; 3) 实现主机与开发板之间的通信;
指导教师签名: 2014年 月 日 二、指导教师评语
指导教师签名: 2014年月 日 . .. 三、成绩 理论(60%): 分,作品(40%): 分,总分: 分。
验收盖章 2014年月日 .
.. 目 录 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 . .. 附录21
摘要 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所示。