串口通讯方法的三种实现

串口通讯方法的三种实现
串口通讯方法的三种实现

串口基本信息

用一台电脑实验串口自发自收,实验前要将串口(以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两种连接器,用户可以国家使用的具体机器选择相应的连接器。

一个串口通讯类在https://www.360docs.net/doc/5d10950998.html,/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应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。计算机和单片机(如MSC—51)都具有串行通信口,可以设计相应的串El通信程序,完成二者之间的数据通信任务。

1串口通讯原理

串口通信的原理非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。比如IEEE488定义并行通行状态时,规定设备线总常不得超过20米,并且任意两个设备间的长度不得超过2米;而对于串口而言,长度可达1200米。

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

2串口通讯实现

在.net平台下使用C#语言实现串口通信的方法主要有三种:第一种方法是采用VB6.0中提供的MSComm控件,这种方法编程简单.但MSComm控件在使用前需要在系统中注册;第二种方法是采用微软在.net2.0及其以后版本提供的内置的串口操作类--System.IO.SerialPort,使用简单,但欠灵活;第三种方法是Windows的API函数,虽然编程难度高,但这种方法可以清楚地掌握串口通信的机制,并且高效、自由、灵活。

无论那种采用方式实现串口通讯,都需要通过以下四个步骤来完成:

1)打开串口

MSComm控件是通过设置PortOpen属性值来打开和关闭串口.具体语法为:MSComm. PortOpen=True/False.

SerialPort类则是调用类的Open()和Close()方法来实现串口的打开和关闭。

API函数是通过CreateFile来打开串口.因为在Win32系统中,串口被看作一个文件,使用与文件相同的操作方式进行操作。

2)配置串口

在打开通讯设备句柄后,需要对串口进行一些初始化配置工作。串口通讯最常用的参数就是通讯端口号及通讯格式(波特率、数据位、停止位和校验位)。

在MSComm中,通过属性Comport和Settings来进行端口号和通讯格式设置,例如:https://www.360docs.net/doc/5d10950998.html,port =1,设定通讯端口为Com1,MSComm1.Settings=”9600,n,8,1”,设置波特率9600,无校验,8位数据位,1位停止位。

SerialPort类是通过PortName属性获取或设置通信端口,并分别通过BaudRate、Parity、DataBits、StopBits 属性来对通讯格式中的波特率、数据位、停止位和校验位进行设置,其中的Parity和StopBits属性都是枚举类型,Parity类型中枚举了Odd(奇)、Even(偶)、Mark、None、Space共5个枚举成员.StopBits类型中枚举了None、One、OnePointFive、Two共4个枚举成员。

使用API,则需要通过一个DCB结构(包含了诸如波特率、数据位数、奇偶校验和停止位数等信息)来进行,将串口的几个重要参数如波特率、数据位、停止位、校验位改成符合实际设计要求的值。3)读写串口

设置工作完成后,对串口进行读写操作。

MSComm控件通过Input属性返回和删除接收缓冲区中的字符,通过Output属性将字符串写入发送缓冲区。

SerialPort类则是通过调用重载的Write和WriteLine方法发送数据,其中WriteLine可发送字符串并在字符串末尾加入换行符。

SerialPort类对于串口缓冲区的读取方法有许多,其中除了ReadExisting和Readto.之外,其余的方法都是同步调用,即,方法调用时,线程将被阻塞,直到缓冲区有相应的数据或读超时(大于ReadTimeOut 属性设定的时间值后,引发ReadExisting异常)。

API函数是分别通过ReadFile和Writefile对串口进行读/写操作。

4)关闭串口

串口是非共享资源,某应用程序打开串行口后,即独占该资源,使其它应用程序无法再访问,直到该应用程序释放串口。所以对串口操作完成后,一定要关闭串口。

MSComm控件通过将PortOpen属性值设置为False来关闭串口。

SerialPort类则是调用Close()方法来关闭串口。

API函数是通过使用CloseHandle()来关闭串口,该函数唯一参数即为用CreateFile打开串口时所创建的句柄。

3结束语

在.NET平台下,通过SerialPort类可以实现与MSComm控件相同的串口通讯程序,比起复杂的API,SerialPort类使用方便,开发快速.在今后工业控制中.SerialPort类必将广泛地应用于串口通讯程序的设计中。

MSComm控件

串行端口的本质功能是作为CPU和串行设备间的编码转换器。在发送数据时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。利用微机RS-232口进行串行通信的一般步骤如下:

(1)打开串口在32位Windows中,串口和其他通信设备都被作为文件进行处理,在使用前必须先将其打开。

(2)配置串口串口配置主要包括波特率、数据位数、停止位数、奇偶校验、发送缓冲区大小、接收缓冲区大小等。

(3)超时设置在串口通信时如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态,为避免这种情况发生,必须设置串口读写操作的等待时间。若等待时间超过后,

串口的读写操作将被主动放弃。

(4)数据读写对串口的读写操作可采用查询、同步、异步和事件驱动等方式。

(5)关闭串口在串口使用完后应将其关闭,否则其他应用程序就无法打开或使用它。

VS2003下要先注册mscomm32.ocx组件才能使用。在.net2003光盘下面有目录ExtrasWB6Controls,此目录中有一个包含所有VB6.0控件授权信息的注册表文件:VB6Controls.reg。我们通过RegEdit.exe将VB6Controls.reg中的控件注册信息添加到注册表中,从而注册这些控件。如果机器上已经安装过Visualc++6.0就不用上述步骤了

1常用控件属性

Vc++.net中控件Mscomm32的主要属性有:

CommPort属性,设置/返回通信端口号;

Settings属性,设置/返回波特率、奇偶校验、数据位和停止位参数;

PortOpen属性,设置/返回通信端口的状态(开或关)。

InBuffercount属性,返回接受缓冲区中等待的字符数,也可以用他来清除输入缓冲区。

InBufferSize属性,设置并返回接受缓冲区的字节数。

Input属性,返回并删除接收缓冲区中的数据流。

OutBufferCount属性,返回在传输缓冲区中等待的字符数。也可以用它来清除输出缓冲区。

OutBufferSize属性,以字节的形式设置并返回传输缓冲区的大小。

Output属性,将数据写入发送缓冲区

Rthrehold属性,设置并返回Rthrehold数值;

InputMode属性,设置/返回Input属性所检取数据的类型;

CommEvent属性,返回最近的通信事件或错误

2通信方式的选择

Mscomm32控件提供了两种处理通信问题的方法:事件驱动法和查询法。

