串口与网络通信

2024-08-31

串口与网络通信(共11篇)

串口与网络通信 篇1

基于FPGA (Field-Programmable Gate Array) 芯片的系统设计中, 程序软件仿真验证通过后, 需要下载到芯片中测试是否能够完成相应功能。可以使用PC向PFGA通过串口发送数据并将处理后的数据返回计算机分析是否满足设计要求。完成串口通信可以选用专用的串行外设接口芯片如16550, NS16450或者控制单片机接收数据。而采用模块化设计方法, 通过硬件描述语言编程可以将外部芯片的功能集成到FPGA内部实现, 这种设计方法可移植性强, 又能避免不必要的资源浪费。本文采ISE 10.1软件开发平台, 选用Xilinx公司的Spartan-3E系列FPGA完成了与PC的通信功能。

1 系统的总体设计

系统的总体设计思想是:PC发送数据, 由MAX232完成RS-232电平到TTL电平的转换, FPGA内部的RXD模块负责转换后串行数据的接收, 数据处理单元对接收数据进行处理, 处理完成以后将数据暂存于FIFO中, TDX读取暂存数据按通信协议把数据发给MAX232反馈给PC, 分析数据是否符合要求, 从而验证整个系统设计的合理性。系统框图如图1所示。

RXD单元每接收完一个数据即向数据处理单元发送一个active高电平有效信号, 告之其此时的数据是需要处理的, 数据处理单元接收到active有效后采集data, 这样可以避免数据采集的错误。不同的系统所要完成的数据处理功能也不相同, 本实验中完成的是对接收信号进行213卷积编码功能。如果其他系统需要采集多个数据后再处理一次, 可以在接收端也添加一个FIFO缓存数据。

2 FPGA主要功能模块设计

2.1 RXD模块

RXD主要包括分频模块, 数据采样存储模块, ASCII码转换模块。为了更好的理解RXD工作流程, 下面先介绍一下异步串行通信的数据传输格式。每发一帧数据包含一位起始位、8位数据位、一位奇偶校验位和一位停止位。当发送端处于空闲状态时, 一直发送高电平。每次开始发送新数据前首先发送一位低电平的起始位, 这样检测端检测到低电平就能判断有效数据已开始发送, 准备接收数据。之后接收8位有效数据, 由低位到高位存储。根据收发方约定, 可以采用无奇偶校验位方式, 发送数据率为9600波特。其发送格式如图2。分频模块:FPGA系统的主时钟为50M, 而采样频率为9600*4hz, 为了提供采样时钟, 可以将主时钟进行1302分频。分频可由计数器完成, 计数器以1302为周期循环计数, 每次计到1302后采样时钟置高, 其它时刻都置低。数据采样存储模块:如果连续2次采样都为低电平, 则判断第3次状态, 也为低电平此时采集的就是起始位。然后记录采样时钟, 4个时钟以后采集下个数据, 这时的判决发生在有效数据的中间, 不会发生误判。将数据存储于8位的移位寄存器当中。存储8位数据以后就完成了一个有效数据的提取, 发送端置高等待下次起始位的到来。

ASCII码转换模块:由于发送端发的是数据的ASCII码, 8位数据代表一个0或者1。30H代表0, 31H代表1, 所以在TXD将数据传送给数据处理单元之前先要完成ASCII码的转换, 将转换后的0、1发给下一单元。RXD的工作流程是接收端一直检测PC的发送数据是否为起始位0, 一旦检测到就进行有效数据位的接收, 因为有效数据为8位, 所以要判断接收的位数, 每结束一个比特计数加一, 当计到8时判定接收完毕, 将接收的数据进行ASCII码转换, 然后传送给数据处理模块进行处理。由于数据处理部分在不同系统中完成的工作各不相同, 本文不再赘述。

2.2 FIFO模块

FIFO (First In First Out) 是一种先进先出的数据缓存器, 即读取数据时优先读取最早存入的数据。本系统调用的ISE自带的FIFO IP核, 保证了速度与功耗的最优, 并节省了开发周期。使用FIFO需要设置一些参数。数据宽度设置为1, 即存储的数据宽度是1位。数据深度是指存储器可以存储数据的个数, 设置要考虑系统要测试的代码长度, 如果要测试1000个发送数据的编码是否正确, 那么编码后产生了2000个数据, 深度可以设置为2048, 留有一定富裕度。读写使能信号由分别由TXD和数据处理单元给出。每次FIFO时钟的上升沿到来时, 如果读写使能为高就进行相应的读写操作。数据处理单元每次处理一个数据后就向FIFO发送一个写使能信号, 告之存储一个数据, TXD的操作类似。

2.3 TXD模块

TXD模块负责把处理后的数据从FIFO中读出, 将其传送给MAX232完成电平转换, 返回给PC分析通过验证处理后的的数据是否符合设计要求来证明收发系统的合理性。TXD给FIFO提供读使能信号rd_en, 当数据处理单元完成一个数的编码后存储器中就存入有效值, 这之后TXD就可以置rd_en为高提取存储器数据。存储器中数据是一位的0或1, 发送给PC接收的数据需要符合异步串行通信的格式。例如发送一个0应先发一位起始位0, 再发送0的ASCII码00001100, 最后发送终止位1。

3 FPGA主要模块的仿真分析

3.1 RXD模块仿真

如图3所示, RXD单元的接收串行信号为rxd, 首先由空闲状态1转变为起始位0.clk为采样时钟, 是接收数据的4倍, 图中可以看到每4个时钟采样一位有效数据, 每个采样点发生在有效数据的中间。rcv_shif是接收8位数据的中间移位寄存器, 每次采样数据时, 移位寄存都移位存储一个数据到最高位。当完成8位数据的接收时, 将其转换为0或1.如图, rxd为31H, 转换后的数据code是1, 同时发送一个active高电平通知数据处理单元进行接收并处理。

3.2 FIFO存储器模块

如图4所示, din是数据的输入端, 依次输入8个不同数据, wr_en为写使能端, 在时钟上升沿前置位, 读时钟一直允许置高, 可以看出dout读数据端按顺序输出写入的数据, 符合FIFO的工作原理。

4 结论

FPGA芯片越来越广泛的应用于电子设计当中, 它与PC的通信完成设计的调试起着重要作用。本文实现了FPGA与PC的串口通信系统, 通过软件仿真和下载测试验证了设计的合理性, 系统可移植性强, 对于其他场合只需改变内部处理单元的功能即可使用。

参考文献

[1]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社, 2008.

[2]周润景.FPGA/CPLD数字系统设计实例[M].北京:电子工业出版社, 2007.

[3]王旭东.MATLAB及其在FPGA中的应用[M].北京:国防工业出版社, 2008.

串口与网络通信 篇2

摘要:通过多串口通信技术在金刚石合成控制系统中的应用,讨论了32位Windows操作系统下,VC多串口通信技术的设计与实现方法,并运用面向对象方法和多线程技术设计了一个比较完善的串口通信类。阐述了用VC开发上位机与PLC之间的串口通信程序设计方法和实现技术。

关键词:串口通信;面向对象方法;多线程;PLC

1引言

传统的金刚石合成机控制系统是由一个PLC和一个可显示终端构成。这种传统的控制系统一般具有如下缺点:

(1)系统所有的工作都由PLC完成,其控制精度较差,致使合成的金刚石质量较差;

(2)显示终端的平面尺寸过小,这一方面使得操作人员观察系统的状态很不方便,另一方面?也常常会引起误操作;

(3)金刚石合成工艺复杂,需控制的参数很多,但原控制系统不能对参数进行保存,这样在根据不同产品和工艺要求对部分参数进行调整时,每次都必须重新设置所有的参数,操作非常麻烦;

(4)界面不友好;

(5)不能通过控制系统自动考核操作人员的工作质量。

为了提高控制精度、方便操作,开发新的控制系统迫在眉睫。笔者针对以上问题,将IPC与PLC有机结合在一起,开发了一套新的控制系统。通过该系统可在上位机(IPC)和PLC之间通过RS-232与RS-485进行大量串口通信。

2VC串口通信分析

在32位Windows系统下使用VC开发串口通信程序通常有如下4种方法:

(1)使用Microsoft公司提供的名为MSCOMM的通信控件;

(2)直接使用Windows应用程序接口(API);

(3)自行设计一个串口通信类;

(4)通过开发一个ActiveX控件来实现串口通信功能。

在上述几种方法中,实际上还是使用WindowsAPI函数,然后把串口通信的细节给封装起来,同时提供给用户几个简单的接口函数。上述几种方法各有优缺点,但在实际情况下,大多数编程人员喜欢使用API函数自行设计串口通信类。

