串口通讯

串口通讯
串口通讯

串口通信的基本知识概念(232 422 485)

串口通信的基本概念: 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手?

1,什么是串口

串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线

Universal Serial Bus或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。

串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)

的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它

很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总

常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配:

a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如

300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采

样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准 ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。

c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在

传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现

了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同

步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输

率同时也越慢。

d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据

位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数

据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑

高或者逻辑低校验。这样使得接收设备能够知道一个位的状态,有机会判断是否有噪

声干扰了通信或者是否传输和接收数据是否不同步。

2,什么是RS-232?

RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。可用于许多

用途,比如连接鼠标、打印机或者Modem,同时也可以接工业仪器仪表。用于驱动和连线的改进,实际应用中RS-232的传输长度或者速度常常超过标准的值。RS-232只

限于PC串口和设备间点对点的通信。RS-232串口通信最远距离是50英尺。

\ 1 2 3 4 5 / \ 6 7 8 9 / -------

从计算机连出的线的截面。 RS-232针脚的功能:数据:

TXD(pin 3):串口数据输出 RXD(pin 2):串口数据输入握手:

RTS(pin 7):发送数据请求 CTS(pin 8):清除发送 DSR(pin 6):数据发送就

绪 DCD(pin 1):数据载波检测 DTR(pin 4):数据终端就绪地线:

GND(pin 5):地线其他

RI(pin 9):铃声指示

3,什么是RS-422?

RS-422(EIA RS-422-A Standard)是Apple的Macintosh计算机的串口连接标准。

RS-422使用差分信号,RS-232使用非平衡参考地的信号。差分传输使用两根线发送

和接收信号,对比RS-232,它能更好的抗噪声和有更远的传输距离。在工业环境中更好的抗噪性和更远的传输距离是一个很大的优点。

4,什么是RS-485?

RS-485(EIA-485标准)是RS-422的改进,因为它增加了设备的个数,从10个增加

到32个,同时定义了在最大设备个数情况下的电气特性,以保证足够的信号电压。有了多个设备的能力,你可以使用一个单个RS-422口建立设备网络。出色抗噪和多设备

能力,在工业应用中建立连向PC机的分布式设备网络、其他数据收集控制器、HMI或者其他操作时,串行连接会选择RS-485。RS-485是RS-422的超集,因此所有的RS-422设备可以被RS-485控制。RS-485可以用超过4000英尺的线进行串行通行。

DB-9 引脚连接

------------- \ 1 2 3 4 5 / \ 6 7 8 9 / -------

从计算机连出的线的截面。

RS-485和RS-422的引脚的功能

数据:TXD+(pin 8),TXD-(pin 9),RXD+(pin 4),RXD-(pin 5)握手:

RTS+(pin 3),RTS-(pin 7),CTS+(pin 2),CTS-(pin 6)地线:

GND (pin 1)

5,什么是握手?

RS-232通行方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须

对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对

于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。在这一部分,我

们讨论三种最常用的RS-232握手形式:软件握手、硬件握手和Xmodem。

a,软件握手:我们讨论的第一种握手是软件握手。通常用在实际数据是控制字符的情况,类似于GPIB使用命令字符串的方式。必须的线仍然是三根:Tx,Rx和地线,因

为控制字符在传输线上和普通字符没有区别,函数SetXModem允许用户使能或者禁止用户使用两个控制字符XON和OXFF。这些字符在通信中由接收方发送,使发送方暂停。

例如:假设发送方以高波特率发送数据。在传输中,接收方发现由于CPU忙于其他工作,输入buffer已经满了。为了暂时停止传输,接收方发送XOFF,典型的值是十进制19,即十六进制13,直到输入buffer空了。一旦接收方准备好接收,它发送XON,典型的值是十进制17,即十六进制11,继续通信。输入buffer半满时,LabWindows发送XOFF。此外,如果XOFF传输被打断,LabWindows会在buffer达到75%和90%

时发送XOFF。显然,发送方必须遵循此守则以保证传输继续。

b,硬件握手:第二种是使用硬件线握手。和Tx和Rx线一样,RTS/CTS和DTR/DSR

一起工作,一个作为输出,另一个作为输入。第一组线是RTS(Request to Send)和CTS(Clear to Send)。当接收方准备好接收数据,它置高RTS线表示它准备好了,

