串口通讯与数据通信

2024-08-11

串口通讯与数据通信(精选9篇)

串口通讯与数据通信 篇1

1. 引言

ZigBee技术是一种新兴的近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术, 可以实现一点对多点的快速自动组网。该技术主要用于距离短、功耗低且传输速率不高的各种电子设备之间进行数据传输, 以及典型的有周期性数据、间歇性数据和低反应时间数据传输。在以微机为控制中心的自动控制系统中, 可以使用ZigBee模块采集数据, 然后用异步串行通信方式传给微机, 微机进行数据处理后, 再将控制信息发送给ZigBee模块实现自动控制。因此实现ZigBee模块与微机串口的全双工通信具有重要意义。Java是一种跨平台的面向对象编程语言, 由于Java语言内置了对多线程的支持, 所以Java语言非常适合开发同时采集多个节点信号的应用软件。本文作者采用cc2430作为ZigBee模块的核心, 利用javax.comm开发包中的类实现了微机通过串口与ZigBee模块的全双工通信。

2. Java串口通信程序的编写

2.1 javax.comm包介绍及配置

Java语言由语法规则和类库两部分组成。语法规则确定了Java程序的书写规范。类库是实现各种功能的类的集合, 每个类通常对应一种特定的功能, 这样在编写Java程序完成某一功能的时候, 就可以直接利用这些类。Java SE本身并不提供对串口操作的类, 如果要实现对串口读写操作, 可到Sun公司网站下载javax.comm包。该包以Javacomm20-win32.zip形式发布, 解压后, 得到10个文件, 2个文件夹, 其中有3个文件编程时必须用到, comm.jar提供了对RS-232串行端口通讯的支持, Java通过该类库能够极大地简化对串口的操作过程, 另外两个重要的文件:win32com.dll和javax.comm.properties。win32com.dll提供了comm.jar调用的本地驱动接口, javax.comm.properties是这个驱动的配置文件。将comm.jar拷贝到<JDK>jrelibext目录, 将win32com.dll拷贝到<JDK>jrebin目录, 将javax.comm.properties拷贝到<JDK>jrelib目录, 便可对串口编程了。

2.2 Java读写串口的编程实现

根据编程要求, 需要声明的对象如下:

Java读写串口过程主要是调用Javax.comm包中的Java Communications API函数。我们需要获得一个SerialPort对象。办法是调用CommPortIdentifier的open方法, 然后将结果转换为SerialPort引用。open方法有两个参数:第一个参数是一个字符串, 它指出谁打开此端口。第二个参数是时间, 表示开启端口超时的毫秒数。catch () 表示如果端口被另外的应用程序占用时或该端口操作不被支持, 程序将抛出异常。实现上述功能的代码如

正确使用串口完成通信功能还需要初始化串口, 需要初始化的参数有:通信口、波特率、数据位、停止位、奇偶校验位等。实现串口初始化的代码如下:

要想实现串口的读写功能, 还必须创建输入流和输出流。由serialPort对象调用getInputStream () 方法可以获得端口的字节输入流, 调用getOutputStream方法可以获得端口的字节输出流。创建输入流和输出流的代码如下:

可用字节输入流in调用read (byte[]b) 方法读出串口中的数据。实现代码如下:

可用字节输出流out调用write (int b) 方法向串口对象的数据流写数据。实现代码如下:

使用完端口后, 要将其关闭, 这样可以让其它的程序有机会使用它, 否则其它程序使用该端口时可能会抛出端口正在使用中的错误。可调用CommPort类的close () 方法关闭端口。部分代码如下:

3. 硬件接口与cc2430的串口操作

cc2430与微机之间的硬件接口可用1片MAX232芯片与几个电容实现。USART0和USART1是cc2430的串行通信接口, 它们能够分别运行于异步UART模式或者同步SPI模式。UART操作由USART控制和状态寄存器UxC-SR以及UART控制寄存器来控制。这里的x是USART的编号, 其数值为0或者1。当UxCSR.MODE设置为1时, 就选择了UART模式。

(1) UART发送

当USART收/发数据缓冲器、寄存器UxBUF (寄存器UxBUF双缓冲, 这里的x是USART的编号, 其数值为0或者1, ) 写入数据时, 该字节发送到输出引脚TXDx。

(2) UART接收