事件驱动法利用OnComm事件捕获并处理通信中发生的事件,实时性强,可靠性高。每当有新字符到达,或端口状态改变,或发生错误时,Mscomm控件将触发OnComm事件,应用程序在捕获该事件后,通过检查Mscomm控件的CommEvent属性可获知所发生的事件(包括错误)并采取相应的操作。

查询法适合于应用程序较小、实时性要求不是很高的系统。在这种情况下,每当应用程序执行完某一串口操作后,将不断检查Mscomm控件的CommEvent属性以检查执行结果或者检查某一事件是否发生

基于API 的串行口通信软件设计

串行口的硬件使用 3 线结构,即: RXD,TXD 和GND, 在开发PC 上位机的通信程序中

常用的编程语言可分为3类: 1) 直接面向底层硬件系统的汇编语言; 2) DOS 环境下的高级编程语言如C 语言; 3) Windows 环境下的高级编程语言,如Visual C+ + 6. 0, 而这3种方式中Windows 环境下的串口编程以其设备无关性、可移植性以及界面友好而得到广泛应用, 开发Windows 环境下的通信程序,主要有以下两种方式:

1) 利用Windows API ( Application Program Interface 用户程序接口) 函数

2) 利用ActiveX 控件, MSComm 控件

对于简单的串行口操作MSComm 控件使用方便、控制简单,但是对于较为复杂的串行口操作,它不够灵活,它常用在对话框中,这也限制了它的使用。基于API 的串口编程,其功能强大,控制手段更为灵活配合Win32的重叠I/O 操作和多线程设计就可以编写出高效、灵活的通信程序,

串口的打开与初始化

串口的打开是通过Win32的文件操作函数CreateFile 完成的, 该函数的原型如下,