如果发送方也就绪,它置高CTS,表示它即将发送数据。另一组线是DTR

(Data Terminal Ready)和DSR(Data Set Ready)。这些现主要用于Modem通信。

使得串口和Modem通信他们的状态。例如:当Modem已经准备好接收来自PC的数据,它置高DTR线,表示和电话线的连接已经建立。读取DSR线置高,PC机开始发

送数据。一个简单的规则是DTR/DSR用于表示系统通信就绪,而RTS/CTS用于单个

数据包的传输。

在LabWindows,函数SetCTSMode使能或者禁止使用硬件握手。如果CTS模式使能,LabWindows使用如下规则:当PC发送数据:

RS-232库必须检测CTS线高后才能发送数据。

串口通信测试方法

串口通信测试方法 LELE was finally revised on the morning of December 16, 2020

串口通信测试方法 1关于串口通信的一些知识: RS-232C是目前最常用的串行接口标准,用来实现计算机和计算机之间、计算机和外设之间的数据通信。 在PC机系统中都装有异步通信适配器,利用它可以实现异步串行通信。而且MCS-51单片机本身具有一个全双工的串行接口,因此只要配以电平转换的驱动电路、隔离电路就可以组成一个简单可行的通信接口。 由于MCS-51单片机的输入和输出电平为TTL电平,而PC机配置的是RS-232C 标准串行接口,二者电气规范不一致,因此要完成PC机与单片机的数据通信,必须进行电平转换。 注明:3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: 2实现串口通信的三个步骤: (1)硬件连接 51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 使用MAX232串口通信电路图(9孔串口接头) (2)串行通信程序设计 ①通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC机与单片机之间进行通信,在设计过程中,有如下约定: 0x31:PC机发送0x31,单片机回送0x01,表示选择本单片机; 0x**:PC机发送0x**,单片机回送0x**,表示选择单片机后发送数据通信正常; 在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。 ②串行通信程序设计主要有微机发送接收程序和单片机发送接收程序,微机上的发送和接收程序主要采用计算机高级语言编写,如C语言,因为了能够在计算机端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里利用如下图标的一个免费计算机串口调试软件,故而这一块计算机通信的程序可不写!

RS232串口通信详解

RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程,单片机晶振,RS485,RS422) 通信原理知识2010-01-03 20:53 阅读1 评论0 字号:大中小RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程,单片机晶振,RS485,RS422) 串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 信号方向来 9芯 缩写描述 自 1调制解调器CD载波检测 2调制解调器RXD接收数据 3PC TXD发送数据 4PC DTR数据终端准备好 5GND信号地 6调制解调器DSR通讯设备准备好 7PC RTS请求发送 8调制解调器CTS允许发送 9调制解调器RI响铃指示器

两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。 --------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: --------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。 b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一

C#和232串口通信方法

本例程主要讲解使用C#,实现与232串口通信。达到采集串口数据,监控,可视化处理等。 一.概述 在Visual Studio 中编写串口通讯程序,一般都使用MicrosoftCommunicationControl(简称MSComm)的通讯控件,只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。但在技术广泛应用的今天,Visual 没有将此控件加入控件库,所以人们采用了许多方法在Visual 来编写串口通讯程序:第一种方法是通过采用Visual Studio 中原来的MSComm 控件这是最简单的,最方便的方法,但需要注册;第二种方法是采用微软在.NET 推出了一个串口控件,基于.NET的P/Invoke调用方法实现;第三种方法是自己用API写串口通信,虽然难度高,但可以方便实现自己想要的各种功能。 现在微软推出了最新版本的Visual Studio 2005开发工具,可以不再采用第三方控件的方法来设计串口通讯程序。NET Framework 类库包含了SerialPort 类,方便地实现了所需要串口通讯的多种功能,为了使MSComm编程方法快速转换到以SerialPort类为核心的串口通讯的设计方法,本文着重讨论了Visual Studio 的MSComm控件和SerialPort 类设计方法的异同点。 二.SerialPort常用属性、方法和事件 1.命名空间 命名空间包含了控制串口重要的SerialPort类,该类提供了同步I/O 和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问,所以在程序代码起始位置需加入Using 。 2.串口的通讯参数 串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位),在MSComm中相关的属性是CommPort和Settings。SerialPort类与MSComm有一些区别: a.通讯端口号