当1写入UxCSR.RE位时, 在UART上数据接收就开始了。然后UTART会在输入引脚RXDx中寻找有效起始位, 并且设置UxCSR.ACTIVE位为1。当检测出有效起始位时, 收到的字节就传入接收寄存器, UxCSR.RX_BYTE位设置为1。该操作完成时, 产生接收中断。通过寄存器UxBUF提供收到的数据字节。当UxBUF读出时, UxCSR.RX_BYTE位由硬件清0。

4. 结束语

介绍了利用javax.comm开发包实现Java与ZigBee模块串口通信的基本方法。该方法在基于ZigBee技术的温度控制系统中得到验证, Java程序能够与ZigBee模块实现全双工的串口通信, 串口通信应用广泛, 因而具有一定的实用意义。

摘要:在简单介绍ZigBee技术的基础上, 论述了在Java程序中利用javax.comm开发包中的类实现微机的RS-232串口与ZigBee模块通信的方法。

关键词:Java,ZigBee,串行通信,javax.comm

参考文献

[1]Stephen Potts等著, 马朝晖等译.Java2技术内幕[M].北京:机械工业出版社, 2003.

[2]周海涛, 高兴锁, 江晓峰.基于java数据采集串口通讯的设计和实现[J].微计算机信息, 2006, 22 (4) :141-142.

[3]李正, 关永, 王亮, 宁婷婷.嵌入式ZigBee串口模块的设计[J].微计算机信息, 2009, 25 (20) :40-41.

[4]霍晓丽, 贾祥芝.利用comm.jar开发包实现Java与单片机全双工串口通信[J].工矿自动化, 2005, (2) :49-52.

[5]李良, 朱善安.基于Java的串口通信[J].电子器件, 2007, 30 (2) :714-720.

串口通讯与数据通信 篇2

关键词:单片机;RS-232;PC机;实时数据采集

中图分类号:TP368 文献标识码:A 文章编号:1674-7712 (2012) 16-0066-01

一、单片机与PC机串行通信的硬件系统连接

二、串口通信的通信协议

考虑到小型分散测控系统采用主从式控制结构的实际情况,可将多个单片机的通信模式设置为模式1与PC机进行远程串行通信。当PC机启动通信功能并对某一单片机实现功能控制时,将每一片单片机设置一个片识别地址,也就是站号,只有当PC机发送的信号中的地址位与单片机中的片识别地址相一致时,该单片机才能根据接收信号对PC机做出响应,按系统要求向PC端发送应答数据。

具体的寻址实现可以采用软件查找方法:单片机可以提供位寻址区,假如该单片机的寻址标志位被置为“1”,表示该单片机可以对PC端的数据进行接收;假如寻址标志位为“0”,表示该单片机无法响应PC端请求。通过对标志位的判断结果决定是否将单片机地址与PC机地址进行比较,只有地址一致的单片机才可以将寻址标志位置为“1”,然后退出中断服务程序;其他未响应单片机则直接退出中断服务程序。

在发送端和接收端的信息传输中需要进行信息校验,以保证传输信息的正确性和可靠性,一般情况下课采用累加和校验。只有校验结果正确时,收发端才能正确响应数据帧,进行数据的发送与接收,否则将反馈信息传输出错,要求发送端对数据进行重新发送。为防止“锁死”现象的出现,该校验方法需要限定重发次数,在限定次数内发送的数据可被认定为有效,超出限定次数可认为发送失败,跳过该数据传输,或结束通信返回失败信号。

三、相应的软件编程实现

在实现程序上,单片机端的通信程序采用MSC51汇编语言编程,通过中断响应的方式实现数据通信,其通信方式可通过技术手册获得;PC机端的通信程序可以采用VB编程方式实现数据通信,其通信方式采用事件驱动方式。通过MSCComm控件可以对串口进行初始化、收发数据等串行通信功能实现。

四、结语

在实际的工业过程中单片机与PC机的通信应用非常广泛。本文系统具有一定的通用性,在实际应用中可根据实际需要对相关部分进行修改,满足实际要求。实践表明,本文系统稳定可靠,能够满足单片机与PC机串行通信中的实时采集数据和控制的要求。

参考文献:

[1]甄任贺,俞寿益.单片机与PC机串行通信的实现方法[J].广东技术示范学院学,2004,6.

[2]潘方.RS 232串口通信在PC机与单片机通信中的应用[J].现代电子技术,2012,35.

串口通讯与数据通信 篇3

一、电路构成

具有ISP下载与串口通讯功能的下载线的电路如图1所示。该下载线成本低廉, 元件易得, 既可完成在线系统擦除与编程, 又可以作为单片机与PC机的串口通讯接口, 进行PC机串口产品的开发。