用WindowsAPI函数进行串口通信的编程流程如图1所示。其中打开串口是确定串口号与串口的打开方式;初始化串口用于配置通讯的波特率、每字节位数、校验位、停止位和读写超时等;读写串口用于向串口进行发送数据和从串口接收数据;关闭串口用于将串口关闭并释放串口资源(Windows系统下串口是系统资源)。

由于绝大多数控制系统中串口通信是比较费时的,而且监控系统还要进行数据处理和显示等,所以一般采用多线程技术,并用AfxBeginThread函数创建辅助线程来管理串口通信,这样,主进程就能在进行串口读写的同时,处理数据并完成用户指令的响应,但是设计时一定要处理好数据的共享问题。

串口读写既可以选择同步、异步方式,也可以选择查询、定时读写和事件驱动方式。由于同步方式容易造成线程阻塞,所以一般采用异步方式;而查询方式要占用大量的CPU时间,所以一般采用定时读写或者事件驱动方式,事件驱动方式相关文献较多,故此重点讨论定时读写方式。定时读写方式就是上位机向下位机发送固定格式的数据,在下位机收到后向上位机返回状态信息数据。由于数据的传输需要时间,所有上位机发送数据后就调用_sleep()函数进行休眠,休眠的时间可根据需要进行不同的设置。这样,可以节省CPU时间,以使系统能够很好地进行监控工作和处理其它事务。

3VC串口通信的设计与实现

笔者在Windows系统下,采用面向对象的方法和多线程技术,并使用VisualC6.0作为编程工具开发了一个通用串口通信类CSerialPort,该CSerialPort类封装了串口通信的基本数据和方法,下面给出CSerialPort类的简单介绍。

CSerialPort类头文件中的主要成员变量和成员函数如下:

ClassCSerialPort