常用通讯测试工具使用

常用通讯测试工具 鉴于很多MCGS用户和技术人员对通讯测试工具并不很熟悉,本文档将针对实际的测试情况,对串口、以太网通讯调试过程中所涉及到的常用的测试软件进行相关的讲解。 1. 串口测试工具: 串口调试工具:用来模拟上下位机收发数据的串口工具,占用串口资源。如:串口调试助手,串口精灵,Comm等。 串口监听工具:用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。如:PortMon,ComSky等。 串口模拟工具:用来模拟物理串口的操作,其模拟生成的串口为成对出现,并可被大多数串口调试和监听软件正常识别,是串口测试的绝好工具。如:Visual Serial Port等。 下面将分别介绍串口调试助手、Comm、PortMon和Visual Serial Port的使用。

1.1. 串口调试助手: 为最常用的串口收发测试工具,其各区域说明及操作过程如下: 串口状态 打开/关闭串口 十六进制/ASCII 切换 串口数据 接收区 串口参数 设置区 串口数据 发送区 串口收发计数区 发送数据功能区 保存数据功能区 操作流程如下: ? 设置串口参数(之前先关闭串口)。 ? 设置接收字符类型(十六进制/ASCII 码) ? 设置保存数据的目录路径。 ? 打开串口。 ? 输入发送数据(类型应与接收相同)。 ? 手动或自动发送数据。 ? 点击“保存显示数据”保存接收数据区数据到文件RecXX.txt。 ? 关闭串口。 注:如果没有相应串口或串口被占用时,软件会弹出“没有发现此串口”的提示。

1.2. PortMon 串口监听工具: 用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源, 但在进行监听前,要保证相应串口不被占用,否则无法正常监听数据。 连接状态 菜单栏 工具栏 截获数据显示区 PortMon 设置及使用: 1). 确保要监听的串口未被占用。 如果串口被占用,请关闭相应串口的应用程序。比如:要监视MCGS 软件与串口1设备通讯,应该先关闭MCGS 软件。 说明:PortMon 虽不占用串口资源,但在使用前必须确保要监听的串口未被占用,否则无法进行监视。 2). 运行PortMon,并进行相应设置。 ? 连接设置: 在菜单栏选择“计算机(M)”->“连接本地(L)”。如果连接成功,则连接状态显示为“PortMon 于\\计算机名(本地)”。如下图:

串口通信基本接线方法要点

串口通信基本接线方法 龚建伟2001.6.20 目次:1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法 3.串口调试中要注意的几点 目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连,以回答前段网友的咨询。 1.DB9和DB25的常用信号脚说明 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 ?同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; ?两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)

上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战 百胜。 3.串口调试中要注意的几点: ?不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; ?线路焊接要牢固,不然程序没问题,却因为接线问题误事; ?串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; ?强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

Qt编写串口通信程序

Qt编写串口通信程序图文详解 (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自己改动。) 在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类。我们可以去 https://www.360docs.net/doc/0210823118.html,/projects/qextserialport/files/ 进行下载,也可以去下载我上传到网上的: https://www.360docs.net/doc/0210823118.html,/bbs/read.php?tid=22847 下载到的文件为:qextserialport-1.2win-alpha.zip 其内容如下图: 我们在windows下只需要使用其中的6个文件: qextserialbase.cpp和qextserialbase.h,qextserialport.cpp和qextserialport.h,win_qextseri alport.cpp和win_qextserialport.h 如果在Linux下只需将win_qextserialport.cpp和win_qextserialport.h 换为posix_qextserialpo rt.cpp和posix_qextserialport.h即可。 第一部分: 下面我们将讲述编程的详细过程,这里我们先给出完整的程序,然后到第二部分再进行逐句分析。 1.打开Qt Creator,新建Qt4 Gui Application,工程名设置为mycom,其他使用默认选项。(注意:建立的工程路径不能有中文。) 2.将上面所说的6个文件复制到工程文件夹下,如下图。

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.360docs.net/doc/0210823118.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

串口通信实验