Handle CreateFile (

LPCTSTR lpFileName //指向文件名称

DWORD dwDeSiredAcceSS //存取模式( 读或写)

DWORD dwShareMode //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributeS //指向安全属性结构

DWORD dwCreationDiSpoSition //创建方式

DWORD dwFlagSAndAttributeS //文件属性和标志

Handle hTemplateFile //临时文件句柄通常为NULL)

如果调用成功, 则该函数返回文件的句柄, 否则, 返回INV ALID_HANDLE_V ALUE, 注意在打开一个通信端口的时候, 应该以独占方式打开, 即dwShareMode 应该为O, 另外, 应该指定存取模式为GENERIC_READ|GENERIC_WRITE, 允许对端口读和写, 因为串口是存在的, 所以,dwCreationDisposition 应该为OPEN_EXISTING, 此外, 应该指定FILE_ATTRIBUTE_NORMAL属性, 如果要打开重叠I/O, 则应该指定FILE_FLAG_OVERLAPPED 属性, 这里, 重叠I/O 的概念很重要。

在使用ReadFile 和WriteFile 读写串口的时候, 既可以使用同步方式, 也可以使用异步( 重叠) 方式, 使用同步方式的时候, 函数直到操作完成后才返回, 这就意味着在执行同步方式时, 线程将被阻塞, 导致效率下降, 如果通信出现错误, 将导致系统挂起的危险出现, 而使用重叠方式的时候, 费时的I/O 操作在后台进行, 主线程则完成别的事情而不用担心效率会降低, 而ReadFile 和WriteFile 是否执行重叠I/O 操作则是由CreateFile 决定的, CreateFile 中如果指定了FILE_FLAG_OVERLAPPEDA 标志, 那么执行重叠操作, 否则执行同步操作, 比如, 要用重叠方式打开COM1, 则应该这样使用CreateFile 函数。

HANDLE M_hCOm = CreateFile (OPEN_EXISTING,”COM1”,FILE_ATTRIBUTE_NORMAL |FILE_GENERIC_READ|generic_write,flag_overlapped,0,null,null,);

当通信设备的句柄创建成功后, 接下来就要完成串行口的初始化操作了, 初始化是通过DCB( Device Control Block) 结构和COMMTIMEOUTS 结构来实现的, 此外还利用SetupComm 函数设置输入与接收缓冲区大小等。

DCB 结构包含了波特率、数据位、奇偶校验位、停止位、文本方式或二进制方式等信息。串口打开后, 调用GetCommState 函数可以获取串口当前的配置, 修改完DCB 结构后, 调用SetCommState 函数, 用新的DCB 设置重新配置串口, 比如, 设置波特率位56 OOO, 8 位数据位, 无校验, 1 位停止位,二进制方式。

if ( m_hCOmm = = NULL ) return;

DCB dcb;

GetCOmmState (m_hComm, &dcb) ;

dcb. BaudRate= 56OOO;

dcb. ByteSize= DATABITS_8;

dcb. Parity= FALSE;

dcb. StopBits= ONESTOPBIT;

dcb. fBinary= TRUE;

SetCommState ( m_hComm, &dcb) ;

在用ReadFile 和WriteFile 读写串口时, 还需要考虑超时问题, 如果在指定的时间内没有读出或写入指定数量的字符, 那么ReadFile 和WriteFile 将立即返回。调用GetCOmmTimeOuts 可以获取当前的超时设置, 该函数将填充一个COMMTIMEOUTS 结构, 调用SetCommTimeouts 可以用某个COMMTIMEOUTS 结构来设置超时, 该结构定义如下,

typedef struct COMMTIMEOUTS {

DWORD ReadIntervalTimeOut ; //读间隔超时

DWORD ReadTOtalTimeOutMultiplier; 读时间系数

DWORD ReadTOtalTimeOutCOnstant; 读时间常量

DWORD WriteTOtalTimeOutMultiplier; 写时间系数

DWORD WriteTOtalTimeOutCOnstant 写时间常量

} COMMTIMEOUTS, e LPCOMMTIMEOUTS;

有两种超时, 间隔超时和总超时, 他们之间的设置是不相关的, 写操作只支持总超时, 读操作两种超时都支持, 间隔超时是指接收时两个字符之间的最大延迟时间, 总超时是指读/ 写操作总共花费的最大时间, COMMTIMEOUTS 结构的所有成员都是以毫秒为单位, 总超时的计算公式为

总超时= 读/ 写时间系数> 要求读/ 写的字符数+ 读/ 写时间常量如果超时为O, 那么就不用该超时, 比如读间隔超时为O, 则不用读间隔超时, 如果所有写操作参数均为O, 则不用写超时。

如果读间隔超时为MAXDWORD, 且读总超时为O, 那么在读一次缓冲区中的内容后读操作就立即完成, 而不管是否读入了要求的字符数。

除了DCB 设置和超时设置外, 还需要设定I/O 缓冲区的大小, Windows 用I/O 缓冲区来暂存串口输入和输出的数据, 如果通信速率较高, 则应该设置较大的缓冲区大小, 调用SetupComm 函数可以设置串口输入和输出缓冲区的大小。

自此, 串行口打开并且完成了初始化, 通信管道已建立起来, 可以对端口进行读写操作

串口的读写操作

串口的读写是通过Readfile 和Writefile 来实现的, 这两个函数的参数几乎是一样的, 这里只列出Readf ile 的原型。

BOOL Readfile (HANDLE hfile, 文件句柄

LPVOID lpBuffer, 数据缓冲区

DWORD nNumberOfByteSToRead, 要求读入的字节数

LPDWORD lpNumberofByteSRead, 实际读入的字节数

LPOVERLAPPED lpoverlapped 指向一个OVERLAPPED 结构);

注意这里的lpoverlapped 指针, 在重叠操作时应该指向一个OVERLAPPED 结构, 如果为NULL, 那么函数将进行同步操作, 而不管句柄是否由FILE_FLAG_OVERLAPPED标志建立。

在使用重叠操作时, 需要建立一个OVERLAPPED 结构, 而OVERLAPPED 结构最重要的成员是hEvent, 它是一个事件对象句柄, 它将作为线程的同步对象使用。

这里提出了线程的概念。在很多工业控制系统中, 常常通过扩展串口连接多个外设, 各外设发送数据的频率不同, 这就要求后台要实时无差错捕捉、采集、处理和记录各端口数据, 从而需要创建串口监视线程, 以实时监控串口事件的发生, 并且通知相应的窗口进行处理。

Win32 区分两种不同类型的线程, 一种是用户界面( UI, USer Interface) 线程, 它包含消息循环或消息泵, 用于处理接收到的消息; 另一种是工作者( Worker) 线程, 它没有消息循环, 用于执行后台任务。串口监视线程就属于工作者线程。

工作者线程的创建可以通过AfxBeginThread 实现, 其声明为:

CWinThreade * AfxBeginThread (

AFX_THREADPROC pfnThreadProc, / / 指向工作者线程的函数的指针

LPVOID pParam, / / 传递给线程函数的参数

int nPriority = THREAD_PRIORITY_NORMAL, / / 线程优先级

UINT nStackSize = 0, / / 线程堆栈尺寸

DWORD dwCreateflags =0 / / 线程初始状态, 为0 则创建后立即执行, 为create_suspended 则创建后被挂起, 知道调用ResumeThread 才开始运行

LPSECURITY_ATTRIBUTES lpSecurityAttrS = NULL //线程保密性);

线程函数的声明必须如下,

UINT MyControllingFunction ( LPVOID pParam );

其中pParam 是创建线程时的第2 个参数, 如下例, 传递的参数为指向CECLView的this 指针; void CECLView::CreateCommReceiveThread ()

{ CWinThread * m_pReadCommThread;

m_pReadCommThread=AfxBeginThread(ReadcommThreadProc,this,THREAD_PRIORITY_NOMAL, 0,CREATE_SUSPENDED,NULL);

m_pReadCommThread->:ResumeThread();

}

UNIT ReadcommThreadProc(LPVOID pPrarm)

{ CECLView *pView=(CECLView *)pParam;

……

Return 0;}

多线程的使用会带来一些问题, 主要是如何保证线程之间的协调运行, 从而提出了同步对象。同步对象主要有事件、mutex 和信号灯3 种。事件对象是最简单的同步对象, 它包括有信号和无信号两种状态。事件对象是用CreateEvent 创建的。该函数可以指定事件对象的类型和初始状态。如果是手工重置, 则它总是保持有信号状态, 直到用ResetEvent 函数重置成无信号的事件; 如果是自动重置, 则它的状态在单个等待线程释放后会自动变为无信号的。用SetEvent 可以把事件对象设置成有信号状态。

串口监视线程需要等待主线程完成串口数据的读取后才能运行, 此时, 该线程需要暂时挂起, 以减少对CPU 的占用时间, 提高程序的执行效率。当主线程完成了串口数据的读取后, 将同步事件对象置为有信号, 从而激活串口监视线程监测串口事件的发生, 保证串口监视线程与主线程之间的同步, 避免错误的发生。

在读取串口数据的时候, 使用了ReadFile, 该函数的返回值是BOOL 值。若该函数返回TRUE, 则表示操作成功。但是, 需要注意, 该函数因为超时也将返回TRUE。另外, 如果返回值为FALSE, 也不表示操作就失败了, 应该调用GetLastError 函数分析返回的结果。如果GetLastError 返回ERROR_IO_PENDING, 则说明重叠操作还未完成, 需要等待操作结束, 目前有两种等待方法。

Win32 API 提供了一组能使线程阻塞其自身执行的等待函数。这些函数只有在作为其参数的一个或多个同步对象产生信号时才返回。在超过规定的等待时间后, 函数将立即返回, 而不管有无信号。在等待函数未返回时, 线程处于等待状态, 此时线程只消耗很少的CPU 时间。最常用的等待函数是WaitForSingleObject,其声明为:

DWORD WaitForSingleObject(

HANDLE hHandle, //同步对象句柄

DWORD dwMilliseconds //超时间隔,单位为微妙。

)。

如果超时间隔为0, 则该函数立即返回, 如果为INFINITE, 则超时间隔无限。该函数返回值如表1所示。用GetOverlappedResult函数等待。如果指定该函数的bWait参数为True,那么该函数将等待OVERLAPPED结构的hEvent事件。GetOverlappedResult可以返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作作结果。

在调用ReadFile 和WriteFile 之前, 线程应该调用ClearCommError 函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。调用PurgeComm 函数可以终止正在进行的读写操作, 该函数还会清除输入或输出缓冲区中的内容。

API和MSComm32的应用比较

1性能

两者均可使用ASCIl码或二进制形式的数据。但是如果使用的是MSComm32控件,无论是在PC 机读取上传数据时还是在PC机发送下行命令时,都只能使用vARIANT数据类型。所以不论是ASC|l码还是二进制,发送前都要转换一下。如果下位机是单片

机,则在单片机的程序中不需要做其他额外的转换。使用API函数则不需要做这种转换。

2扩展

在使用APl函数进行串口通讯时,常常用一个类为每一个申口添加一个控件。MSComm32控件的源码是不公开的,所有的修改必须在它的外面,以至于代码的重用性比较差。

3编程复杂性

从上面的这两个例子可以看出,用API函数编写通讯程序,涉及的函数比较多,一次代码编写比较复杂,而MSComm32控件则比较简单。而且MSComm32控件的文档说明详细,在vB中文版中,还可以找到中文的使用帮助。控件的可靠性很高,调试时完全可以不考虑这一部分的错误的可能,这又能节省一部分时间。所以在开发周期上,MSComm32控件远胜过API函数。至今为止,使用API函数编写通讯类的实际工作也做的比较多,已经出现了一些功能强大的共享类,这就使我们不需要重头做起,降低了首次编写时的难度,。比如https://www.360docs.net/doc/5d10950998.html,/network/serialport.shtml中的一个串口通讯类就值得参考。

移植性

API函数是各种windows编程工具所共同支持的,但是各种语言可能有不同的表示方法,所以,API 串口通讯类只可用在其他windows的C++平台上,如C++ Builder。如果是在VC++中开发程序,并用到了某些MFC中已经包装过的类或数据,则不能直接在其他编程环境下运行。API函数编出来的类是源代码级的共享,而Active×控件是基于二进制代码级的共享,所以可以在VB,Dephi,C++ Builder中使用此控件,但是具体的实现代码则需要有所更改。需要注意的是,因为不能确保每一台计算机上都有MSComm32控件,所以在使用前要注意有个注册的过程。这个工作可以在应用程序中做,也可以在用于应用程序发布的安装程序中做。

两者均可以使用文本或二进制数据。MSComm32控件能满足比较基本的需要,而且上手比较快,调试起来也方便。使用APl函数缩写的类自己扩展的余地大,比较灵活,容易添加一些特定的功能。我们认为,如果注重的是开发周期,请选用控件来进行串行通讯,如果注重的是功能强大,或有特殊来封装所有功能。一般说来,这个类除了初始化串需要,请使用API函数。

CSerialPot串口类的使用

CSerialPort串口类可以很方便地实现上位机和仪表的串口通讯,串口类可从Remon Spekreijse免费得到。该类是基于多线程的,其接收数据工作流程如下:首先初始化串口,再开启串口监测工作线程,当串口监测工作线程监测到串口接收到的数据、流控制事件或其他串口事件后,就以消息方式通知主程序,激发消息处理函数进行数据处理。数据可直接向串口发送。

实现串口通信的过程中,要用到几个成员函数。InitPort():初始化串口,即设置串口的通信参数:串口号、波特率、校验方式、数据位、停止位等。StartMonitoring():启动串口检测线程。WriteToPort()函数:向串口发送字符。ClosePort():关闭串口。

CSerialPort串口类在数据采集过程中的使用方法如下:

(1)串口类的引用

先将串口类的头文件SerialPort.h和源文件SerialPort.cpp复制到所建工程的文件夹中,在VC.NET环境下,通过菜单Project/Add To Project/files选中两文件加入到工程中。CMainFrame.h中引入了SerialPort.h 并定义了公共CSerialPort类对象m_serialport.

(2)串口的初始化

本系统对串口的初始设置为:端口为l,波特率为9600,数据位为8,无数据校验位;停止位为2,接受缓冲区为512字节。

If(m_serialport.InitPort(this,1,9600,N,8,2,EV_RXFLAG|EV_RXCHAR,512))//串口初始化

{//启动串口检测线程

M_serialport.StartMonitoring();

Settime(1,200,null); }

Else

Messagebox(“没有发现此串口或串口已被占用”,”注意”,);

(3)添加串口事件响应函数

在CSerialPort类中有多个串口事件可以响应,所有的消息均需要人工添加消息处理函数,在一般串口编程中,只需处理WM_COMM_RXCHA消息就可以了。此处将处理函数定义为OnComm()。

LONG CMainFrame::ONComm(WPARAM ch,LPARAM port)

{//将接受的字符赋给Public型m_recedate变量

m_recedata+=cn;

return 0; }

(4)向串口发迭字符

系统用定时器方法以200ms为周期向串口发送读数据的命令,实现对温度的实时采集:首先建立定时器SetTime(1,200,null),定时器用按周期触发的Ontime(UINT nIDEvent)函数

中的m_serialport调用WriteToPort().

SerialPort类提供了同步I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。SerialPort类的常用属性和常用方法如表l所示。利用表1中的属性和方法,实现智能化汽车衡系统中上位机与下位机的数据传输。

利用https://www.360docs.net/doc/5d10950998.html,Framework 2.0中的SerialPort类,实现汽车衡称重系统上位机与下位机串口通信接收功能的主要程序如下:

Private void SerialPort1_dataReceived(object sender,System.IO.Ports.serialdatareceivedEventArgs e)

{If(flag==false)//flag初始值为false,用于标示是否处理数据值

{if(this.serialport1.readbyte()==0x0a)//判断受到询问信号?0A?

{this.serialport1.wire(0x0B,0,1);flag=!flag})//回复确认信号?0b?

Else if(flag)

{system.threading.thread.sleep(100);//线程中断100毫秒

This.serialport1.read(rec_barray,0,4)//读取缓冲区数据

Rec_barray_data=crcdata(rec_barray,2)//对接受crc编码解码

Temp=convert.todouble(rec_barray_data[0]*256+rec_barray_data[1]);//按规约处理数据

Rec_dou=temp/100;//单位转换

Rec_strarray=convert.tostring(rec_dou);

Flag=!flag;

Settext(rec_strarray//显示数据。)}

每当上位机串口缓冲区收到新数据时,即触发此函数。

为了提高汽车衡称重系统串口通信的抗干扰能力和降低误码率,上位机与下位机通信采用了CRC编码技术,并设计了一种握手协议,即对于每32bit数据,由下位机向上位机发送数据传输询问信号…0A?,上位机接收到…0A?信号后,向下位机发送…0B?确认信号。下位机接收到…0B?后传输2bit数据信息,上位机将数据按约定规则处理后显示。若下位机没有受到…0B?确认信号,下位机将持续向上位机发送询问信号,上位机数据信息保持不变,避免因干扰而产生数据大幅振荡。若此状态超过2s,系统将弹出串口通信异常警告对话框。实验表明,采用这种方法后,数据通信误差由实施前的《0.05%降低到《0.01%

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

串口通信基本接线方法 龚建伟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接口相连,市面上专门的各种转换器卖,必须通过转换器才能连接; ?线路焊接要牢固,不然程序没问题,却因为接线问题误事; ?串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果; ?强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。

串口通信测试方法

串口通信测试方法 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软件进行观察,这里利用如下图标的一个免费计算机串口调试软件,故而这一块计算机通信的程序可不写!

电脑--电子秤通信 连接线制作方法

电脑--电子秤通信连接线制作方法 一.准备工作: 1.按电子秤(地磅表头)说明书制作好数据通讯线. PS:一般电子秤数据通讯线的制作连接方法: ①一般电子秤采用的RS232通信.其数据通讯线只使用3根线. ②如果电子秤端采用9芯连接头,则使用2,3,5三根线.那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-5(如采集不到数据请修改为:2-3,3-2,5-5再试) ③如果电子秤端采用15芯连接头,则使用6,7,8三根线,那么其与电脑COM口9芯连接头的连接方式对应是:6-2,7-3,8-5(如采集不到数据请修改为:6-3,7-2,8-5再试) ④如果电子秤端采用25芯连接头,则使用2,3,7三根线,那么其与电脑COM口9芯连接头的连接方式对应是:2-2,3-3,5-7(如采集不到数据请修改为:2-3,3-2,5-7再试) 2.电子秤(地磅表头)通讯参数设置. 一般电子秤(地磅表头)均可由操作者自行设置通讯参数.包括:波特率设置.数据传输方式. 其中波特率一般均支持:1200,2400,4800,9600. 数据传输方式:根据电子秤生产厂家的设定不同而不同. PS:一般电子秤数据传输入方式: ①连续传送:当电子秤开机并且稳定,不论当前称重情况,电子秤每100ms传送一笔称重数据至COM口.

②稳定传送:当电子秤开机并且稳定,且当前电子秤过磅中,且电子秤稳重后.系统自动传送一笔称重数据至COM口.(电子秤零点不传送.未稳定时不传送.每称重一次只传送一次.下一次电子秤必须回到零点后再次称重.) ③按键传送:当电子秤开机并且稳定,且当前电子秤过磅中,能过电子秤的K/B(按键)上某一特定按键后,系统自动传送一笔称重数据至COM口.(具体说明请参见电子秤说明书或咨询电子秤供应商.)

三种集体决策方法

共同点: 1、有效激发个人的创造力和想象力; 2、鼓励每个人独立思考,广开思路可以提供了一个自我创造自我发挥的平台; 3、群策群力,众人拾柴火焰高,有效利用集体力量。 不同点: 1、头脑风暴法——不怕做不到,就怕想不到,注重点子的数量而不是质量各自自由发表方法,没有思维界限,方法不做现场点评建议; 2、名义小组技术——个人独立思路被放在首位,适合在领导高层决议分歧严重、僵持不下时使用,以小组各自独立思考并互相投票选择推导方案。 3、德尔菲技术——当局者迷、旁观者清,主要使用专家权威拟定方案;由管理者与分别专家商讨为主;以专家组最后的代表方案为目的,往往能取得意想不到的功效。 需要注意的问题: 1、头脑风暴法: (1)时间成本和现场不好控制,可能会产生面子问题而不敢任意发表自己的想法; (2)考验会议主持人的领导力与执行力; (3)主题容易偏离目标; (4)由于中国的“文化”(圈子、面子、关系)复杂,需考虑是否适用于本土企业。 2、名义小组技术: (1)参与决策的人的能力与岗位是否相称; (2)参与决策的人的权利与责任是否相称 (3)小组容易产生互相推脱责任; (4)任何议题最后都由管理者拍板决定,如果管理者习惯“一言堂”,小组讨论则形同虚设。(5)民主决议产生的决策并不直接等于好的决策。 3.德尔菲技术: (1)聘请专家参与决策的费用与决策效果是否成正比,投入成本相对较高,容易产生投入与效果差异大。 (2)公司管理者与专家分歧严重时应该如何协调,应掌握管理者与专家意见分歧大时的处理方法; (3)专家参与决策容易削弱高层权力而导致管理层产生不满 德尔菲技术:;;三种集体决策方法的异同如下: (1)相同之处 ●在操作上,三者都尽量不免决策成员的直接冲突:头脑风暴法要求开始时不评论别人的 建议;名义小组采用投票而不是口头的方式选择方案;德菲尔技术中专家根本没有见面的机会。 ●在效率上,三种决策方法都需要经过比较长的时间,特别是德尔菲法.所以决策的效率 相对于个人决策来讲比较低。 ●在效果上,三者都发挥全体群体决策质量高的优点,都能最大限度的获得群体成员的意 见,集思广益。 (2)不同之处 ●成员数量有差别。头脑风暴以5~6人为宜,例如如果成员数量过多,主持人可能没有 办法控制会场情况,也并不是所有参加成员都有机会表达自己的观点。而德菲尔法和名义小组法并没有限定人数。 ●决策时间长短有差别。头脑风暴法几个小时能作出决策,二德尔菲法和名义小组法可能 要几天甚至更长时间

串口通信的接线方法

目前较为常用的串口有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

常用通讯测试工具使用

常用通讯测试工具 鉴于很多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 于\\计算机名(本地)”。如下图:

串口通信的连线方法

转载:目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连,本文只涉及到最为基本的接法,且直接用RS232相连。 1.DB9和DB25的常用信号脚说明 9针串口(DB9) 25针串口(DB25[被屏蔽广告]) 针号功能说明缩写针号功能说明缩写 1 数据载波检测 DCD 8 数据载波检测 DCD 2 接收数据 RXD 3 接收数据 RXD 3 发送数据 TXD 2 发送数据 TXD 4 数据终端准备 DTR 20 数据终端准备 DTR 5 信号地 GND 7 信号地 GND 6 数据设备准备好 DSR 6 数据准备好 DSR 7 请求发送 RTS 4 请求发送 RTS 8 清除发送 CTS 5 清除发送 CTS 9 振铃指示 DELL 22 振铃指示 DELL 2.RS232C串口通信接线方法(三线制) 首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连 · 同一个串口的接收脚和发送脚直接用线相连对9针串口和25针串口,均是2与3直接相连; · 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口) 上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼此交叉,信号地对应相接,就能百战百胜。 3.串口调试中要注意的几点: 串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;强烈建议不要带电插拨串口,插拨时至少有一端是断电的,否则串口易损坏。 单工、半双工和全双工的定义 如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。 如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。 如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。 电话线就是二线全双工信道。由于采用了回波抵消技术,双向的传输信号不致混淆不清。双工信道有时也将收、发信道分开,采用分离的线路或频带传输相反方向的信号,如回线传输。 奇偶校验 串行数据在传输过程中,由于干扰可能引起信息的出错,例如,传输字符‘E’,其各位为:0100,0101=45H D7 D0 由于干扰,可能使位变为1,这种情况,我们称为出现了“误码”。我们把如何发现传输中的错误,叫“检错”。发现错误后,如何消除错误,叫“纠错”。 最简单的检错方法是“奇偶校验”,即在传送字符的各位之外,再传送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"

德鲁克:如何做有效的决策

德鲁克:如何做有效的决策 【导读】决策是一种判断,是若干项方案中的选择。所谓选择,最多只是“大概是对的”与“也许是错的”之间的选择。 忘掉那些复杂而繁琐的决策程序吧,采用不同层面衡量方法就能让你看清问题的每一面。 针对如何做有效的决策,德鲁克指出,决策是一种判断,是若干项方案中的选择。所谓选择,通常不是“是”与“非”间的选择,最多只是“大概是对的”与“也许是错的”之间的选择。而绝大多数的选择,都是任何一项方案均不一定优于其他方案时的选择。 遗憾的是,不少人会认为决策的第一步是“先搜集事实”,但是能做有效决策的管理者,都能了解他们决策时,并非先从搜集事实着手,而是先从其本人的见解着手。所谓见解,是“尚待证实的假设”,因此唯一严谨的方法,唯一可以印证某一见解是否符合实际的方法,应该以明确承认“见解为先”做为基础——这是必要的做法。有了这样的认识,我们才能知道决策的正确程序。 以下是决策者需要的主要的方法: ·鼓励大家提出见解 鼓励的同时,也要让大家深思其见解,认清其见解经过实证后的结果。因此,有效的管理者会问:“要验证某一假设是否为真,我们该知道些什么?”以及,“要验证某一见解,应该有些怎么样的事实?” 但最关键的问题应该是:“相关的标准是什么?”由于这一问题,很自然就会转到关于衡量的话题:问题本身的衡量和决策的衡量。只要分析一下一项真正有效的决策是如何达成的,一项真正适当的决策是如何达成的,我们就能发现我们为决定衡量方法所消耗的时间和精力极多。 · 先假定传统的衡量方法并非适当的衡量方法 自从朝鲜战争以来,美国军用物资的采购一直不理想。军方也曾拿出解决方案,但无济于事。直到麦克纳马拉出任国防部长,才改变这一局面。过去军需物资的采购一直以物资项目的总项数和总金额为衡量的基础。麦克纳马拉一反此项传统,他主张将最重要物资、一般重要物资以及不太重要的物资分开管理,严加

RS232串口通信基本知识与实例

1,RS232串口通信基本知识 (1)目前较为常用的串口是9针串口(DB9。通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口;若距离较远,需附加调制解调器(MOD EM)。 (2)RS232C串口通信接线方法(三线制) 接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接 (3)DB9接口三线引脚定义 2 ---- RXD 接收数据 3 ---- TXD 发送数据 5 ---- GND 信号地 (4)串行通信方式 1)单工:信息只能单向传送 2)半双工:信息可双向传送但不能同时进行 3)全双工:信息可同时进行双向传送 (5)RS232逻辑电平 逻辑0电平规定为+5 ~ +15V之间;逻辑1是电平为-5 ~ -15V之间,因此在与单片机进行通信时需要进行电平转换 (6)RS232串行通信接口电路设计 (7)51单片机串行通信接口软件设计 1)两个重要指标:可靠性和速度,可靠性是第一位。 2)与串口通信相关的几个寄存器和控制位 TMOD:可以用它来设置定时器工作方式(如果在MCU中使用的是定时器来产生波特率,就需要对这个寄存器进行设置,通常设为0x20,即设置定时器1为8位自动重装定时器,即工作方式1) TH1和TL1:定时器1初始值(可通过波特率计算软件获得) TR1:开启定时器1 SCON:串口控制寄存器,通常设为0x50,即10位异步传输,由定时器1