本电路中的核心元件是MAX232, 起到PC机的串口EIA电平与单片机系统板的TTL电平之间的电平转换作用, 其内部有两套共四路独立的电平转换电路。而单片机编程脚为 (6) ~ (9) 脚, 其中 (9) 脚为复位脚, (6) ~ (8) 脚为通讯脚;单片机串口通讯脚为 (10) 、脚。这样需要转换电平的信号有五路, 为此, 我们增加了一个双刀双掷拨动开关作为“ISP下载”和“串口收发”切换开关。另外, 在使用“ISP下载”功能时, (9) 脚必须是高电平+5V, 而在单片机运行时, (9) 脚应为低电平, 所以我们在制作单片机系统板时必须要有手动复位电路。在使用“ISP下载”功能时, 需要一直按下手动复位键, 编程结束后, 只要释放手动复位键, 程序便立即运行, 如图2所示。

这样, 有了具有ISP下载与串口通讯功能的下载线, 我们在制作电路时只要安装一个7针的插座, 就可以调试和反复擦写程序了, 同时也可以实现单片机与PC机串口通讯的产品开发。

二、串口下载线擦除和下载程序的使用方法

这里, 我们以下载软件“电子在线ISP编程器v2.0”为例说明串口下载线擦除和下载程序的使用方法。

连接好下载线和单片机目标板, 目标板加上+5V电源。启动电子在线ISP编程器v2.0软件, 如图3所示。

首先选择串行端口, 根据下载线实际连接的端口进行设置 (如本例选择COM1) :

(1) 点击“鉴别”按钮, 检查单片机型号, 并验证线路是否通畅;

(2) 点击“打开”按钮, 载入电脑中预先编译好的HEX文件;

(3) 点击“擦除”按钮, 将单片机程序存储器中原有内容擦除;

(4) 点击“写入”按钮, 将打开的文件下载到单片机程序存储器中。

也可以设置好自动选项后, 点击“自动”按钮完成程序的擦除和写入。

三、几点说明

(1) 配用软件可在网络上免费下载, 自行搜索相关资源。

(2) 在使用本下载的“ISP下载”功能时, 一定要始终按下手动复位键, 保证复位脚 (9) 保持编程所需的高电平。

(3) 如果只想制作具有ISP下载功能的下载线, 只需对电路略加修改即可;同样如果想制作和开发单片机与PC机通讯的产品, 可以将本电路的串口通讯功能部分直接加到单片机系统板上。

串口通讯与数据通信 篇4

关键词: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集成开发环境

串口通讯与数据通信 篇5

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.

串口通讯与数据通信 篇6

Matlab是Math Works公司开发的一款科学计算软件, 不仅具有强大的科学计算功能, 还可以创建图形用户界面GUI (Graphical User Interface) , 实现用户和计算机之间交流的工具。

MATLAB将所有GUl支持的用户控件都集成在这个环境中并提供界面外观、属性和行为响应方式的设置方法, 随着版本的提高, 这种能力还会不断加强。而且, 具有强大的绘图功能, 可以轻松的获得更高质量的曲线图。王战军[1]实现了串口数据的通讯, 并对数据进行了分析处理和图形化显示。

本文首先实现计算机与下位机的串口通讯, 采集下位机的距离和电压值, 储存在EXECL数据表中, 然后调用axes控件, 以距离为X轴, 电压为Y轴, 实现曲线显示。

2 串口数据的接收和存储

本文的应用程序是运用MATLAB的类 (SERIAL) 和M语言开发, 辅以MATLAB的GUIDE工具箱。整个传输的过程首先是初始化, 然后发送连接命令;连接成功后, 由PC机下发上传数据命令。如果没有收到下位机上传的数据, PC机下发继续上传数据命令;收到下位机上传的数据, PC机接收数据包, 并显示“正在传输”。接收完一个数据包后, 继续接收数据校验。校验数据没有问题, 存储数据, 并继续接收数据包, 直到结束。具体的应用软件流程图如图1。

2.1 串口通讯

Matlab提供了对串口进行打开、关闭、以及串口参数设置等操作的一系列函数。利用这些函数可以选择串口号、设置串口通信参数 (波特率、数据位、停止位、校验位等) 、进行中断控制、流控制[2]。

(1) 创建串口对象scom, 打开是“com1”端口。

(2) 打开串口对象scom。

fopen (scom) ;

(3) 设置串口对象scom通信参数