实验报告(附页) 一、实验内容 1、串口通信设置: 波特率为115200bps, 数据位为8位,停止位为1位; 2、按键传输数据到串口助手显示; (1)按1,串口显示:“This is Key 1”; D5亮 (2)按2,串口显示:“This is Key 2”; D6亮 (3)按3,串口显示:“This is Key 3”; D7亮 (4)按4,串口显示:“This is Key 4”; D8亮 (5)按“*”Key ,串口显示“All LEDs is Closed” ; 灯全灭; (6)按其它Key,串口显示:”Wrong Key” 3、通过串口小肋手,向实验设备发送信息: 发送字符:”D5”、”D6”、”D7”、”D8” ,则对应的D5、D6、D7、D8亮;若发送“5”、“6”、“7”、“8”则对应的D5、D6、D7、D8灭,如发送其它字符,则在串口助手中显示:“Error Code”; 二、实验方法 (1)利用参考代码构建工程。 (2)编写实验要求的实现实验要求的功能。 (3)连接实验箱,写入程序,测试代码。 三、实验步骤 1)正确连接JLINK 仿真器到PC 机和stm32 板,用串口线一端连接STM32 开发板,另一端连接PC 机串口。 2)用IAR 开发环境打开实验例程:在文件夹05-实验例程\第2 章\2.3-uart 下双击打开工程uart.eww,Project->Rebuild All 重新编译工程。 3)将连接好的硬件平台通电(STM32 电源开关必须拨到“ ON”),接下来选择Project->Download and debug 将程序下载到STM32 开发板中。4)下载完后可以点击“Debug”->“Go”程序全速运行;也可以将STM32 开发板重新上电或者按下复位按钮让刚才下载的程序重新运行。 5)通过串口小助手检验实验结果 四、实验结果 Main函数 #include"stm32f10x.h"

串口通信的接线方法

目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422、RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1、DB9和DB25的常用信号脚说明 2、RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 图2 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。 3、串口调试中要注意的几点: 不同编码机制不能混接,如RS232C不能直接与RS422接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; 线路焊接要牢固,不然程序没问题,却因为接线问题误事;

串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; 强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 RS232C标准串口接线方法 (第二版) 检验仪器与微机的通讯主要是以RS232C标准接口为主,而串口的接线方法也有一定的标准,在此谈谈几种常用的串口接法,仅作参考: 一、标准接法 1、9对9(包括9针对9孔,9孔对9孔,9针对9针): 说明:以下的孔、针指串口线两端的串口,不过2、3有可能不交换 2-------------3 3-------------2 4-------------6 5-------------5 6-------------4 7-------------8 8-------------7 2、9对25(包括9孔对25孔,9孔对25针) 2-------------3 (备注:2、3有可能不交换) 3-------------2 4-------------6 5-------------7 6-------------20 7-------------5 8-------------4

Java串口通信程序(程序及注释) 可编译运行

Java的串口通信程序 首先需要到到sun主页下载串口通信的包,因为一般的jrd中不含有这个包的,有点补丁的意思。(CSDN上也有)。解压缩,为了使Java Communications API能够正确的与Windows系统交互,需要几个小的技巧。下面是三个很重要的文件,你可以从Sun的网站上下载得到 comm.jar win32com.dll https://www.360docs.net/doc/0210823118.html,m.properties 对于JVM来说,要正确的识别串口,将这几个文件放在系统中合适的位置使很重要的。 comm..jar应该放在以下目录中 %JAVA_HOME%/lib %JAVA_HOME%/jre/lib/ext win32com.dll应该放在以下目录中 %windir%system32 https://www.360docs.net/doc/0210823118.html,.properties应该放在以下目录中 %JAVA_HOME%/lib %JAVA_HOME%/jre/lib 你可以通过编译和运行Sun的例程来验证串口是否可以使用了。 JBuilder中安装安装Java Communication API (以下在JBuilder 2006中测试通过) 如果你使用JBuilder,那么还需要为JBuilder配置API。 一般来说,根据你的JBuilder配置,你也许需要将win32com.dll和 https://www.360docs.net/doc/0210823118.html,.properties安装到相应的目录中,可以参照上述的目录。例如,如果你使用JBuilder附带的JVM的话,你也许需要将win32com.dll和 https://www.360docs.net/doc/0210823118.html,.properties放到C:\Borland\JBuilder2006\jdk1.5的相应位置。