{

private:

HANDELm_hPort;

DCBm_Dcb;

COMMTIMEOUTSm_TimeOuts;

DWORDm_Error;

Public:

CSerialPort;??//构造函数

virtual~CSerialPort();??//析构函数

//InitPort()函数实现初始化串口

BOOLInitPort(

char*str=“com1”,

UINTBaudRate=9600,

UINTParity=0,

UINTByteSize=8,

UINTStopBits=1,

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

DCBGetDCB();?//获得DCB参数

//SetDCB()函数实现设置DCB参数

BOOLSetDCB(

UINTBaudRate=9600,

UINTParity=0,

UNITByteSize=8,

UINTStopBits=1);

//GetTimeOuts()函数获得超时参数

COMMTIMEOUTSGetTimeOuts();

//SetTimeOuts()函数设置超时参数

BOOLSetTimeOuts(

UINTReadMultiplier=0,

UINTReadConstant=0,

UINTWriteMultiplier=10,

UINTWriteConstant=1000);

//WritePort()函数实现写串口操作

voidWritePort(HANDLEport,CString);

CStringReadPort(HANDLEport);//读串口操作

BOOLClosePort();?//关闭串口

};

下面对该类的重要函数作以说明:

(1)在构造函数CSerialPort()中已对该类的数据成员进行了初始化操作。

(2)初始化串口函数InitPort()函数用于完成串口的初始化工作,包括打开串口、设置DCB参数、设置通信的超时时间等。

打开串口使用CreateFile()函数,其中InitPort()函数中的第一个参数为要打开的串口,通常将该参数赋给CreateFile()函数中的第一个参数;设置DCB参数应调用该类中的SetDCB()函数,并将InitPort()函数中的第2至第5参数赋给SetDCB()函数;设置通信的超时时间应调用该类中的SetTimeOuts()函数,并将InitPort()函数中的第6至第9参数赋给SetTimeOuts()函数。另外,该串口是系统资源,应该根据不同要求对其安全属性进行设置。

(3)SetDCB()函数用于设置DCB参数,包括传输的波特率、是否进行奇偶校验、每字节长度以及停止位等。

(4)SetTimeOuts()函数用于设定访问的超时值,根据设置的值可以计算出总的超时间隔。前面两个参数用来设置读操作总的超时值,后面两个参数用来设置写操作总的超时值。

(5)WritePort()函数用来完成向串口写数据。由于该系统需要对多个串口进行通信,所以首先应把串口号作为参数传递给该函数;接着该函数把按参数传递过来的、要发送的数据进行编码(也就是加入校验,这样能减少误码率),然后再调用WindowsAPI函数WriteFile()并把数据发送到串口。

(6)ReadPort()函数用来完成从串口读数据,由于有多个串口,所以应把串口作为参数传递进来,然后调用API函数ReadFile(),并把下位机发送到串口,数据读出来放到缓存里面,接着对数据进行处理以将其变换成字符串

(CString)类型并返回。

(7)GetDCB()函数主要用于获得串口的当前配置,可通过调用API函数GetCommState()来实现,然后再进行相应的处理。

(8)GetTimeOuts()函数用于获得访问超时值。

(9)ClosePort()函数可用来关闭串口。因为在Windows系统中串口是系统资源,因而在不用时,应将其释放掉,以便于其它进程对该资源的使用。

4基于串口通信的金刚石合成控制

金刚石合成控制系统采用主从式控制方式,上位机为微机、下位机为PLC。上位机的主要功能是对系统进行实时监控,下位机的主要功能是对系统进行实时控制。上位机采用Windows98操作系统,其监控程序可用VC开发,上、下位机之间通过RS-232与RS-485串口进行通信,它们之间采用的通信波特率为9600bps,无奇偶校验,每字节8位,并有1位停止位。上、下位机之间传送的数据格式可自己定义。由于传输数据时可能会引起错误,所以加入了校验算法。该系统通过上位机向下位机发送数据,下位机收到后就把当前系统的状态参数返回给上位机。由于该系统中所控制的参数具有迟滞性,所以应采用定时发送数据的方法来采集现场状态信息。

上位机编程时,可用VC6.0生成一个对话框类型的`程序框架,然后将自己编写的CSerialPort类加入到该工程中,并在主界面类?CCrystal?中添加一个CSerialPort类的成员变量serial。当监控系统开始工作时,可用AfxBeginThread??函数创建辅助线程来管理串口通信,当调用CSerialPort类中的WritePort??函数向串口发送数据后,可调用_sleep??函数使辅助线程休眠一段时间,以便使PLC有充分的时间返回数据;接着再调用CSerialPort类中的ReadPort()函数并从串口读数据,然后再调用_sleep()函数使辅助线程再休眠一定的时间。这样设计后,当进行串口通信时,主线程就能继续完成监控功能和处理其他事务。辅助线程函数的主要代码如下:

UINTSerialPro(void*param)

{

Ccrystal*mdlg=(Ccrystal*)param?

CStringstr;

intflag=1;

//如果初始化串口失败返回

if(!InitPort(“com2”))

{AfxMessageBox(“打开串口2失败”);

return0;

}

//循环读写串口,直到结束

while(flag)

{

//这里把要发送的数据传送给变量str

……

//向串口写数据

mdlg->serial.WritePort(hport,str);

//让辅助线程休眠100ms

_sleep(100);

//从串口读数据并赋给变量str

str=mdlg->serial.ReadPort(hport);

//这里把从串口得到的数据进行处理

……

5结束语

串口与网络通信 篇3

关键词:DSP;PC104;串口通信;VC++6.0;MSComm控件

中图分类号: TP311文献标识码:A文章编号:1009-3044(2007)12-21697-02

Design of Serial Communication Between PC and TMS320F2812 DSP

QI Yuan-qin,CHENG Yin-hang

(Dep. of Electronic and Information Engineering, Beijing Jiaotong University,Automation Research Institute of Transportation on science and technology,Beijing 10044, China)

Abstract:This paper introduces the method of Serial Communication between PC and TMS320F2812 DSP, which is realized by using the SCI module of TMS320F2812 and MSComm supplied by VC++6.0. The hardware and software design of Serial Communication is presented .The control information and speed data between robot center processor PC104 and first floor movement controller DSP are accurately received and sent.

Key words:DSP;Serial Communication;VC++6.0,SCI module;MSComm

1 引言

我们自行设计开发的移动机器人的硬件结构采用PC104为中心处理器,CCD摄像头和图像采集卡为视觉导航,TMS320F2812为运动控制器,硬件结构。如图1。视觉导航系统捕捉前方路径信息,在PC104上的VC++6.0环境中建立路径跟踪模块,实现路径信息的处理及控制信号的产生。PC104通过Visual系列的通信控件(MSComm控件)发送控制信息到TMS320LF2812的SCI(串行通信模块),同时接收SCI中的速度数据。TMS320F2812通过SCI接收控制信息,驱动放大电路控制直流电机的运动,同时将光电编码器采集到的机器人当前速度数据发送至PC104。因此,中心处理器PC104与底层运动控制器DSP之间高效、准确的串口通信是实现移动机器人自主运行的重要技术之一。

图1 移动机器人硬件结构图

2 TMS320LF2812

TMS320F2812是基于TMS320C2xx内核的定点数字信号处理器,器件上集成了多种先进的外设,为电机及其它运动控制领域应用的实现提供了良好的平台[1]。F2812有16通道的12位A/D模块,串行外设接口(SPI),串行通信接口(SCI)和两个事件管理器模块(EVA和EVB)。其中,两个事件管理器模块为电机及功率变换控制提供了良好的控制功能。

SCI是采用双线通信的异步串行通信接口,主要采用标准非归0(NRZ)数据格式,可以与CPU或其他通信数据格式兼容的异步外设进行数据通信。SCI具有可編程的64K种不同的波特率,可编程的1~8位数据长度;奇偶校验、过载、帧错误和间断监测共4个错误检测标志;空闲线和地址位两种唤醒多处理器方式;半双工或者全双工操作;可工作于中断或者查询方式,具有独立的接收和发送中断使能。

3 串口通信的硬件实现

由于PC机串口和TMS320F2812的串口在逻辑电平上不兼容,不能直接相连使用。两个串口之间需要进行相关的转换后才能正常的通信。

目前,一般PC机上的串行通信口COM1和COM2采用的是RS-232协议,使用EIA-RS-232电平,是以正负电压表示逻辑状态。而TMS320F2812采用的是TTL电平,是以高低电平表示逻辑状态。故本文采用了德州仪器公司(TI)推出的一款兼容RS232标准的MAX232芯片实现TTL←→EIA-RS-232的双向电平转换。

同时,由于本文中的TMS320F2812属于低功耗,采用的是+3.3V供电,而MAX232芯片采用+5V供电,所以在MAX232芯片与TMS320F2812之间需加上TI公司提供的典型电平匹配电路。本系统中采用了1个二极管(1N4007)和3个电阻进行了电平匹配。此接口电路简单,可靠性较高。连接电路如图2。

图2 TMS320F2812与PC104的串口硬件连接

4 串口通信的软件设计

PC104有两个串行通信口COM1和COM2, 本文采用的是COM1。通过VC++6.0中的串行通信编程的控件MSComm, 采用事件驱动方法发送控制速度,接收实际运动速度。另一方面,底层的TMS320F2812的SCI串口模块使用的是SCIA,采用中断的方法进行数据的接收和发送。

4.1 PC机串口通信软件的设计

VC++6.0环境中可以采用API函数,MSComm控件两种方法实现串口通信,后者更加简单,易于实现,故本文采用MSComm控件。MSComm控件是Microsoft公司提供的简化Windows下串口通信编程的Active X控件,它为应用程序提供了通过串行接口收发数据的简便方法,一种是事件驱动法,另一种是查询法。MSComm 控件可以采用查询或事件驱动的方法从端口获取数据。本文使用的是事件驱动方法,有事件(如接收到数据)时通知程序,这其实是一种软件中断的方法。

使用MSComm控件实现串口通信的基本步骤:

(1)首先利用VC++6.0中的MFC Wizard产生一个支持Active X的应用程序框架,在Project中插入MSComm控件。

(2)设置MSComm控件的属性,初始化串口。

采用COM1串口,波特率9600,奇校验位,8个数据位,1个停止位;保持与下位机使用相同的通讯格式,否则是不能建立正确的串行通讯的。

串口初始化:

m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);

if(m_MSComm.GetPortOpen())

//如果串口是打开的则关闭串口

{ m_MSComm.SetPortOpen(FALSE); }

m_MSComm.SetCommPort(1);//选择COM1

m_MSComm.SetInputMode(1);//以二进制方式读写数据

m_MSComm.SetInBufferSize(1024); //设置接收缓冲区大小

m_MSComm.SetOutBufferSize(512); //设置发送缓冲区大小

m_MSComm.SetInputLen(8);

//每次从当前接收区数据读取8个字符

m_MSComm.SetRThreshold(8); //接收缓冲区有8个字符时,将引发接收数//据的OnComm事件

m_MSComm.SetSettings("9600,o,8,1"); //波特率9600,奇校验位,8个数据位,1个停止位

if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开

{ m_MSComm.SetPortOpen(TRUE);//打开串口 }

else

{ AfxMessageBox("Open Serial Port Failure!"); }

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

(3)编写程序,并为程序主对话框建立响应MSComm事件的处理函数OnCommComl()。

OnComm事件是通信控件唯一的事件,此事件可用来处理所有与通信有关的事件,每当有新字符到达,端口状态改变,发生错误其中任一事件发生时,MSComm控件将触发OnComm事件,而应用程序在捕获该事件后,通过检查MSComm控件的CommEvent属性可以获知所发生的事件或错误,从而采取相应的操作。

4.2 SCI模块串口通信软件的设计

TMS320F2812串口通信的软件开发利用DSP软件开发集成开发环境CCS2.0(Code Composer Studio)。在CCS中,进行了SCI模块相关寄存器的设置以及开发、调试C语言程序实现数据的处理、接收及发送。

本系统为单机通信,采用空闲线多处理器模式,不使用SLEEP位;数据在定时器中断子程序中发送,在SCI接受中断子程序中接收数据;采用的通信格式为9600波特率,8位数据位,1位停止位,奇校验。

SCI模块实现串口通信的基本步骤:

(1)设置GPIO功能:

GpioMuxRegs.GPFMUX.all=0x0030;

//设置相应的引脚为SCI引脚

(2)初始化SCI模块寄存器:

SciaRegs.SCICCR.all=0x0027;;

//一个停止位,禁止自测试模式,奇校验,//8位字符,采用空闲线协议

SciaRegs.SCICTL1.all= 0x0003;

//使能TX,RX引脚和SCICLK,

//禁止RX ERR,SLEEP,TXWAKE

SciaRegs.SCICTL2.bit.TXINTENA=1;

SciaRegs.SCICTL2.bit.RXBKINTENA=1;

SciaRegs.SCIHBAUD=0x0001;

//波特率高8位

SciaRegs.SCILBAUD=0x00E7;

//波特率高8位,设置波特率为9600

SciaRegs.SCICCR.bit.LOOPBKENA=0;

//禁止自测试模式

SciaRegs.SCICTL1.all=0x0023;

//设置完成使能SCI模块

SciaRegs.SCIFFTX.all=0xE028;

//初始化SCI FIFO

SciaRegs.SCIFFRX.all=0x2028;

SciaRegs.SCIFFCT.all=0x00;

(3)调用相关程序:

SCI进行串口通信可采用查询或中断两种模式来实现,本文采用中断方式实现。

TMS320F2812串口通信接口模块有独立的接收器和发送器中断向量,同时也可以设置发送器和接收器中断的优先级。当RX和TX中断申请设置相同的优先级时,接收器比发送器具有更高的优先级,这样可以减少接收超时错误。SCIA接收中断为INT9.1,发送中断为INT9.2。因此在中断服务子程序中可以通过检查外设中断向量寄存器的值来转入相应的接收和发送中断处理程序。

PieVectTable.RXAINT=&sciaRxFifoIsr;

//调用接收中断子程序

PieVectTable.TXAINT=&sciaTxFifoIsr;

//调用发送中断子程序

…………………………………

…………………………………

PieCtrlRegs.PIEIER9.bit.INTx1=1;

// PIE Group 9, INT1

PieCtrlRegs.PIEIER9.bit.INTx2=1;

// PIE Group 9, INT2

(4)编写子程序:

interrupt void sciaTxFifoIsr(void); //发送中断子程序

interrupt void sciaRxFifoIsr(void);//接收中斷子程序

5 结束语

本文设计了一种TMS320F2812与PC104之间串口通信的实现方法,给出了软件编程与硬件电路。在自行研究设计的移动机器人平台上,实现了中心处理器PC104上使用MSComm控件,使端口与底层控制器TMS320F2812进行有效的发送、接收控制信息与速度信息,从而实现移动机器人运动的控制。

参考文献:

[1]苏奎峰.TMS320F2812原理与开发[M].北京:电子工业出版社,2005.

[2]刘和平.TMS320LF240xDSP C语言开发应用[M].北京:北京航空航天大学出版社,2003.

[3]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2004.

[4](美)德州仪器著,彭启琮等编译.TI DSP集成开发环境

串口与网络通信 篇4

串行接口的应用非常广泛, 为实现串口通信功能一般使用专用串行接口芯片, 但是这种接口芯片存在体积较大、接口复杂以及成本较高的缺点, 使得硬件设计更加复杂, 并且结构与功能相对固定, 无法根据设计的需要对其逻辑控制进行灵活的修改。介绍了一种采用FPGA实现串口通信的方法。

1 串口通信协议

对一个设备的处理器来说, 要接收和发送串行通信的数据, 需要一个器件将串行的数据转换为并行的数据以便于处理器进行处理, 这种器件就是UART (Universal Asynchronous Receiver/Transmitter) 通用异步收发器。作为接口的一部分, UART提供以下功能:

1.1 将由计算机内部传送过来的并行数据转换为输出的串行数据流;

1.2 将计算机外部来的串行数据转换为字节, 供计算机内部使用并行数据的器件使用;

1.3 在输出的串行数据流中加入奇偶校验位, 并对从外部接收的数据流进行奇偶校验:

1.4 在输出数据流中加入启停标记, 并从接收数据流中删除启停标记。

2 UART模块设计

UART主要由UART内核、信号检测器、移位寄存器、波特率发生器、计数器、总线选择器和奇偶校验器7个模块组成。 (见图1)

2.1 UART内核模块

UART内核模块是整个设计的核心。在数据接收时, UART内核模块负责控制波特率发生器和移位寄存器同步的接收并且保存RS-232接收端口上的串行数据。在数据发送时, UART内核模块首先产生完整的发送序列, 之后控制移位寄存器将序列加载到移位寄存器的内部寄存器里, 最后再控制波特率发生器驱动移位寄存器将数据串行输出。

2.2 信号检测模块

信号检测器用于对RS-232的输入信号进行实时检测, 一旦发现新的数据则立即通知UART内核。需要注意的是, 这里所说的RS-232输入输出信号都指经过电平转换后的逻辑信号, 而不是RS-232总线上的电平信号。

2.3 移位寄存器模块

移位寄存器的作用是存储输入或者输出的数据。

2.4 波特率发生器模块

由于RS-232传输必定是工作在某种波特率下, 比如9600, 为了便于和RS-232总线进行同步, 需要产生符合RS-232传输波特率的时钟。

2.5 奇偶校验器模块

奇偶校验器的功能是根据奇偶校验的设置和输入数据计算出响应的奇偶校验位, 它是通过纯组合逻辑来实现的。

2.6 总线选择模块

总线选择模块用于选择奇偶校验器的输入是数据发送总线还是数据接收总线。

2.7 计数器模块

计数器模块的功能是记录串行数据发送或者接收的数目, 在计数到某数值时通知UART内核模块。

3 UART程序设计

UART完整的工作流程可以分为接收过程和发送过程两部分。

接收过程是指UART监测到RS-232总线上的数据, 顺序读取串行数据并将其输出给CPU的过程。当信号监测到新的数据 (RS-232输入逻辑变为0, 即RS-232传输协议的起始位) 就会触发接收流程。首先UART内核会重置波特率发生器和移位寄存器, 并且设置移位寄存器的工作模式为波特率模式, 以准备接收数据。其次, 移位寄存器在波特率时钟的驱动下工作, 不断读取RS-232串行总线的输入数据, 并且将数据保存在内部的寄存器内。接收完成后, UART内核会对已接收的数据进行奇偶校验并且输出校验结果。最后, UART内核会重置信号检测器, 以准备进行下一次数据接收。

发送过程是由加载和发送两个步骤组成。加载步骤是UART内核按RS-232串行发送的顺序将起始位、数据位、奇偶校验位和停止位加载到移位寄存器内, 这个过程工作在系统时钟下, 相对于RS-232传输速度来说非常快。完成加载步骤后, UART内核会重置波特率发生器, 并且设置移位寄存器工作在波特率模式下, 于是移位寄存器便在波特率时钟的驱动下依次将加载的数据发送到RS-232的发送端TXD, 这样就产生了RS-232的数据发送时序。

4 FPGA实现

把实验板上电, 下载完成后在PC上打开串口调试助手, 在上方接收区的串口选择COM1, 波特率选择115200, 校验位选择无校验位, 8个数据位1个停止位。每按下reset, 可以在接收区看到FPGA通过串口向PC发送的一个字符串“welcome to wzu”。测试结果验证了程序的准确性。

5 结论

采用FPGA实现串口通信功能将给产品设计研发带来极大方便, 并且可以降低成本, 这种采用可编程逻辑器件代替硬件实现协议功能方案也是未来电子产品开发的发展趋势。

参考文献

[1]韩德红.基于FPGA的串口控制器设计与实现[J].空军雷达学院学报, 2008, 6 (02) :113-116.

[2]蒋璇, 臧春华.数字系统设计与PLD应用[M].北京:电子工业出版社, 2005.

RS232串口通信原理简介 篇5

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

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

波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信。

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

停止位:用于表示单个包的最后一位。典型的值为1,1.5和2位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

串口与网络通信 篇6

关键词:串口通信;监控;VB6.0

中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)18-31487-01

VB6.0 Equipment with Serial Communication and Monitoring Capabilities

GU Huan-yu

(Shanghai Telecom Technology Development Ltd.,Shanghai 200065,China)

Abstract:In practical applications,the computer serial port and external serial devices commonly used data transmission channel.This paper introduces the basic principles of serial communication function and presented in windows environment serial communication under the general methods and steps, and Visual Basic 6.0 programming under.

Key words:Serial Communication;Monitor;VB6.0

1 引言

计算机串口是通过串行通讯方式进行通信,即一条信息的各位数据被逐位按顺序传送。串行通讯的特点是:数据位传送按位顺序进行,最少只需一根传输线即可完成,成本低、速度较慢,距离可以从几米到几千米。数据通讯量不是很大时,在工控领域广泛地使用串口通信对设备进行监控。

2 问题描述

为了完成对IP网关相应设备是否正常的监视,包括监视输入线路馈电是否正常,控制前端机完成对使用线路与备用线路之间的切换,随时查询控制状态和监视结果,设计计算机串口通信程序。

通讯指标:通信方式为波特率9600bps的主从半双工串行方式,数据包内字节间最大时隙1.5ms,前端机对主站下行指令的最大响应时间为10ms。

数据包格式为:

(3)校验字为长度字和数据字符段的模256算术和。

3 设计思路

系统主要实现以下功能,即对设备发送读指令,读取设备状态;对设备发送控制指令,控制设备动作。下面以N=0(设备号为0)为例,简单说明程序设计的思想。

(1)系统初始化,系统对N=0的设备发出写控制字命令,所有线路走A路。监测前端机返回状态。

(2)监测线路状态,向前端机发出读状态字命令,分析前端机返回状态,并通过可视界面即时显示。

(3)控制设备:如切换电路等,由系统向设备发出写控制字命令,控制设备动作,通过监测前端机返回状态,判断动作是否成功完成。

4 系统实现

随着Windows的广泛应用,越来越多的微机用户已习惯于Windows操作系统。现在有诸多应用软件都可以帮助我们比较方便实现以上功能,编程工作量相对较小,只需进行主要应用功能的编程和少量界面控制的编程。VB的通讯控件友好、功能强大,编程速度快,加上VB的易学、易用,快速开发等特点,数据通讯量不是很大时,在单片机通讯领域广泛地使用VB开发PC上层通讯软件。下面以VB6.0为例简要说明串口通信的实现。

在VB的控件工具箱中,提供了一个使用非常方便的串行通讯控件MSComm,它全面的提供了使用RS-232串行通讯上层开发的所有细则,它既可以使用查询方式又可以使用事件驱动方式来完成串行通讯。在窗体中加入MSComm控件, 取名为MSComm1, 加入Command命令按钮并取名为initialize. 写入以下代码实现系统初始化:

Private Sub initialize_Click()

If MSComm1.PortOpen = True Then MSComm1.PortOpen = False

MSComm1.InBufferSize = 40 '设置MSComm1接收缓冲区为40字节

MSComm1.CommPort = 1

'设定Com1

If MSComm1.PortOpen = False Then

MSComm1.Settings = "9600,n,8,1"

'9600波特率,无校验,8位数据位,1位停止位

MSComm1.PortOpen = True

'打开串口

End If

MSComm1.OutBufferCount = 0

'清空发送缓冲区

MSComm1.InBufferCount = 0

'清空接收缓冲区

outL(0) = "10"(十进制)

outL(1) = "18"

outL(2) = "208"

outL(3) = "0"

……

outL(19) = "0"

outL(20) = "226"

outL(21) = "13" (outL数组设为Byte 数据类型,存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。)

MSComm1.Output = outL

With MSComm1

.InputMode = comInputModeBinary '设置接收数据模式为二进制形式

'为了实现实时监测功能,接收数据的读取要尽可能的快速,则设置MSComm1的属性如下:

.RThreshold = 1'设置接收一个字节产生OnComm事件

.InputLen = 1 '设置Input 一次从接收缓冲读取字节数为1

.OutBufferCount = 0 '清除发送缓冲区

MaxW = -99 '最大值赋初值

MinW = 99 '最小值赋初值

w = 0 '数据个数计数器清零

If .PortOpen = False Then'判断通信口是否打开

.PortOpen = True '打开通信口

If Err Then'错误处理

MsgBox "串口通信无效"

Exit Sub

End If

End If

End With

End Sub

控件MSComm提供了一个事件OnComm,该事件可以截取串口的任何消息,转入事件处理程序。OnComm可以扑获通讯时发生的串口事件和错误信息,当有串口事件或错误发生时,VB会立刻触发一个OnComm事件,程序就会自动转入OnComm事件处理程序中。MSComm1_OnComm的事件处理程序只处理 comEvReceive事件,首先判断帧数据的开始字节,关闭OnComm接收事件,然后接收数据字节。具体源代码如下:

Dim ab(6) As Byte '字节数据类型数组,用来存储接收到的一组字节数据

Dim av As Variant '用来从接收缓冲区读取数据

Private Sub MSComm1_OnComm()

With MSComm1

Select Case .CommEvent'判断MSComm1通信事件

Case comEvReceive'收到Rthreshold个字节产生的接收事件

av = .Input'读取一个接收字节

ab(1) = av(0)'转换保存到字节数据类型数组

If ab(1) = 10 Then'判断是否为数据开始标志

RThreshold = 0'关闭OnComm事件接收

Do

Loop Until .InBufferCount >= 5

'循环等待MSComm1接收缓冲区>=5个字节

w = w + 1 '计数器累加计数

For i = 2 To 6

av = .Input '读取第二个数据字节(BCD码高位字节)

ab(i) = av(0)'转换保存到字节数据类型数组

Next i

Else

MsgBox "接收数据错误", vbOKOnly, "提示"

Exit Sub

End If

.InBufferCount = 0'清除接收缓冲区

.OutBufferCount = 0 '清除发送缓冲区

End With

End Sub

读状态,响应状态的程序设计也是相似的,但接收到响应状态字需要分析数据。

5 结论

本系统利用VB6.0下的ActiveX控件的串行通信功能,实现了在Windows环境下用单台PC机监控的任务,完成对IP网关相应设备是否正常的监视,监视输入线路馈电是否正常,控制前端机完成对使用线路与备用线路之间的切换,可随时查询控制状态和监视结果。且可结合数据库,纪录通话时间等,模拟交换机功能。整个控制系统灵活方便,具有很大的实用性。

参考文献:

[1]范逸之,陈立元.Visual Basic与RS-232串列通信控制(最新版).清华大学出版社,2002.

[2]Evangelos Petroutsos,Kevin Hough. Visual Basic 6高级开发指南.电子工业出版社,1999.

串口通信新模型的研究与C#实现 篇7

串口即串行通信接口, 在工业控制领域, 它是连接计算机和外部串行设备的常用数据传输通道。大量的智能仪器或数据采集模块都带有串口, 通过相应的通信协议和串口通信程序, 可以将测试、采集的数据传输到上位工控机, 以满足各种形式后续数据处理的要求。同时上位监控系统也会根据系统运行情况通过串口向监控设备发送指令, 调节设备的运行参数等使得生产过程平稳进行。串口通信具有稳定可靠、成本低廉、软件易实现等优点, 是当前工业控制行业运用比较广泛的通信方式。

传统的串口编程要综合考虑底层通信细节和串口通信协议。这一方面导致调试串口的时候要对这两种情况进行分析, 增加了调试的困难;另一方面二者深度耦合, 当串口通信协议改变的时候整个通信程序要重写, 不符合现代编程的模块化思想。鉴于此, 参考I/O完成端口模型 (IOCP) 建立了一个适用于协议性串口通信的新模型, 将底层通信的细节进行封装并与通信协议分离, 很好地解决了上述问题。

2 串口通信新模型

2.1 完成端口

IOCP是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。通过将完成端口与任意I/O句柄 (文件或Socket等) 关联, 用户可以通过完成端口异步地获取并处理I/O的结果。

如图1所示, 在完成端口上建立几个并行的工作线程, 它们为到达完成端口的I/O任务提供服务。当有I/O任务到达时, 如果有可用的工作线程, 则激活该线程, 如果没有可用工作线程, 则将I/O任务加入到请求队列。该队列采用先进先出 (FIFO) 的策略, 保证这些请求得到公平的服务。工作线程的建立和请求队列的FIFO策略, 减少了CPU在不同线程间切换的次数, 降低线程上下文切换所造成的开销[2]。

2.2 串口通信新模型

借鉴IOCP的核心思想, 模型提出了一个协议性串口通信的最小单位——“通信元”。通信元包含发送数据缓存区、接收数据缓存区、接收数据长度、超时时间间隔、超时处理函数和事件处理函数6个部分。其中数据缓存区用来存放发送数据和接收数据, 超时时间间隔用来设置串口通信超时时间, 超时处理函数对超时情况进行处理, 而事件处理函数则对接收到的数据进行处理。

模型维护一个通信元队列, 当进行串口通信时先定义好通信元然后提交到通信元队列, 队列根据先进先出的原则进行处理。当某个通信元出队时, 模型先发送该通信元发送数据缓存区的数据, 接着根据接收数据长度对串口数据进行接收, 如果超时则调用超时处理函数, 否则进行接收事件处理。通过该模型, 将每次串口通信的过程简化成一个通信元的处理过程, 用户只需要定义好通信元提交到队列中, 模型即自动处理底层通信的细节, 简化了处理流程并提高了运行效率。

3 C#实现

C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来, 继承了其强大的性能, 同时又以.NET框架类库作为基础, 拥有类似Visual Basic的快速开发能力。C#自.NET 2.0开始提供了Serial Port类实现对串口通信的原生支持, 本模型在这个类基础上进行编程实现。

模型最重要的通信元, 代码如下。

通信元队列处理定义了一个线程专门对通信元队列进行处理。线程有两个阻塞信号, 一个用来判断队列是否为空, 一个用来判断当前通信元是否处理完毕。代码如下。

串口接收函数模型自动根据通信元中接收数据长度对串口数据进行接收。代码如下。

其他包括串口发送函数、通信元入队、出队函数、定时器设置等由于比较简单不在此进行介绍。

4 结语

该模型主要借鉴了I/O完成端口的思想, 通过将协议性串口通信的每次通信过程抽象成通信元提交给通信元队列进行自动处理, 从而实现对底层通信细节的封装和串口的模块化。

参考文献

[1]Jeffrey Richter.Advanced Windows (3rd edition) [M].USA:Microsoft Press, 1997.

[2]Jim Beveridge, Robert Wiener.Multithreading Applications inWin32:The Complete Guide to Threads (Addison-WesleyMicrosoft Technology Series) [M].USA:Addson-WesleyProfessional, 1996.

[3]Anthony Jones, Jim Ohlund.Network Programming for MicrosoftWindows (2nd edition) [M].USA:Microsoft Press, 2002.

[4]Anthony Jones, Amol Deshpande.Windows Sockets 2.0:WriteScalable Winsock Apps Using Completion Ports[J].MSDNMagazine, Microsoft Press, October 2000:30-35.

单片机与组态王串口通信的设计 篇8

随着工业化要求提高, DCS控制系统发展日趋成熟, 组态软件设计的监控系统逐步普及。组态软件作为平台开发工具可以为用户定制功能。

组态王软件具有友好的人机操作界面、强大的IO设备端口驱动能力, 可与各种PLC、智能仪表、智能模块、板卡、变频器等设备实时通讯。由于在检测大量模拟量的工业现场使用PLC与组态软件通讯势必增加产品成本。而单片机接口丰富, 与A/D转换模块组合可以完成相同的工作, 并且系统可靠、成本低。

2 研究环境

组态王软件内置了通用的单片机通信模块, 客户自己开发的单片机仪表可以挂接在组态王上。组态王与单片机能够正常通讯, 需要组态王6.5监控软件, 以及单片机开发相关的Keil软件和Porteus软件。另外, 初期的研究工作可以利用Virtual Serial Ports Driver XP 5.1虚拟串口软件, 用此软件可以生成一对相互联接的虚拟串口, 这样, 初期的研究工作就在电脑上完成, 省去在硬件电路板上实验的繁琐。

3 PC机与单片机的硬件接口电路

图1是PC机与单片机的硬件接口电路, 在连接过程中单片机的TXD连接虚拟串口的TXD, 单片机的RXD连接虚拟串口的RXD, 注意不要交叉。

通过网上搜索, 用户可以找到了这个VSPD, 它的使用步骤如下:

在first后面选一个串口名, 然后在Second后面再选一个串口名, 然后点一下Add Pair即可。com1串口是真实存在的物理串口, 使用VSPD也可以把com1串口给虚拟了。这里选的是com2串口和com4串口, 选择以后可以看到在左侧的窗口中出现了这样一对互联的串口, 即从com2串口发送数据, 然后com4串口就能接收到, 同样, 从com4串口发送数据, 然后com2串口就能接收到。

4 组态王软件设置

在组态王工程管理器中打开已经创建好的工程, 在工程浏览器树状图中选择“设备—DDE—新建”, 在“设备配置向导”中选择“单片机—通用单片机ASCII—串口”, 给串口设备起个名字, 然后选择com4串口号,

在选择地址时, 需要为自己的单片机设备确定一个地址, 需要看一看地址帮助。如果在同一个串口上连接多个单片机设备, 那么就需要确定究竟与哪一个设备通信, 这就需要有个地址, 这是上面取的地址2.0中的2的由来, 而小数点后面可取0/1, 按组态王的介绍是打包还是不打包, 在这里选择不打包, 所以先取0。

5 程序编写

5.1 通讯口设置

通讯方式:RS-232, RS-485, RS-422均可。

波特率:由单片机决定 (2 4 0 0, 4 8 0 0, 9600and19200bps) 。

字节数据格式:由单片机决定。

注意:在组态王中设置的通讯参数如波特率, 数据位, 停止位, 奇偶校验必须与单片机编程中的通讯参数一致。

5.2 在组态王中定义设备地址的格式

格式:##.#

前面的两个字符是设备地址, 范围为0-255, 此地址为单片机的地址, 由单片机中的程序决定;

后面的一个字符是用户设定是否打包, “0”为不打包、“1”为打包, 用户一旦在定义设备时确定了打包, 组态王将处理读下位机变量时数据打包的工作。

5.3 在组态王中定义的寄存器格式

斜体字dd代表数据地址, 此地址与单片机的数据地址相对应。

注意:在组态王中定义变量时, 一个X寄存器根据所选数据类型 (BYTE, UINT, FLOAT) 的不同分别占用一个、两个, 四个字节, 定义不同的数据类型要注意寄存器后面的地址, 同一数据区内不可交叉定义不同数据类型的变量。为提高通讯速度建议用户使用连续的数据区。

5.4 组态王与单片机通讯的命令格式:

读写格式 (除字头、字尾外所有字节均为ASCII码)

字头:1字节1个ASCII码, 40H。

设备地址:1字节2个ASCII码, 0—255 (即0---0x0ff H) 。

标志:1字节2个ASCII码, bit0~bit7。

bit0=0::读, bit0=1:写。

bit1=0:不打包。

bit3bit2=00, 数据类型为字节。

bit3bit2=01, 数据类型为字。

bit3bit2=1x, 数据类型为浮点数。

数据地址:2字节4个ASCII码, 0x0000~0xffff。

数据字节数:1字节2个ASCII码, 1—100, 实际读写的数据的字节数。

数据:为实际的数据转换为ASCII码, 个数为字节数乘2。

异或:异或从设备地址到异或字节前, 异或值转换成2个ASCII码。

6 结束语

该设计方法实现组态王软件与单片机的实时通信, 已经在实际项目中得到应用。应用的结果表明该设计方法简单有效, 实时性好, 成本低廉, 可以在控制与监控系统中推广应用。

参考文献

[1]刘杰, 王慧.组态王与单片机多机串口通讯的设计[J].电子设计工程, 2009年第7期.[1]刘杰, 王慧.组态王与单片机多机串口通讯的设计[J].电子设计工程, 2009年第7期.

PLC与单片机串口通信的实现 篇9

关键词:plc,单片机,串行通信

随着科学技术、网络通信技术以及自动化技术的快速发展, 可编程逻辑控制器 (plc) 的功能日益强大, plc不仅能够实现逻辑控制, 而且还能实现数字控制、远程控制以及运动控制等, plc逻辑控制器已经广泛应用于电力、交通运输、冶金、汽车制造等等各行各业。

1 单片机与plc串行通信的特点

plc和单片机各有各的优点和长处, 可编程逻辑控制器使用简单、抗干扰能力强、运行可靠, 并具有较强的驱动能力, 可以在条件恶劣的环境下工作, plc主要用于机械设备的控制plc与现在的以太网、adsl等宽带技术相比, plc具有以下优点:plc分布广泛;接入方便;并且plc接入成本比较低, 费用低, 可以减轻用户的负担。单片机体积小、价格低, 并且使用方便灵活, 单片机可以用于办公设备、家用电器、仪器仪表以及传感内部的核心部位。在实际的应用中, 需要把单片机和plc两者结合起来从而可以发挥各自优点和长处。单片机和plc通过通信进行交换信息, 从而组成控制系统, 实现实时采集。

1.1 单片机串口介绍

AT89S52单片机内部含有一个可编程全双工串行通信接口, 具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收, 也可作为一个同步移位寄存器使用。

在进行异步通信时, 数据的发送和接收分别在各自的时钟 (TCLK和RCLK) 控制下进行的, 但都必须与字符位数的波特率保持一致。MCS-51串行口的发送和接收时钟可由两种方式产生, 一种是由主机频率fosc经分频后产生, 另一种方式是由内部定时器T1或T2的溢出率经16分频后提供。

串行口的发送过程由一条写发送缓冲器的指令把数据 (字符) 写入串行口的发送缓冲器SBUF (发) 中, 再由硬件电路自动在字符的始、末加上起始位 (低电平) 、停止位 (高电平) 及其它控制位 (如奇偶位等) , 然后在移位脉冲SHIFT的控制下, 低位在前, 高位在后, 从TXD端 (方式0除外) 一位位地向外发送。

串行口的接收与否受制于允许接收位R E N的状态, 当R E N被软件置“1”后, 允许接收器接收。接收端RXD一位位地接收数据, 直到收到一个完整的字符数据后, 控制电路进行最后一次移位, 自动去掉启始位, 使接收中断标志RI置“1”, 并向CPU申请中断。TI和RI是由硬件置位的, 但需要用软件复位。

1.2 单片机串口控制寄存器

SBUF是两个在物理上独立的接收、发送缓冲器, 可同时发送、接收数据。两个缓冲器只用一个字节地址99H, 可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。串行口对外有两条独立的收发信号线RXD (P3.0) 、TXD (P3.1) , 因此可以同时发送、接收数据, 实现全双工。

1.3 单片机多机通信方案选择

根据需要, 各片单片机有相等的权限, 每块单片机都可设置为主机或从机, 因此单片机的串口应具有双向可选择性。采用两个同相三态门加上一个反相器即可构成这样的接口, 并由单片机的一根引脚控制单片机串口的连接方式。

发送数据区可存放1B~48B的数据, 以空字符'�'作为发送数据结束标志。接收数据时以空字符作为接收有效数据结束标志。通信结束时, 从机发回收发长度作为校验。

2 通信接口电路的设置

2.1 接口电路的设计

rs—232c接口是plc的一个标准的接口, 主要采用eia电平逻辑, 而at89c51主要采用ttl/cmos电平逻辑, 由于这些电平不能互相兼容, 所以应该将eia电平逻辑和ttl/cmos电平进行转换, 在我们使用的max232串行通信芯片中主要是单片集成双rs—232接收器。这种串行通信接口主要采用+—5v的电源供电, 然后外接四支电容形成标准的rs—232通信接口, 从而可以使eia电平和ttl/cmos电平之间的转换, 经过转换之后两者就可以通过rs—232接口实现信号之间的传送。

2.2 串行通信接口的设置

2.2.1 单片机串行口的设置

at89c51单片机内部有一个串行口, txd (p3.1) 为发送端, rxd (p3.0) 为接收端, at89c51主要有scon和pcon两个特殊的寄存器进行控制, 在软件设置的四种通信方式工作时, 串行口主要为8位异步通信接口, 非常适合于集成点对点连接接口的8位数据的传输, 每帧信息有一个起始位、八个数据位和一个停止位, at89c51的cpu晶振为11.0592mhz时, 波特率主要采用9600bps, 波特率主要有串行口方式寄存器smod的状态和定时器t1的溢出率进行确定。

2.2.2 plc串行口参数的设置

plc主要通过进行设置系统寄存器来实现串行接口初始化。比如我们使用的fp1的系统寄存器no.413可以采用指定的rs232串口波特率控制字可以设置为h00, 即一个起始位;8个数据位;一个停止位, 没有奇偶校验位。串口波特率设置的寄存器no.414可以采用指定的rs232c串口波特率, 可以设置为h01, 其中波特率为9600bps;串口方式设置寄存器no.412可以设置为h01, 这种方式成为计算机连接通信方式, 站号设定寄存器可以no.415可以设置为h01。

3 单片机与plc串行口的通信过程

单片机的串行端口有一个数据寄存器sbuf, 在特定的条件下, 如果单片机向sbup写入数据就启动了发送过程, 如果单片机向sbup读入数据就启动了接受过程, 当单片机与plc通过rs—232c串行接口进行通信时, 发送过程主要有单片机向plc发出命令帧格式, 发送过程结束之后, plc做出响应, 同时单片机接受响应帧格式, 这种过程称为接受过程通信过程主要由单片机进行启动和接受不需要运用plc进行编制程序。其中发出命令帧格式主要包括plc站号、特殊标志位以及呼叫字符等, 发出命令帧。

4 单片机与plc的应用

plc是建立在单片机之上的一种科技产品, 单片机是一种集成电路, 单片机可以构成多种多样的应用系统, 可以是大型、中型、小型以及微型的, 而plc是单片机应用系统中的一个特殊的系统, 单片机可以配合外围的电路设计出各种功能, 单片机一般采用c语言、汇编语言等, 这种系统可以应用于各个领域内, 并且也非常安全可靠。单片机的应用系统是非常广泛的, 但是单片机的使用和维护是非常困难的, 从plc和单片机的系统的选用上来讲对于单项的工程采用plc是非常快捷、并且成功率高、可靠性好, 但是成本比较高。对于大量的配套的项目来讲, 采用单片机具有成本低、效益高等优点。随着科学技术不断进步和更新, 在单片机系统中嵌入plc系统性能不仅可以得到保证, 而且使工程项目的效益也得到保证。

目前单片机渗透到我们生活的各个领域, 几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置, 飞机上各种仪表的控制, 计算机的网络通讯与数据传输, 工业自动化过程的实时控制和数据处理, 广泛使用的各种智能IC卡, 民用豪华轿车的安全保障系统, 录象机、摄象机、全自动洗衣机的控制, 以及程控玩具、电子宠物等等, 这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。

单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求, 因而必须采用多机控制的形式, 而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。

构成较大规模的检测、控制系统, 经常要采用多个单片机, 组成可以通信的多机系统。Mcs一51系列单片机为实现多机通信联网设计了方便的串行通信接口功能。将多个Mcs一51单片机组成串行总线形式的相互通道, 通过写单片机的串行控制方式寄存器, 将串行口置成方式2或方式3, 就可以实现主机与分机之间的串行通信。这种多机系统结构简单, 应用广泛, 但它只能实现由主机呼叫分机, 然后实现主机与分机之间的全双工串行通信。我们在监控系统中要求既有主机与分机主动通信, 又有分机与主机主动通信, 这种结构的多机系统就无法满足要求。

5 总结与展望

串行通信是一种应用广泛的通信方式, 本文主要以at89c51单片机和plc之间的串行通信为例进行探讨, 并由此得出串行通信技术是一种实用性强;结构简单、运行可靠、抗干扰能力强, 并且使用于远距离传输的一种通信方式。随着科学技术的不断进步, 对单片机以及plc通信系统不断的开发利用, 进一步将两者有效的结合起来实现通信技术, 从而创造更高的应用价值。

多机协同工作已是单片机发展的一个重要趋势, 目前单片机多机通信的主要方式仍然是主从式多机通信系统。

单片机多机通信的目的是实现分布式处理系统, 单片机多机通信的方式有很多种, 应用前景广阔, 非常具有研究意义!

参考文献

[1]李生军, 李少蒙.《单片机与plc之间的串行通信实现》.化工自动化及仪表, 2010, 37 (2) :78--80.

[2]李辉, 郑宁.《plc与单片机之间的串行通信及应用》.电工技术杂志, 2013 (8) :67--68.

[3]赵勇.《单片机与可编程控制器的串行通信及应用》.西安邮电学院学报, 2010, 10 (1) :36--37.

[4]赵淑玉, 孟宝全.《单片机和plc的应用与串行通信》.科技信息, 2011 (21) :52--54.

串口与网络通信 篇10

FPGA (Field-Programmable Gate Array) , 即现场可编程门阵列, 它是作为专用集成电路领域中一种半定制电路出现的, 既解决了定制电路的不足, 又克服了原有可编程器件门电路数有限的缺点。FPGA中具有丰富的触发器和I/O口, 采用描述语言 (VHDL和Verilog HDL) 进行设计, 用户可以根据需要, 描述出具有各种功能的电路。[2]

基于以上原因, 我们可以利用FPGA实现多串口通信中的数据转换和中断控制功能, 从而简化电路、缩小PCB面积, 也可以很方便的进行升级改动和模块移植。

1 设计要求

整个设计的硬件电路以DSP和FPGA为主构架, DSP和FPGA之间通过DSP的EMIF接口连接。其中, DSP是主处理器, 用于实现串口数据的处理, FPGA作为DSP的外围电路, 实现UART模块的串行数据的接收和发送、数据的串并/并串转换及接收中断的产生, 同时, 实现多串口的中断控制功能。当有接收数据时, FPGA通过中断方式通知DSP。

UART模块的数据格式:波特率可以按标准波特率设置;按字节接收, 每个字节前包含一个起始位 (低电平, 逻辑值0) , 无校验位, 最后是一位停止位和不定长度的空闲位 (高电平, 逻辑值1) ;接收到一个完整字节后产生一个中断 (高电平, 逻辑值1) , 当数据被读取后, 中断信号复位 (低电平, 逻辑值0) 。

中断控制器应能实现8路UART模块的中断接收和处理, 最后给DSP输出一个中断信号, 输入的各中断信号之间无优先级设定。

2 设计方案

完整的设计由时钟管理模块、接口模块、UART模块和中断控制器组成。时钟管理模块产生设计中所需各种时钟, 包括主处理时钟和接收与发送的波特率时钟;接口模块实现DSP和FPGA之间的中断、读写功能;UART模块由接收和发送子模块组成, 实现数据的串行接收和串行发送功能;中断控制器由中断采样子模块和中断处理子模块组成, 实现8路UART中断接收和处理功能。下面分别对这些模块的设计给予描述。[1]

2.1 时钟管理模块[3]

设输入FPGA的时钟为50MHz, 则主处理时钟设计为50MHz。U A R T的接收和发送采用相同的波特率进行, 本设计中采用115200b/s进行收发, 这就需要对50MHz时钟进行分频以产生所需的波特率。

2.2 接口模块

接口模块连接时钟管理模块、UART模块和中断处理器, 并与DSP采用EMIF总线相连接。与DSP相关的信号有:wr_n、rd_n、cs_n、addrs、data_bus和dsp_int, 在cs_n和wr_n有效时, DSP通过addrs选通不同的UART模块, 将需要发送的并行数据发送给发送寄存器, 执行发送功能。DSP响应外部中断时, 在cs_n和rd_n有效时, 通过addrs读取中断控制器的中断矢量和UART模块接收的数据。[4]

2.3 UART模块

2.3.1 发送模块

根据UART模块的数据格式, 发送状态机如图1所示。[5]

当复位信号rst_n=‘0’时, 状态机初始化为空闲状态, 当有需要发送的数据时, 即tx_flag=‘1’时, 状态机转入发送起始位状态;在发送起始位状态中, 串行输出数据线被置为0, 并保持一个波特率时钟周期, 即在baud_rate=‘1’时, 转入数据移位状态;在数据移位状态中, 利用baud_rate=‘1’的驱动, 将8位并行数据依次移位, 转成串行数据输出, 每移一位, 相应的计数器加1, 当cnt_bit_tx=“1000”时, 转入发送停止位状态;在发送停止位状态中, 串行输出数据线被置为1, 并保持一个波特率时钟周期, 即在baud_rate=‘1’时, 转入发送结束状态;在发送结束状态, 一个字节的发送过程完成, 清除发送标志, 即tx_flag=‘0’, 转入空闲状态。

2.3.2 接收模块

根据UART模块的数据格式, 接收状态机如图2所示。

当复位信号rst_n=‘0’时, 状态机初始化为空闲状态, 当检测到数据线上出现由1到0的跳变沿时, 即data_coming_flag=‘1’时, 状态机转入接收起始位状态;在接收起始位状态中, 在baud_rate=‘1’时, 判断数据是否为0, 如果是0, 则转入数据移位状态, 如果是1, 则回到空闲状态;在数据移位状态中, 利用baud_rate=‘1’的驱动, 将串行数据依次移位, 转成并行数据, 每移一位, 相应的计数器加1, 当cnt_bit_rx=“1000”时, 转入接收停止位状态;在接收停止位状态中, 在baud_rate=‘1’时, 判断数据是否为1, 如果是1, 则转入接收结束状态, 如果是0, 则回到空闲状态;在接收结束状态, 产生一个中断信号。

2.4 中断控制器[6]

2.4.1 中断采样子模块

在中断采样子模块中, 利用主处理时钟作触发, 检测各UART模块是否有中断输入, 如果中断输入端口出现由0到1的跳变沿, 则置该UART模块的中断采样值为1, 该值只有在复位信号rst_n=‘0’或清除信号clr=‘1’时, 恢复为0。程序逻辑如图3所示。

2.4.2 中断处理子模块

在该模块中, 主要完成中断矢量的生成、DSP中断信号的产生和中断清除信号的生成3个功能。

中断矢量由8个UART模块的中断输出信号合成, 特别注意的是因为各个UART模块中断清除信号和该矢量相关, 因此, 当该矢量不为0时, 要暂时锁定中断矢量, 即在DSP响应中断之前, 即使有新的中断信号产生, 也不允许更新中断矢量, 判断逻辑如图4所示。

在主时钟的触发下, 当中断矢量不为0时, 产生一个中断信号, 且只有当DSP读取了该中断矢量时, 才清除该DSP中断信号, 判断逻辑如图5所示。

当DSP中断清除信号有效时, 根据中断矢量, 生成中断清除矢量, 用于清除各个UART模块的中断采样信号, 该模块采用组合逻辑完成。

3 结语

在本设计中, 基于FPGA平台实现了通用UART芯片的核心功能和中断控制器逻辑, 能够满足多串口通信的需要。该电路已运用于实际工程中, 实践证明该电路结构简单、工作稳定, 可运用于低速率的异步通信。

参考文献

[1]杨英强.一种基于FPGA的UART电路实现[J].现代电子技术, 2005.YANG Ying-qiang.Realization of a Sort of UART Based on FPGA[J].Modern Electronics Technique.

[4]卞红雨, 纪祥春, 等.TMS320C6000系列DSP的CPU与外设[M].清华大学出版社, 2007.BIAN Hong-yu, JI Xiang-chun, et al.TMS320C6000DSP CPU and peripherals[M].TSINGHUA UNIVERSITY PRESS.

[5]李仁发, 凌纯清, 徐成.VHDL数字系统设计[M].电子工业出版社, 2004.LI Ren-fa, LING Chun-qing, XU Chengdu.Digital System Design with VHDL[M].Publishing House of Electronics Industry.2004.

串口与网络通信 篇11

DSP,即数字信号处理器。其技术广泛运用于现代通信,通过与单片机相连,能实现相应的数据处理。单片机的外接串口规格通DSP不相符,进而无法进行数据连接,需对其进行相关设计。DSP与单片机之间进行串行通信,这能将单片机的灵活控制功能与DSP良好的数据处理能力进行有机结合。

1 DSP 与单片机的概述

1.1 DSP 的概述

DSP,即Digital Signal Processing,又称为数字信号处理器。其属于较为特殊的微型处理器,其主要对转换为数字信号的信息进行相应的处理。Digital SignalProcessing的工作原理十分简单,处理器接受模拟信号后,将其转化为二进制的数字信号,从而通过相应系统对数字信号进行各项操作。通过别的操作系统,可以将转化后的数字信号数据进行解析,还原为实际环境格式或模拟数据。DSP不仅可以进行二进制编程,从而对数据进行较好地处理。其与过去使用的微型处理器不同,运行速度得以很大的提高。这使得DSP的应用十分广泛。

1.2 单片机的概述

Micro-controllers,即单片机。其属于电子领域经常用到的电子芯片。因其本身具有的体积小、价格便宜等优点,广泛应用于电子领域。单片机可以分为通用型与专业型两类,如80C51式单片机就属于十分常见的通用型。

2 串行通信的相关内容

2.1 串行通信的传送方向

串行传送方式共分为单工、半双工和全双工三种方式。单工传送方式具有明显劣势,其只能进行单方向数据传送,且信息的传送与接收不能同时进行。传送方式为半双工传送时,通信数据可以进行双方向传送,但数据传送只能交替进行。传送方式为全双工传送时,通信数据可进行双方向的同时传送,在此情况下,需要拥有两条独立数据线。

2.2 串行通信的同步方式

串行通信分为两种同步方式,同步与异步。在进行串行通信时,必须对同步方式进行统一的规范,这样才能保证双方接收端进行正确接收。

3 DSP 与单片机串口介绍

3.1 以 TMS320VC5416 为例, 对多通道缓冲串口进行介绍

TMS320VC5416设有三个缓冲串口进行数据的收发,每个串行口可支持128通道。多通道缓冲串口以标准串行接口为基础,进行相应的功能扩展。因此,其部分功能与标准串行接口相同 :(1)全双工通讯 ;(2)配有可进行两级缓冲发送和三级缓冲接收数据寄存器,支持数据流的连续传输。

3.2 以 AT89S52 单片机为例,进行串口介绍

AT89S52单片机作为近代比较常用的单片机类型,其内部有一个可编程全双工串行通信接口。该接口串行通信的方式为全双工方式,同步方式为异步,通讯数据可进行双方向同时进行。

AT89S52单片机在进行通信时,数据的收发必须与字符位数的波特率保持一致,在此前提下,数据收发由各自的TCLK和RCLK进行控制。MCS-51串行口通过两种方式产生收发时钟,第一种是通过主机频率fosc的分频产生,第二种通过单片机内部的定时器溢出率,后经16分频产生。

4 DSP 与单片机串口通信的实例

以TMS320VC5416型DSP与AT89S52型单片机为例,进行两者间串口通信的设计与实现,具体实验如下 :

4.1通过将DSP的串口与AT89S52型单片机进行连接,DSP输入的帧同步信号由AT89S52发送的起始位提供,输入的采样信号在其内部产生。

4.2 单片机通信软件的设计

AT89S52与8051系列单片 机相互兼容。所以,AT89S52进行开发时可以参考8051的开发工具。AT89S52单片机通信程序采用ASM51汇编环境下编写,在MCS - 51单片机仿真调试软件下调试成功。

AT89S52单片机通过中断方式接收DSP发送过来的数据信号,并回送确认信号给DSP接收终端。波特率设置为T1方式2工作,计数常数为F3H,SMOD=1,波特率为58600b/s ;单片机串行口初始化为方式1,允许接收 ;中断服务程序入口地址为0023H。

4.3 在 AT89S52 端的发送和接收

(1)发送 :CPU对写入指令进行执行完成后,便对串行口进行开启,进而对执行完后的指令进行发出。AT89S52通过TXD对数据进行输出,当信息发送完一帧后,发送中断,此时标志置1。

(2)接收 :RXD端对置1命令执行后,AT89S52接收器便以波特率18倍速率对RXD端的电平进行采样工作。采样所得数据进行相应跳变后,便启动接收器进行数据接收,并对内部的16分频计数器进行复位,从而实现同步传输。在RI=0的状态下,接收到停止位为 (1或者SM2=0)时,将停止位送入RB8,8位数据进入接收缓冲器SBUF,并置RI=1中断标志。

4.4 在 TMS320VC5416 端的接收和发送

(1)发送 :对于所需要进行发送的数据,TMS320VC5416将其置于发送缓冲区,并进行相应的数据扩展 :TMS320VC5416进行数据发送时,每次只发送一个字节,并将此字节进行扩展,从何1bit扩展为16位bit。如“0”扩展为“0x0000”,“1”扩展为“0x FFFF”。信息进行相应扩展后,在数据开头位置上添加一个字,结尾位置上也相应的添加一个字,从而将所需要进行发送的一个字节进行十倍扩展,成为10个字。然后将这10个字组成一帧,由DSP外接的相应串口进行发送。

(2)接收 :TMS320VC5416的串口进行 数据接收 时,每一帧为9个字,即16bit。当每一帧 同步信号 到达接口 时,TMS320C5416便自动启动,进行数据相应的接收。根据上面讨论的结果,AT89S52的1 bit被TMS320VC5416采样成了16.03 bit,当收到9字后,TMS320C5416停止接收。

5 结束语

通过以上实验,我们可以得知,通过一定技术手段能实现TMS320VC5416型DSP和AT89S52型单片机之间的串口通信。两者之间进行串行通信,能够有效的将两者之间的优势有机结合起来。通过两者实现结合,既可体现出单片机的灵活控制功能,又可将DSP良好的数据处理能力发挥出来。

摘要:DSP技术在现代通信领域得到广泛应用,其实现方式可通过单片机进行,但需要对单片机进行串口设计。通过一定的技术设计,DSP与单片机之间的串口通信得以实现,此种通信方式能够有效降低电路设计难度,并让两者各自的优势得以充分发挥,进而提高运行速度。

上一篇:生活服务类节目创新下一篇:政府组织结构