串口通讯参数包括波特率、奇偶校验、数据位、停止位等参数。串口通讯参数设置程序如下:

scom.baudrate=19200;%设置波特率, 缺省19200bit/s

scom.parity=’none’;%无奇偶校验

scom.stopbits=1;%停止位

scom.timeout=0.5;%设置读操作完成时间为1s, 缺省10s

scom.inputbuffersize=256;%输入缓冲区为32b, 缺省值为512b 32*8

scom.Bytes Available Fcn Mode=’byte’;%数据模式, 这里设置为byte

(4) 从串口对象scom读数据。

5) 关闭串口对象scom。

关闭串口scom, 并且释放串口对象占用的存储空间, 具体的程序如下:

fclose (scom) ;%关闭串口scom

delete (scom) ;%释放串口对象占用的内存空间

2.2 数据存储

Matlab软件可以实现对txt文件和Excel文件的输入和输出, 为了能方便、直观的观测数据, 本文把接收到的数据存储在Excel文件中。Matlab提供了对Excel文件操作的一系列函数。本文用于数据存储的函数是xlswrite。

具体的格式:

将矩阵M中的数据写入文件名为filename的Excel文件中, 且由range制定存储的区域, 由sheet指定了所要存储的sheet[3,4]。

本文通过上文方法接收串口的数据, 并存储在a1.xsl的文件中, 其中, 长度存储在sheet1的E2:E21中, 电压存储造sheet1的F2:F21中。具体的代码如下:

xlswrite (‘a1’, a, 1, ’E2:E21’) ;%存储长度

xlswrite (‘a1’, b, 1, ’F2:F21’) ;%存储电压

运行代码, 存储数据在Excel文件, 见表1。

3 曲线显示

利用Matlab GUI强大的绘图功能, 结合Excel软件, 读取Excel文件的数据, 绘制高质量的曲线图, 显示数据变化曲线。Matlab gui中的控件axes使用户的GUI不仅可以显示图片, 设置很多关于外观和行为的参数, 并且, axes还可以当做一块画布, 把我们需要的曲线绘制出来。

本文通过一个点击按钮来绘制数据曲线, 具体的代码在按钮的控件的Callback调函数下。

axes (handles.axes1) ;

xlabel (‘长度 (M) ’)

ylabel (‘电压 (V) ’)

运行代码, 可以得到数据曲线, 如图2.

4 结论

应用MATLAB强大的绘图功能与计算相结合, 很好地接收串口传过来的数据, 结合EXECL并对数据进行存储, 利用AXES控件显示数据曲线, 能够直观有效的观测距离和电压的数据变化曲线, 并且该界面友好, 结构简单, 性能可靠, 易于操作。

摘要:为实现下位机数据的接收和上位机数据曲线显示, 本文应用matlab GUI, 设计串口通讯程序, 并将接收的数据存储在Execl数据表中, 通过调用matlab的Axes控件, 实现了数据的曲线显示。

关键词:matlab GUI,Execl,串口通讯,Axes

参考文献

[1]王战军, 沈明.基于Matlab GUI的串口通信编程实现[J].现代电子技术, 2010, 320 (9) :38-44.

[2]南洋, 周静等.基于MATLAB的GUI的界面设计[J].石油仪器, 2008, 22 (6) :76-78.

[3]赵云鹏.MATLAB串口通信在数据采集中的应用[J].微计算机信息, 2006, 22 (1-1) :111-112.

串口通讯与数据通信 篇7

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

串口通讯与数据通信 篇8

串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一,所以针对计算机与外部设备通信的上位机关于串口通信的开发,在项目开发过程中具有重要地位。本文选用VC++为上位机软件开发环境,因为VC++是一种面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能[1]。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。本文着重介绍基于VC++关于串口通信设计与实现的方法[2,3]。

1 串口通信实现过程

在项目设计过程中,串口通信的实现过程一般为[4]:

(1) 按协议的设置初始化并打开串行口,即通知Windows本应用程序需要使用此串口,并对其他应用程序禁用此串口。

(2) 配置串口。

(3) 在串口上往返传输数据,并在传输过程中进行相关校验。

(4) 不再需要串口时,关闭使用的串口,即释放串口以供其他应用程序使用。

2 运用MFC进行编程实现串口通信