串口通讯通信协议技术

串口通讯—通信协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。 目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主要用于DEC公司的网络体系结构中。 一、物理接口标准 1.串行通信接口的基本任务 (1)实现数据格式化:因为来自CPU的是普通的并行数据,所以,接口电路应具有实现不同串行通信方式下的数据格式化的任务。在异步通信方式下,接口自动生成起止式的帧数据格式。在面向字符的同步方式下,接口要在待传送的数据块前加上同步字符。 (2)进行串-并转换:串行传送,数据是一位一位串行传送的,而计算机处理数据是并行数据。所以当数据由计算机送至数据发送器时,首先把串行数据转换为并行数才能送入计算机处理。因此串并转换是串行接口电路的重要任务。 (3)控制数据传输速率:串行通信接口电路应具有对数据传输速率——波特率进行选择和控制的能力。 (4)进行错误检测:在发送时接口电路对传送的字符数据自动生成奇偶校验位或其他校验码。在接收时,接口电路检查字符的奇偶校验或其他校验码,确定是否发生传送错误。 (5)进行TTL与EIA电平转换:CPU和终端均采用TTL电平及正逻辑,它们与EIA采用的电平及负逻辑不兼容,需在接口电路中进行转换。 (6)提供EIA-RS-232C接口标准所要求的信号线:远距离通信采用MODEM时,需要9根信号线;近距离零MODEM方式,只需要3根信号线。这些信号线由接口电路提供,以便与MODEM或终端进行联络与控制。 2、串行通信接口电路的组成 为了完成上述串行接口的任务,串行通信接口电路一般由可编程的串行接口芯片、波特率发生器、EIA 与TTL电平转换器以及地址译码电路组成。其中,串行接口芯片,随着大规模继承电路技术的发展,通用的同步(USRT)和异步(UART)接口芯片种类越来越多,如下表所示。它们的基本功能是类似的,都能实现

工业控制--串口通讯方法(精)

工业控制--串口通讯方法(WINAPI实现)介绍介绍工业控制领域利用串口和外围设备进行通讯。正文前言:总所周之,利用串口进行数据通讯在在通讯通讯领域重占有着重要的地位。利用RS232-RS485进行数据信号的采集和传递是VC 编程的又一大热点。串口通讯在通讯软件重有着十分广泛的应用。如电话、传真、视频和各种控制等。在各种开发工具中间,VC由于功能强大和灵活,同时也得到了Microsoft的最大支持,所以在一般进行涉及硬件操作的通讯编程重,大都推荐使用VC作为开发工具。然而工业控制串口通讯这个又不同于一般的串口通讯程序,因为控制外围设备传送的大都是十六进制数据(BYTE类型),所以,为了提高程序的运行稳定性,我们在编写程序进行通讯时可以不考虑传送BYTE类型数 据的工作。串口通讯目前流行的方法大概有两种:一是利用Microsoft提供的CMSCOMM控件进行通讯,不过现在很多程序员都觉应该放弃这种方式。二是利用WINAPI函数进行编程,这种编程的难度最高,要求你要掌握很多的API函 数。三是利用现在网络上面提供的一些串口通讯控件进行编写,比如CSerial类等。程序实现:我在经过许多的项目的开发和实践中发现,采用WIN API函数进行串口的开发能够给程序员很大的控件,并且程序运也很稳定。所以我将与串口接触的函数进行封装,然后在各个工程中进行调用,效果还是比较好的,现将各个函数和调用方法列举出来,希望对各位有所帮助。一、设置串口相关工作 #define MAXBLOCK 2048 #define XON 0x11 #define XOFF 0x13 BOOL SetCom(HANDLE &m_hCom, const char *m_sPort, int BaudRate, int Databit, CString parity, CString stopbit { COMMTIMEOUTS TimeOuts; ///串口输出时间超时设置 DCB dcb; ///与端 口匹配的设备 m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL; // 以重叠方式打开串口 if(m_hCom==INVALID_HANDLE_VALUE { AfxMessageBox("设置串口部分,串口打开失败"; /////重叠方式异步通信(INVALID_HANDLE_VALUE)函数失败。return FALSE; } SetupComm(m_hCom,MAXBLOCK,MAXBLOCK; //设置缓冲区memset(&TimeOuts,0,sizeof(TimeOuts; TimeOuts.ReadIntervalTimeout=MAXDWORD; // 把间隔超时设为最大,把总超时设为0将导致ReadFile立即返回并完成操作