产生波特率,无奇偶校验位,允许接收 PCON:这个寄存器主要用到它的最高位SMON,当最高位设为1时,原波特率加倍 ES:串口中断使能位 EA:全局中断使能位 3)波特率计算方法(使用一个名为“51波特率初值计算.exe”的小软件)第1步:选择定时器工作方式(方式2) 第2步:输入晶振值(11.0592) 第3步:选择波特率(9600) 第4步:设置SMOD值(0) 第5步:点击确定 第6步:将软件上显示值赋给TH1和TL1 4)串口初始化程序 void Initial_RS232(unsigned char rate) { //默认晶振值为11.0592MHz unsigned char Reload1; switch(rate) //根据拨码器设置波特率 { case 0: Reload1 = 0xE8; //2400bps break; case 1: Reload1 = 0xF4; //4800bps break; case 2: Reload1 = 0xFA; //9600bps break; case 3: Reload1 = 0xFD; //19200bps break; default: Reload1 = 0x00; break; } PCON = PCON|0x80; //SMOD = 1 ;波特率加倍 TMOD = 0x20; //0011,00010设置定时器1为8位自动重装计数器 SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位 TH1 = Reload1; //设置定时器1自动重装数 TL1 = Reload1; TR1 = 1; //开定时器1 ES = 1; //允许串口中断 EA = 1; //开总中断 }

有效的决策

有效的决策 决策就是判断.就是在一些不同的可行方案中作出一种 选择。我们所说的选择,在一般情况下,并不是指“是”与 “非”之间的选择,这充其量也只是“大概是对的”与“也 许是错的”之间的选择。而通常经常遇到的却往往只是两种 不同行为方案之间的选择。在这两者之间,很难说哪个比哪 个更正确。 绝大多数关于决策的书都这么说:“首先要弄清真相。”不过.卓有成效的决策者都知道,决策的过程往往不是从真相开始的,而是从想法开始的。这些想法由于没有经过实际的检验,常常只是一些假设,因此,还谈不上有什么价值。要想判断什么是真相,那就首先要确定相关的标准,特别是要确定合适的衡量标准。这可以说是有效决策的纲,也是通常最容易引起争论的地方。 最后,有效的决策并不像许多教科书里所说的那样来自于对真相的—致的看法。恰恰相反,正确决策的意识正是在不同意见的冲突与矛盾之中产生的,是认真考虑对立各方行动方案的一个结果。 先要弄清真相是很难做到的。因为没有相关的标准,就不可能找到什么真相。事件本身并非就是真相。 在物理学中,知道物质的滋味并不就是了解了事物的真相。直到最近,知道某物体的颜色,也并不就等于了解真相。就烹调而言,滋味是个绝对重要的真相;而说到绘画,颜色才是头等重要的真相。物理学,“烹调和绘画都从各自的需要出发考虑有关的事情,因此就会将不同的事物认作真相”。 卓有成效的管理者还懂得,人们干事情并不是从寻找事物真相开始的,而是先从想法开始的,这样做并没有什么不对。人们经历过某个事件,就必然会有些想法。如果在某个领域里体验了好长一段时间的生活而不产生想法的话,那说明此人没有敏锐的观察力,头脑迟钝。 所以,人们已是先有想法,然后再采取行动的。硬要他们先寻找真相,然后再采取行动是不可取的。那会使他们像其他人一样,寻找所谓的真相来凑合自己已有的结论。既然已有了结论,要找些所谓的事实来加以说明不会有什么困难。擅长统计的人员都知道这个道理,因此,他们对统计数字往往不太信任。 唯一缜密的方法,唯一有利于我们用实践来检验想法的办法,就是“先有想法,后有行动”,这也是我们考虑决策时所应该采取的办法。只有这样,别人才能看出,我们的决策是从没有经过测试的假设开始的,而这恰恰就是决策或科学研究的唯—起点。我们知道应该如何对待假设,我们不会为假设而争论不休,我们要做的就是对它们进行测试。通过测试,可以发现哪些假设可以成立,因此值得我们认真地加以考虑;哪些假设站不住脚,必须被弃置。

串口通信测试方法

串口通信测试方法 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 机与单片机之间进行通信,在设计过程中,有如下约定:

有效决策的六大步骤

有效决策的六大步骤 决策管理的六大步骤: 决策过程中最重要的工作是确定企业中不同部门、不同层级所制定的决策必须彼此相容,都能与企业整体目标相响应。 一是界定问题。(找到正确的问题、设定目标以及确立规则) 此阶段,要避免以下两种错误做法。一是只注意找出正确的答案,而不注重提出正确的问题;二是为错误的问题寻找正确的答案。 在现实生活中,没有任何问题呈现出的面貌可以让我们直接据以做出决定。许多问题,我们乍看之下,以为找到了关键因素,实际上这些因素却多半既不重要,也不相干,充其量只是症状而已。而且,最显而易见的症状往往透露不出任何重要线索。 在界定问题的过程中,我们必须假定症状可能会说谎,不同的问题可能会呈现出相同的症状,而同样的问题也可能会呈现出各种不同的症状。因此,管理者必须分析问题,而不是诊断问题。 要明确界定问题,管理者必须首先找到“关键因素”,即在做出任何改变或采取任何措施前必须率先改变的因素。 在界定问题时,要决定解决问题需要什么条件,同时彻底想清楚解决方案的目标为何。 解决方案的目标必须反映企业目标,聚焦于经营绩效和经营成果上,在短期的未来和长期的未来之间取得平衡,并且将企业整体以及经营企业所需要的活动一起纳入考虑。 同时,必须深思熟虑限制解决方案的各种规定。解决问题时,必须遵循哪些原则、政策和行为准则?公司可能规定,好的管理者培养计划的必要条件是不能有内定的当然人选。清楚说明这些规定是非常必要的,因为在许多情况下,必须改变既有政策或做法,才能做正确的决定。除非管理者彻底想清楚他想改变什么,以及为什么要改变,否则,他可能陷入既试图改变同时又维护既有做法的危险之中。 事实上,这类规定代表了所依循的价值体系。这个价值体系不会决定应该采取什么行动,只会决定不应该采取哪些行动。 二是分析问题。 找到正确的问题、设定目标及确立规则等步骤,构成了决策的第一个阶段。问题界定清楚之后,下一个阶段是分析问题:将问题分类,并寻找事实。 分析问题首先需要对问题进行分类,以确定谁是必须做出决策的人以及应该把决策内容传达给哪些人。如果没有预先将问题分类,将严重危害最后的决策品质,因为问题分类后将能说明如果要将决策转化为有效行动,应该由什么人做什么事情。 问题分类原则必须预先经过充分讨论,必须遵循以下四个原则:决策的未来性(企业采取行动所承诺的时间长短,以及决策会多快改变)、决策对于其他领域和其他部门的影响、决策品质的考虑、决策的独特性或周期性。这样的分类能确保决策对于企业整体产生实质贡献,

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

测试电脑的串口是否是好的最完整最可靠的方法就是连接一个真实的串口通信线路,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、其余设置按照下图。

有效决策的三种方式

有效决策的三种方式 亨利?明茨伯格 应该怎样制定决策?这个问题简单,我们很久以前就搞清楚了。首先提出问题,然后分析问题,再设计多项解决方案,最后确定最佳方案。当然,接下来还有方案的实施。 但是,所有的决策都是这样制定出来的吗?我们建议,这种推理的,或者称为“首先分 (seeing first) “首先构想” 析”(thinking first)的决策方式应该辅之以另外两种非常不同的方法: 的模式和“首先实践”(doing first)模式。管理人员综合使用这三种方式,可以提高决策的质量。健康的组织,和健康的人一样,这三种决策方式都是缺一不可的。 想想实际工作和生活中我们是怎样做出决定的,这里以一个生活中的故事为例。故事是由贝蒂姑妈的一个电话引起的。 “嗨,孩子,我想给你的新房子买件礼物,你们新家的主色调是什么?” “主色调?姑妈,我怎么知道这种事,我得问丽萨。喂,丽萨,贝蒂姑妈想知道我们新房子的主色调。” “黑色。”女儿丽萨回答。 “黑色?丽萨,你让我怎么住在里面?!” “黑色”,她重复道。 几天后,父女二人来到家具店买家具。他们试了所有的桌子椅子,没一件合适。两人变得无精打采。突然丽萨的目光落到一只黑色凳子上:“这只黑色凳子配白色餐台肯定很棒”!然后事情就好办了。一个小时之内,他们挑好了所有的家具,颜色是黑、白和青灰色。 这个寻常故事的不寻常之处在于:用我们传统的决策理论解释不了故事中决定的来龙去脉。我们甚至说不清楚哪个是最后的决定:买黑色凳子;布置新房子;用黑白色调布置房子;还是创造一种新的生活方式?决策制定的过程会令人感到难以捉摸。 “首先分析”模式的局限 推理的决策制定有一个步骤清晰的流程:定义—分析—设计—决定。但是事实证明,这种决策方式的实际运用并不普遍。 多年前本文的其中一位作者对若干决策的制定过程进行了研究,解析了这些决策做出的步骤,并用线性图画出整个过程。其中,建立一家新工厂的决策过程非常具有代表性。图形不停地回旋,新事件的出现使其中断,机遇使之改变方向,不停地迂回曲折,直到最终找到

RS232C标准9针串口接线方法

RS232C标准9针串口接线方法 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 二、特殊接法 关于串口的非标准接口一般需要参考仪器说明书或者咨询仪器厂家才能获知,下面列举几种常见的特殊接法(每台仪器的具体串口具体接法可参考LIS事业部“仪器设置”文档库): 1、9孔对9针(H100尿液分析仪) 2--------------2

5--------------5 2、9孔对9孔(4-channel半自动血凝仪) 9孔对9孔,一一对应,全接。 3、9对25(C100尿液分析仪) 2--------------2 3--------------3 5--------------7 25串口中,4和5短接,6和20短接, 25串和9串间另接一根线,均焊在两头的铁皮外壳上用做地线。 4、9孔对电话线接口(MEDICA EasyBloodGas血气分析仪端为电话线口) 电话线一端:线头向下,金属片面对自己从左向右分别是1,2,3,4,5 电话线口---9孔串口 1--------------5

实验9指导书:串口通信实验

实验指导书:串口通信实验 实验目的: 通过程序,理解并验证串口通信的编程方法和机制。 本次实验分两个环节,第一环节为用程序发送字符串,用linux命令在另一窗口直接从串口读取; 第二环节为用发送程序发送字符串,用接收程序在另一窗口读取串口并显示。 要求必须完成第一环节,而第二环节为选作。 本实验在虚拟机环境下完成,利用虚拟机创建两个虚拟串口,基于这两个虚拟串口完成串口通信实验。 实验内容: 本次实验需要在linux环境下,用vi工具输入对应的程序,并编译通过,运行后观察结果是否正确。 一、设置虚拟机串口 1.1 VMware的串口: 一个虚拟机最多可以添加四个虚拟串口,有如下3个方法配置虚拟串口: (1) 连接一个虚拟串口到宿主机的物理串口。 (2) 连接一个虚拟串口到宿主机上的一个文件。 (3) 在两个虚拟机之间建立一个直接的连接,或者将虚拟机的串口与宿主机的应用程序连接。 1.2 为虚拟机添加串口 首先要保证虚拟机下的linux处于关机(power off)状态, (1) 选择菜单中的虚拟机 设置(英文版为:VM -> Settings),在硬件(Hardware)标签页中,如 果已有串行端口(serial port),则选中该串口,并点选移除。

(2) 点击Add按钮,在Add Hardware Wizard对话框中选择Serial Port,点击next,分两次添加两 个串口,具体的选项如下图: 串口2的设置:

注意两个串口都使用了命名管道方式,但一个是服务器端,一个是客户端。 (3) 启动linux操作系统,测试两个串口是否设置成功 在linux桌面空白处点击右键,打开两个终端窗口。在其中一个窗口(称为窗口A)中,建立工作目录,并进入该目录。即,执行下述命令: [1]cd /home [2]mkdir src [3]cd src [4]cat /dev/ttyS1 //注意是大写的S 在另一个窗口(称为窗口B)执行下述命令:

有效决策的七要素

效率(efficiency) 和有效性(effectiveness) 是两个不同的概念,效率讲的是把事情“做好”,而有效性讲的是要“做对”的事情。对一个决策者说来,“做对的事情”比“把事情做对”更加重要。 我们平时讲“决策”,多数情况下只是指做出某个决定。彼得? 杜拉克讲的“决策”,范围比我们平时意义上理解的要宽泛得多。 根据杜拉克对“决策”的研究,决策包含了以下七个要素: 1 . 判断决策是否必要管理者做决策,就好像 外科医生决定是否要对病人进行手术一 样。外科医生在决定动手术前,都会非常慎重,因为他们知道,外科 手术不可能没有风险,所以必须避免那些不必要的手术。在决定患者是否需要手术时,外科医生大都遵照几条古老而有效的规则:1. 如果疾病能够自动痊愈,而且不会对患者产生什么风险和巨大的疼痛,动手术是没有必要的,而只需定期检查。2. 如果病情恶化或者有生命危险,而医生又可以对这种病采取一些措施,那么他就应 该马上给病人动手术,不仅要快,而且还要彻底。在这种情况下,尽

管手术存在风险,却是必要的。3. 第三种情况介于以上两者之间,可能是最常见的一种情况:病情既没有恶化也不会危及生命,但是也不会自动痊愈,而且相当严重。这时外科医生就要在机会和风险之间进行权衡。在这个时刻,他必须做出一个决策。正是这种决策才把一流的外科医生和平庸之辈区分开来。这种外科医生使用的基本原理同样可以应用到决策上来。 2 . 对问题进行分类如果一开始对问题的分类错了,最后的决策也会是错误的。管理者遇到的问题一般可以分为四种基本类型:1. 无论是在企业内部还是在整个行业中都比较普遍的事件;2. 对于某个企业具有特殊性,但对于整个行业具有普遍性的事件;3.完全特殊的事件;4.看上去是特殊事件,但实际上只不过是一个首次出现的普通事件。除了完全特殊的事件之外,其它类型的问题都分别有其普遍性的解决方法。 完全特殊的问题非常罕见。事实上一个组织所遇到的大部分问题都是别人已经解决过的。所以,卓有成效的决策者要认真分析问题,判断它究竟是普遍性问题还是特殊问题。如果问题是普遍性的,就

串口信号定义和作用以及接线方法

串口、并口接口定义 并行口与串行口的区别是交换信息的方式不同,并行口能同时通过8条数据线传输信息,一次传输一个字节;而串行口只能用1条线传输一位数据,每次传输一个字节的一位。并行口由于同时传输更多的信息,速度明显高于串行口,但串行口可以用于比并行口更远距离的数据传输。 1、25针并行口插口的针脚功能: 针脚功能针脚功能 1 选通(STROBE低电平) 10 确认(ACKNLG低电平) 2 数据位0 (DATAO) 11 忙(BUSY) 3 数据位1 (DATA1) 12 却纸(PE) 4 数据位2 (DATA2) 13 选择(SLCT) 5 数据位3 (DATA3) 14 自动换行(AUTOFEED低电平) 6 数据位4 (DATA4) 15 错误观点(ERROR低电平) 7 数据位5 (DATA5) 16 初始化成(INIT低电平) 8 数据位6 (DATA6) 17 选择输入(SLCTIN低电平) 9 数据位7 (DATA7) 18-25 地线路(GND) 2.串行口的典型代表是RS-232C及其兼容插口,有9针和25针两类。25针串行口具有20mA电 流环接口功能,用9、11、18、25针来实现。其针脚功能如下: 针脚功能针脚功能 1 未用 2 发出数据(TXD) 11 数据发送(一)

3 接受数据(RXD) 12-17 未用 4 请求发送(RTS) 18 数据接收( ) 5 清除发送(CTS) 19 未用 6 数据准备好(DSR) 20 数据终端准备好比(DTR) 7 信号地线路(SG) 21 未用 8 载波检测(DCD) 22 振铃指示精神(RI) 9 发送返回( ) 23-24 未用 10 未用25 接收返回(一) 9针串行口的针脚功能: 针脚功能针脚功能 1 载波检测(DCD) 6 数据准备好(DSR) 2 接受数据(RXD) 7 请求发送(RTS) 3 发出数据(TXD) 8 清除发送(CTS) 4 数据终端准备好(DTR) 9 振铃指示(RI) 5 信号地线(SG) 串口通信基本原理及接线方法 目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单

相关文档
最新文档