Win 32系统扩展了文件的概念,无论是文件、通信设备、命名管道、邮件槽、磁盘还是控制台都被看作文件[5]。因此,可以用MFC中的CFile类来实现对串口的操作,并且Win 32中的I/O函数支持重叠式输入输出,提高了系统的时效性。Win 32 API包含了一系列访问通信资源的通信函数。串口通信一般步骤[6]:

(1) 打开串口。Windows通信会话以调用CreateFile()函数打开串口为开始,通信程序在CreateFile( )处指定串口设备及相关的操作属性,并返回一个句柄,该句柄将被用于后续的通信操作。

(2) 串口初始化(设置串口参数及进行串口超时设置)。在打开通信设备句柄后,通常要对串口进行初始化(即配置参数如波特率、数据位数、停止位数、奇偶校验以及握手协议和流控协议等),串口配置通过改变数据结构:设备控制块(Device ControlBlock,DCB)来实现[7]。结构DCB有近30个数据成员,对于采用3线方式的串行通信,只要设置好波特率、数据位、停止位、校验位等几个关键参数即可。这种简捷的方法可以使得不了解DCB的详细内容也能设置好串行通信参数,即利用BuildCommDCB()函数来设置DCB,然后用函数SetCommState()配置串行通信接口。

DCB dcb; //定义数据控制块结构

GetCommState(hCom,&dcb); //读串口原来的参数设置

BuildCommDCB("COM1: 9600,N,8,1",&dcb); //创建数据控制块DCB结构

SetCommState(hCom,&dcb); //将结构DCB的主要参数设置到串口COM1

(3) 读写串口的API函数。串口打开后,可以对它进行读写操作。

(4) 关闭串口的API函数。串口是非共享资源,所以打开某个串口后,一定要关闭。CreateFile()返回值非零,则表示调用成功。

3 串口通信编程的具体设计过程

(1) 在VC 6.0环境下[8,9],创建一个基于Dialog MFC应用程序在对话框资源上增加控件一个组框,用来标识,2个组合框资源,1个用于选择COM口,1个用于选择波特率,4个按钮,1个用于打开串口,1个用于发送数据,1个用于清除数据,1个按钮用于退出程序。最后在添加1个CRichText控件 用于编辑数据和显示数据的窗口。把上面添加的部分资源关联相应的C++类的对象。才有一些菜单栏的设计如图1,图2所示。

(2) 相应打开串口按钮的操作,在相应的响应函数里打开串口,对串口进行一些参数配置;代码如图3所示。

(3) 数据发送操作的代码如图4所示。

4 测试结果

把上位机和下位的串口连接好,启动程序,选择串口号,选择波特率,打开串口,输入数据 点击发送按钮,双方可以进行数据通信,测试结果如图5所示。

5 结 语

VC++是一个非常优秀的用户开发平台,提供了多种方法对串口进行通信控制,使用户不必了解具体的硬件原理,简化了编程,使程序透明化,并且适应性好,可移植性高。采用Win 32 API串口通信编程是最灵活、最常用并且功能强大的方法,适用于同各种不同的外设进行串行通信,但需要程序员对硬件工作原理有较深的了解,本程序设计的串口通信软件基本实现了数据交换的功能,还有数据的保存于设置参数的等功能,能够满足一般的通信测试需要。

摘要:随着控制技术的高速发展与日趋成熟,各类控制系统的规模越来越大,功能模块越来越多,因此,系统中各个功能模块之间能否实现可靠通信成了整个系统协调而稳定工作的关键。而串行通信则是各类通信方式中最基本、最常用、最可靠的一种。在此采用VC++开发软件,基于Win 32 API函数进行的串口设计与实现,实验结果证明数据交换正常,系统运行稳定可靠。

关键词:串口通信,VC++,Win32API函数,MFC

参考文献

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

[2]冯雪飞.Windows平台下串行通信的几种实现方法[J].机械制造与自动化,2006(7):92-95.

[3]刘鎏.用Visual C++实现计算机串行通信的几种方法[J].舰船电子工程,2006(1):94-97.

[4]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2006.

[5]李长林,高洁.Visual C++串口通信技术与典型实例[M].北京:清华大学出版社,2006.

[6]乌尼尔,董海军.Visual C++经典例程分析[M].北京:中国电力出版社,2004.

[7]张筠,刘书智.Visual C++实践与提高--串口通信与工程应用篇[M].北京:中国铁道出版社,2006.

[8]齐舒创作室.Visual C++6.0开发技巧及实例剖析[M].北京:清华大学出版社,2006.

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

随着工业化要求提高, 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期.

上一篇:品牌攻略下一篇:电机温度论文