PIC16f串口通信程序

#include #define INIT_OSC() OSCCON = 0x77 unsigned char error=0x00; //错误数据帧,丢弃 bit Q=0; //一次数据帧接收完成标志位unsigned char data; void interrupt isr(void) //接收中断处理 { unsigned char Temp; if(RCIF&&RCIE) { if(FERR)//监测是否有帧错误 { error=RCREG; } if(OERR) { CREN=0 ; CREN=1 ; //接收模块被复位重置,OERR清零} data=RCREG; //保存每一次接收到的数据 Q=1; } if(T0IF) //TIME0 { T0IF = 0; } else { if(RBIF ) { Temp = PORTB; RBIF = 0; } }

} void usart_init() //串口初始化 { INIT_OSC(); //InitPort(); INTCON=0 ; // 关闭所有的中断 TRISC6=0 ;//TX脚输出 TRISC7=1 ;//RX脚输入 RC6=1; RC7=1; //SPBRG=51;//波特率9600,6M时钟 SPBRG=51;//波特率9600,8M时钟 BRGH=1; //高速波特率 SYNC=0; SPEN=1; //异步串口工作方式 TXEN=1; //USART工作于发送器方式 TXIE=0; //发送不需要中断处理 RCIE=1; //接收需要中断处理 CREN=1; //激活接收器 PEIE = 1; GIE = 1; } void putch(unsigned char byte) //发送一个字节的数据{unsigned int t=0; TXREG = byte; for(t=0;t<50000;t++) { if(TRMT==1) { asm("nop"); break; } } } void main() //将上位机发送的数据通过串口显示{

java串口通讯程序

java串口通讯程序 1、下载java Communications api开发包。| 是Sun公司提供的,用于开发平台独立的通讯应用程序的扩展API。 2、将拷贝入C:\j2sdk1.4.2_04\bin 3、将拷贝入C:\j2sdk1.4.2_04\jre\lib\ext 4、将拷贝入C:\j2sdk1.4.2_04\jre\lib 5、编译文件 import .*; import .*; import .*; public class CommTest{ public static void main(String[] args){ SerialPort serialPort=null; DataOutputStream doutput=null; InputStream inputStream; CommPortIdentifier portId=null; String messageString="hello \n"; try{ portId=("COM1"); }catch(NoSuchPortException ne) { "ne"); (); } try{ serialPort=(SerialPort) ("TestComm", 5); OutputStream output = (); doutput=new DataOutputStream(output); inputStream = (); }catch(PortInUseException ex) { "ex"); (); }catch(IOException ie) { "ie"); (); //(); } try { (9600, , , ; } catch (UnsupportedCommOperationException e) {} } try { ()); } catch (IOException e) {}

串口通信测试方法

串口通信测试方法 1 关于串口通信的一些知识: RS-232C是目前最常用的串行接口标准,用来实现计算机和计算机之间、计算机和外设之间的数据通信。 在PC机系统中都装有异步通信适配器,利用它可以实现异步串行通信。而且MCS-51单片机本身具有一个全双工的串行接口,因此只要配以电平转换的驱动电路、隔离电路就可以组成一个简单可行的通信接口。 由于MCS-51单片机的输入和输出电平为TTL电平,而PC机配置的是RS-232C 标准串行接口,二者电气规范不一致,因此要完成PC机与单片机的数据通信,必须进行电平转换。 注明:3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片: 2 实现串口通信的三个步骤: (1)硬件连接 51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换。我们采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。 使用MAX232串口通信电路图(9孔串口接头) (2)串行通信程序设计 ①通信协议的使用 通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种

约定,通信双方才能明白对方的意图,以进行下一步动作。假定我们需要在PC 机与单片机之间进行通信,在设计过程中,有如下约定:

串口通信的基本知识

串口通信的基本知识 串口通信的基本概念 1,什么是串口? 2,什么是RS-232? 3,什么是RS-422? 4,什么是RS-485? 5,什么是握手? 1,什么是串口? 串口是计算机上一种非常通用设备通信的协议(不要与通用串行总线Universal Serial Bus 或者USB混淆)。大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS- 232口。同时,串口通信协议也可以用于获取远程采集设备的数据。 串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。 典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB 设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送的信息。比如,标准的ASCII 码是0~127(7位)。扩展的ASCII码是0~255(8位)。如果数据使用简单的文本(标准ASCII码),那么每个数据包使用7位数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。c,停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路

测试电脑的串口是否是好的 最完整最可靠的方法就是 连接一个真实的串口通信线 路(总5页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路,2 端用相应软件,如串口调试助手之类的,相互发送发送数据,看另外一端是否能正常接收! 当然,也可以简单的单台机器测试,即短接串口的 2、3 两针,用相应软件,如串口调试助手,发送数据,看能否回显发送的数据 串口测试工具使用说明之一——串口调试工具 回复 6|人气 1387|收藏|打印|推荐给版主 分享文章到: ye_w 个人主页给TA发消息加TA为好友发表于:2010-09-30 19:52:48 楼主 使用串口实现网络通讯,不仅仅需要熟悉控制双方的指令和相关的协议,而且还需要善于使用串口测试工具。在串口测试工具中,最常用的就是串口调试工具。这个串口调试工具网络上一大把,大家百度一下就能下载到(包括我逐步发布的调试工具,都不会提供资源,请大家直接去网络上查找),常用的包括:串口调试助手,串口精灵,Comm等。我也一直使用串口调试助手,下面就是用图形并茂的方式来介绍,请大家指出不足,以便共同进步。 串口调试助手,网络上的版本也有不少,我截2个不同版本的图,但本质没有区别 版本一 怎样测试串口和串口线是否正常? 一步:把串口线或者USB转串口线插到计算机上。 二步:打开串口调试助手 接着选择串口,串口线和USB转串口的端口号查看路径: 电脑上--右键--属性--硬件--设备管理器-端口(COM和LPT),点 开端口前面的+号查看即可。 注释:1、USB-SERIAL CH340(COM4)就是USB转串口的端口号 2、通讯端口(COM1)是计算机原来自带的端口号 第三步:设置串口调试助手(见下图) 1、串口:COM4是和串口线或者USB转串口线在上述路径中查看到的端口号。 2、发送的字符/数据:图片上输入的是59,你可以随便输入2位数字。 3、其余设置按照下图。

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;

用C编写的RS232串口通信程序

void main() { delayms(100); init(); //初始化系统 delayms(100); init_wdt(); //初始化看门狗 while(1) { while(!RI_0) //是否收到数据 { clr_wdt(); } RI_0=0; //清除接收中断标志 buffer=S0BUF; if(buffer==0x5a) //检测祯头0 start0=1; if(buffer==0x54) //检测祯头1 start1=1; if(buffer==0x5a) //检测祯尾0 end0=1; if(buffer==0xfe) //检测祯尾1 end1=1; if((start0==1)&(start1==1)) { buff[i]=buffer; //从祯头1开始存储数据 i++; } if((end0==1)&(end1==1)) //是否已经接收祯尾 { count=i; //数据长度为count个 i=1; if((buff[2]==0x03)&(count==107)) //是否422指令 { buff[0]=0x5a; //重填祯头0 buff[count-4]=0; //校验和清零 for(k=2;k<(count-4);k++) //计算校验和 { buff[count-4]+=buff[k]; } for(k=0;k

S0BUF=buff[k]; while(!TI_0); //等待发送完成 TI_0=0; //清除发送中断标志 } reset(); } else if((buff[2]==0x05)&(count==7)) //是否AD测试指令 { sendad(); reset(); } else if((buff[2]==0x18)&(count==7)) //是否发送时序信号指令 { sendpaulse(); reset(); } else //如果接收错误,则恢复各标志位为初始状态以便下次接收 { reset(); } } } } void reset() { start0=0; //祯头祯尾标志位清零 start1=0; end0=0; end1=0; for(k=0;k

相关文档
最新文档