串口通讯实验报告

2024-04-27

串口通讯实验报告(通用8篇)

篇1:串口通讯实验报告

网络编程与实践实验报告

实验内容:串口通信编程 学号:S201502189 姓名:职荣豪 日期:2015-9-28

一、实验要求

使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。

二、实验原理

本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。

该控件相关的函数如下: put__CommPort:设置串口号

put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数

put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型)put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取 put_InBufferSize:设置接收缓冲区大小 put_OutBufferSize:设置发送缓冲区大小

put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件

put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件

put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口 get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据

get_InBufferCount:获得缓冲区中的数据位数

get_Input:获取缓冲区数据,返回类型为VARIANT put_Output:发送数据

三、设计思路

需要添加一个Microsoft Communications Control控件,用于进行串口通信。由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。

需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。需要添加一个发送按钮,点击后发送输入的数据。

四、实验步骤

1.建立基于对话框的MFC应用程序 2.添加界面控件并设置ID与Caption 添加Microsoft Communications Control控件,用于进行串口通信 添加一个Edit Control控件,用于输入串口号,ID设置为IDC_PORT 添加一个Static Text控件,用于标注端口号,将Caption设置为“串口号:”

添加两个按钮,分别用于打开串口、关闭串口。IDC分别设置为IDC_BTN_OPEN、IDC_BTN_CLOSE,Caption分别设置为“打开”、“关闭” 添加两个Edit Control,分别用于显示接收到的数据以及输入要发送的数据,ID分别设置为IDC_RECEIVE、IDC_SEND 添加两个Static Text控件,用于标注接收区与发送区,Caption分别设置为“接收区”、“发送区”

添加一个按钮用于发送数据,ID设置为IDC_BTN_SEND,Caption设置为“发送” 调整控件的大小与位置。

完成后如图:

3.给控件绑定变量

右键单击Microsoft Communications Control控件,选择“添加变量”,变量名为m_com 打开类向导给控件添加变量:

给IDC_PORT绑定变量,用于存放输入的端口号,数据类型为int,变量名为m_port 给IDC_RECEIVE绑定变量,用于存放接收到的数据,数据类型为CString,变量名为m_strReceive 给IDC_SEND绑定变量,用于存放输入的待发送的数据,数据类型为CString,变量名为m_strSend

4.给控件添加事件响应函数

右键单击Microsoft Communications Control控件,选择“添加事件处理程序”,点击“添加编辑”,生成响应函数,此函数用于接收数据。

在函数中添加以下代码:

UpdateData(TRUE);if(nEvent == 2){

} UpdateData(FALSE);//将m_strReceive的值显示到控件中

//更新m_strReceive的值

//获取事件值

//获取缓冲区位数

//时间值为2,此时为收到数据 int nEvent = m_com.get_CommEvent();int k = m_com.get_InBufferCount();if(k <= 0)//位数小于等于0时则返回 return;char* str =(char*)m_com.get_Input().parray->pvData;//获取接收到数据的字*(str + k)= ';//字符数组最后一位的下一位设置为',为字符串的结尾标志 m_strReceive +=(const char *)str;//在用于显示的字符串末尾添加刚接收到的符数组的首地址

字符串

双击IDC_BTN_OPEN控件,即“打开”按钮,生成响应函数,此函数用于设置串口参数并打开串口。

在函数中添加以下代码:

UpdateData(TRUE);

if(m_port <= 0){

} m_com.put__CommPort(m_port);//设定串口为m_port的值 m_com.put_Settings(“9600,n,8,1”);

//设定波特率9600,无奇偶校验位,8作为数据位,AfxMessageBox(“请输入正确的串口号!”);return;

//更新m_port的值 //端口号不小于等于0

1作为停止位

m_com.put_InputMode(1);//设定数据接收模式,1为二进制方式

m_com.put_InputLen(0);//设置从接收缓冲区读取的字节数,0表示全部读取

m_com.put_InBufferSize(1024);//设置输入缓冲区大小为1024byte

m_com.put_OutBufferSize(1024);//设置输出缓冲区大小为1024byte m_com.put_RThreshold(1);//每接收到一个字符时,触发OnComm事件 m_com.put_SThreshold(0);//每发送一个字符时,不触发OnComm事件 m_com.put_PortOpen(true);

//打开串口

GetDlgItem(IDC_BTN_OPEN)->EnableWindow(FALSE);//打开按钮设为不可用 GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(TRUE);//关闭按钮设为可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(TRUE);

//发送按钮设为可用

双击IDC_BTN_CLOSE控件,即“关闭”按钮,生成响应函数,该函数用于关闭串口。在函数中添加以下代码:

m_com.put_PortOpen(false);//关闭串口

GetDlgItem(IDC_BTN_OPEN)->EnableWindow(TRUE);

//打开按钮设为可用

GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用

双击IDC_BTN_SEND控件,即“发送”按钮,生成响应函数,该函数用于发送数据。在函数中添加以下代码:

UpdateData(TRUE);//更新m_strSend的值,读取编辑框内容 m_com.put_Output(COleVariant(m_strSend));//发送数据

5.在对话框初始化函数中添加额外初始化代码

在对话框刚打开时,此时串口没有开启,故“关闭”按钮与“发送”按钮需设为不可用。在OnInitDialog函数中添加以下代码:

GetDlgItem(IDC_BTN_CLOSE)->EnableWindow(FALSE);//关闭按钮设为不可用 GetDlgItem(IDC_BTN_SEND)->EnableWindow(FALSE);//发送按钮设为不可用

五、实验结果

对话框1 运行结果如下:

对话框2 运行结果如下:

六、实验心得

通过课上的学习,我学习到了数据通信的基础知识,对网络的分层结构以及相关协议有了进一步的认识。

通过本次实验,我对串口通信的原理有了更深的认识与理解,并对MFC界面制作更加熟练。总之,在本课程中我收获很多,不仅在通信方面的知识有所提升,同时也锻炼了编程能力,VC++软件的使用更加熟练。

篇2:串口通讯实验报告

双机通信实验

一、实验目的

UART 串行通信接口技术应用

二、实验实现的功能

用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

三、系统硬件设计

(1)单片机的最小系统部分

(2)电源部分

(3)人机界面部分

数码管部分

按键部分

(4)串口通信部分

四、系统软件设计

#include #define uchar unsigned char #define uint unsigned int void send();uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示

sbit H1=P3^6;sbit H2=P3^7;sbit L1=P0^5;sbit L2=P0^6;sbit L3=P0^7;

uint m=0,i=0,j;uchar temp,prt;/***y延时函数***/ void delay(uint k){ uint i,j;

}

/***键盘扫描***/ char scan_key(){ H1=0;H2=0;

L1=1;L2=1;L3=1;if(L1==0){ delay(5);if(L1==0){ L1=0;H1=1;H2=1;if(H1==0)} //定义局部变量ij

//外层循环 for(i=0;i

{ m=1;return(m);} if(H2==0){ m=4;return(m);} } }

//KEY1键按下

//KEY4键按下

if(L2==0){ delay(5);if(L2==0){ L2=0;H1=1;H2=1;if(H1==0)

{ m=2;return(m);} if(H2==0){ m=5;return(m);} } }

//KEY5键按下 //KEY2键按下

if(L3==0){ delay(5);if(L3==0){ L3=0;H1=1;H2=1;if(H1==0){ m=3;

//KEY3键按下

}

return(m);} if(H2==0){ m=6;return(m);} } } return(0);

// KEY6键按下

/***主函数***/ main(){ P1M1=0x00;P1M0=0xff;

SCON=0x50;//设定串行口工作方式1 TMOD=0x20;//定时器1,自动重载,产生数据传输速率 TH1=0xfd;//数据传输率为9600 TR1=1;//启动定时器1 P0&=0xf0;while(1){

//如果有按键按下 if(scan_key()){ SBUF=scan_key();//发送数据 while(!TI);TI=0;}

if(RI){ RI=0;}

// //

等待数据传送 清除数据传送标志

//是否有数据到来

// 清除数据传送标志

temp=SBUF;

// 将接收到的数据暂存在temp中

P1=code0[temp];// 数据传送到P1口输出 delay(500);} } //延时500ms

五、实验中遇到的问题及解决方法

(1)串行口和定时器的工作方式设定是关键,本次是按需传输的是两位十六进制数,串行口为工作方式1,定时器为8位自动重载;(2)采用P0&=0xf0语句使4个数码管静态点亮;

(3)在发送和接受过程中,用标识位TI和RI来检测发送和接受是否完成;(4)在用电脑和单片机进行串口通信测试时,电脑的传世速率一定要和单片机的传输速率相等,否则显示会出现错误。

指导老师签字:

篇3:基于DM6437的串口通讯

DM6437是TI公司推出的、专门为高性能、低成本视频应用开发的、32位定点DSP达芬奇 (Davinci (TM) ) 技术的处理器系列。TMS320DM6437有着丰富的片上外设, 其中包括2个UART外设, 其中每个UART支持以下特性:16-tyte存储空间的传输和接收FIFOs、针对自动流控制和DMA的1, 4, 8或14byte可选的接收FIFO触发等级、中断优先、串口数据格式可编程等。除了DSP自带的硬件资源, 但想要有效利用DSP内部资源, 应用程序程序需要借助于BIOS。DSP/BIOS是一个多任务实时嵌入式操作系统 (RTOS) , 能大大方便用户编写多任务应用程序。DSP/BIOS实时操作系统的主要功能是:任务管理、存储管理等, 这里我们主要用到DSP/BIOS的任务管理。使用DSP/BIOS开发的DSP软件有两个重要特点:第一, 借助DSP/BIOS完成所有硬件相关操作。开发者不需要直接控制硬件资源, 而是通过CCS开发环境提供的图形化工具BIOS的配置文件;第二, 带有BIOS功能的程序在运行时与不带BIOS的程序是不同的。有BIOS控制DSP的程序, 应用程序是建立在以BIOS为基础上的, 程序根据BIOS调度下按照其安排的任务或者中断的优先级顺序进行执行。其中BIOS支持四种线程, 优先级顺序从低到高为:后台线程、普通任务, 软件中断, 硬件中断。其中这里需要用到硬件中断HWI。

2 串口通信

本文设计的UART通信部分软件程序设计未使用传统的芯片支持库, 而是直接对DM6437的UART外设寄存器进行初始化, 且利用DSP/BIOS实现UART硬件中断, 防止CPU轮询UART外设造成的计算开销浪费, 保证了数据传输的实时性和数据传输效率。

由于串口通信是异步的, 端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口, 这些参数必须匹配。其中:波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的位的个数。这里我们使用波特率为:9600。数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包, 实际的数据不会是8位的, 标准的值是6、7和8位。停止位:用于表示单个包的最后一位。典型的值为1, 1.5和2位。由于数据是在传输线上定时的, 并且每一个设备有其自己的时钟, 很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。奇偶校验位:在串口通信中一种简单的检错方式。其中DM6437有2个UART外设, 这里使用的是RS-232串口接口。

3 DSP/BIOS中断

由于DM6437需要处理其他事务, 不能采用轮询等待串口数据, 所以必须采用中断方式来进行UART通信操作。如下流程图1所示。

而UART串口通信属于外部硬件中断, 需要在DSP/BIOS里任务管理进行硬件中断设置。C64+的中断系统与以往系列不同, 中断是基于事件的, 整个硬件CPU接收15个中断, 但中断源可以支持最多128个。C64+将中断源是为事件“Event”, 128个事件可以分别通过配置连接到15个CPU中断。而128个事件每连续32个可以合并到四个固定的事件中, 即Event0 (对应事件号0-31) 、Event1 (对应时间号32-63) 、Event2 (对应事件号64-95) , Event4 (对应时间号96-127) 。这样可以通过数量有限的CPU中断来管理超大量的中断源, 使用灵活。DSP/BIOS默认将Event0-3分别对应到HWI_INT7-10四个中断号。TI设备驱动通过注册Event0-3这四个事件, 进而对应到相应中断。在中断HWI_INT7-10中断服务程序再去判断具体是哪个事件触发的中断。而其他中断是系统硬件复位中断、NMI中断、预留中断及仿真通信中断。HWI_INT4-6、HWI_INT13、HWI_INT15这几个中断是未使用中断。我们可以通过将事件号对应到这5个中端, 并添加中断服务来实现中断控制。这里需要使用未使用中断完成UART中断方式通信。首先需要打开工程的TCF文档, 在任务调度部分中选择硬件中断HWI, 如图2所示。

选取HWI_INT4为我们需要中断, 并对其进行设置, 在中断事件栏中添加UART中断事件号85, 并接着添加中断服务函数名, 此中断服务程序即当中断产生时, CPU将停止当前正在执行的操作跳转到uart中断服务程序去执行。

4 UART中断

在使用UART中断之前需要初始化中断相关寄存器, 初始化CSR (Control and Status Register) 控制、状态寄存器, 开启全局中断开关, 此外还需设置DSP中的PINMUX0与PINMUX1。设置PINMUX是为了配置复用引脚工作模式, 并且通过IER (Interrupt Enable Register) 中断使能寄存器开启HWI_INT4的中断。接着需要初始化串口寄存器, 通过配置Divisor MSB Latch (DLH) 与Divisor LSB Latch (DLL) 将波特率设置为9600、配置FIFO Control Register (FCR) 清空接收数据FIFO与发送数据FIFO并使能接收与发送FIFO功能, 再配置Line Control Register (LCR) 寄存器设置数据位的长度。最后配置Power and Emulation Management Register (PWREMU_MGMT) 来使能串口接收与发送功能, 这些初始化部分在系统开启后进行。而在使用串口传输数据时, 需要解决中断嵌套导致程序跑飞的问题, 在这里需要在中断服务程序中开始时关闭中断HWI_INT4并在中断处理之后开启中断HWI_INT4。

5 结语

通过TMS320DM6437的UART模块并结合DSP/BIOS的中断管理部分实现了异步串口通信, 并通过软硬件调试, 该部分已经加入实际的实时监测系统中与外界上位机进行通信。采用中断的方式, 合理有效地使用了CPU资源, 取得了一定的效果, 具有一定的应用价值。

摘要:串口作为一种灵活、方便、可靠的通信方式, 广泛应用于计算机与其他嵌入式产品中以及工业控制系统中, 是计算机与外部设备进行数据通信时经常使用的方式之一。本文介绍在DM6437嵌入式DSP开发平台上, 串口通讯的一般步骤以及配置。主机通过发送命令可以实现调节或查询系统的功能或状态。结果表明, 在通讯速率要求不高的情况下, 利用串口命令可以有效的实现控制和查询DSP的功能和状态。

关键词:DM6437,UART,硬件中断

参考文献

[1]查萨英, 韩月秋.DSP原理及其C编程开发技术[M].北京:电子工业出版社, 2005.

[2]Taxas Instrument Incorporated.TMS320C6000 Programmer&apos;s Guide[Z].Taxas:Taxas Instrument Incorporated, 2002.

[3]Taxas Instrument Incorporated.TMS320C6000 CPU and Instruction Set[Z].Taxas:Taxas Instrument Incorporated, 2000.

[4]Taxas Instrument Incorporated.TMS320DM643x DMP Universal Asynchronous Receiver/Transmitter (UART) .Taxas:Taxas Instrument Incorporated, 2009.

[5]Taxas Instrument Incorporated.TMS320C6000 DSP/BIOS User’s Guide.Taxas:Taxas Instrument Incorporated, 2000.

[6]Taxas Instrument Incorporated.TMS320DM6437 Evaluation Module.Taxas:Taxas Instrument Incorporated, 2006.

篇4:单片机多串口通讯技术及其应用

【关键词】单片机;多串口;通讯技术;应用

0.引言

单片机多串口通讯技术是一种基于单片机单串口基础之上而进行扩展的一种通讯技术。其以独具的高性能和高性价比优势,得到了几乎所有智能化产品的青睐。在目前的智能化产品的应用中,可以将单片机分为两类,一类是应用在移动通讯等设备中的专用单片机,另一类是能够在各类设备中应用的通用单片机,其中MCS-51就是通用单片机。随着科学技术的日新月异,信息技术的水平也不断提高,传统的单串口单片机已经不能满足计算机信息技术的发展要求,从而限制了它们在计算机信息技术中的应用。本文通过对多串口单片机的深入理解,并对单片机多串口通讯技术和应用进行了深入的探讨。

1.单片机串口扩展设计

1.1单片机串口扩展的硬件总体设计

单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机与PC机或外设的串行通信一般采用RS232/RS422/RS485总线标准接口。为保证通信可靠,在选择接口时必须注意通信的速率、通信距离、抗干扰能力、电平匹配和通信方式。本文为了解决在单片机串行通信时遇到的串口问题,以MCS51系列单片机8751为例,进行串口扩展,包括通过通信接口芯片8251再扩展一个独立串口,通过16×1的多路切换器CD4067实现一点对多点分时串口通信,以及通过电平转换器MAX232,MAX488,MAX485实现单片机与不同类型接口源供电,驱动能力强。MAX232芯片内置两个TTL到RS232和两个RS232到TTL驱动电路,即具有两个发送器和两个接收器,只需外置4个011μF电容以供内部电路产生RS232电压。MAX232的发送器的发送输入为T1IN/T2IN,发送输出为T1OUT/T2OUT;接收器的接收输入为R1IN/R2IN,接收输出为R1OUT/R2OUT。RS232接口也普遍使用9芯插头座,在许多场合下仅将发送端TXD数据和接收端RXD交叉连接,加上信号地GND共使用三根线,只给出了一路TTL电平接口到RS232电平接口的串行通信电路设计。

1.2单片机与不同类型串口的通信扩展

电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机CPU8751的串口是TTL电平,要实现8751与不同类型串口进行通信,需要用电平转换器完成不同类型串口的转换,才能成功进行通信。下面对单片机8751与RS232/RS422/RS485的串行通信进行接口扩展。

2.单片机多串口通讯的实现技术

2.1采用多串口单片机

目前只有少数单片机具有两个以上的串行通讯接口,有些单片机与MCS-51系列单片机兼容,新增加的串口与原有的串口在使用上基本相同。

采用多串口单片机实现多串口通讯无需额外的软件硬件支持,因而是最为理想的方案,只是这些单片机不太容易买到,价格也比较高。

扩展串行通讯接口在基本系统上扩展串行通讯接口是另外一种可行的方案。目前对于MCS-51系列单片机只有intel8250和intel8251两种接口芯片可供选择。前者为DIP40封装,后者为DIP28封装。两者在使用上有着很大的区别,不能互换使用。

扩展接口方法的缺点是增加了系统的复杂性,扩展芯片的体积也嫌太大。

2.2采用多路模拟开关

该方法是将串口通过多路模拟开关分别与各路通讯线路连接,适用于多路通讯分时进行,没有交叉的情形。这种方法工作比较可靠,技术上也比较容易实现,只需利用软件控制多路模拟开关的切换即可。

2.3多单片机协同工作

由于单片机的价格低廉,采用多个廉价的单串口单片机实现多路通讯可能比其它的方案成本更低,技术上也比较容易实现。这种方案比较适合协议转换一类的工作,这样每个单片机只需要负责一种协议数据的处理,便于软件编程。

多单片机协同工作必然要涉及到各个单片机之间的数据交换,这需要一些特殊的通讯技术支持。

2.4利用HSI和HSO功能

在现代的单片机应用中,其具备的主要功能就是高速输入以及高速输出。在实际的应用过程中,通常是将这些功能串行通讯。在数据接收的过程中通常会应用到高速输出功能,应用高速输出功能首先是根据单片机的通讯波特频率确定定时时间,然后在对检测接收数据的起始位用高速输出检测。如果检测到起始位时,就对其进行中断,在中断过后对读入的数据进行拼装,在完成此项工作过后必须储存所有接收的数据。

在利用高速输出进行数据处理时,可以通过向寄存器写入相关的命令,然后就可以直接进行数据处理,并且根据波特率对时间间隔进行处理。发送多位数据则对应多条命令,也可以利用高速输出中断实现。

2.5软件模拟

对于不具备高速输入和高速输出功能,又不能进行扩展的单片机,软件模拟是一种增加串口的可行方案。软件模拟是利用软件模拟串行通讯的时序,因此需要占用较多的软件资源。具体实现时可以利用定时器辅助进行,下面将给出实现该方案的技术细节。

3.串行通讯的软件模拟实现

利用软件模拟发送的基本思想是,首先根据通讯速率确定发送每一位的间隔时间,然后根据数据格式和内容进行逐位操作。间隔时间的控制可以用软件延时,也可以使用定时器。例如,对于11.0592MHz的系统时钟和9600波特率,对于MCS-51系列单片机,可以计算出8位定时器的定时时间常数初值。

若使用MCS-51系列单片机定时器0的工作方式2作为定时控制,9600波特率,使用Pl.0作为发送线模拟串行通讯方式1。

软件模拟接收的基本思想是,利用外部中断检测起始位,一旦检测到起始位即进入中断服务程序,在中断服务程序中延时半个数据位时间后再次检测端口状态,以防止干扰的影响。检测无误后关闭外部中断,同时打开定时器中断。在定时器中断服务程序中接收数据位并进行拼装,接收完毕后即可关闭定时器中断。待主程序处理完接收数据后再打开外部中断以便开始下一个数据的接收。

若使用定时器0的工作方式2作为定时控制9600波特率,使用P3.3作为接收线模拟串行通讯方式1。

4.结束语

篇5:串口通讯服务器・什么是网络协议

网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防火墙等)之间通信规则的集合,它定义了通信时信息必须采用的格式和这些格式的意义。大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第n层与另一台设备上的第n层进行通信的规则就是第n层协议。在网络的各层中存在着许多协议,接收方和发送方同层的协议必须一致,否则一方将无法识别另一方发出的信息。网络协议使网络上各种设备能够相互交换信息。

常见的协议有:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。在局域网中用得的比较多的是IPX/SPX.。用户如果访问Internet,则必须在网络协议中添加TCP/IP协议。

TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议)协议, TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。TCP/IP是INTERNET的基础协议,也是一种电脑数据打包和寻址的`标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在INTERNET中几乎可以无差错地传送数据。 对普通用户来说,并不需要了解网络协议的整个结构,仅需了解IP的地址格式,即可与世界各地进行网络通信。

IPX/SPX是基于施乐的XEROX’S Network System(XNS)协议,而SPX是基于施乐的XEROX’S SPP(Sequenced Packet Protocol:顺序包协议)协议,它们都是由novell公司开发出来应用于局域网的一种高速协议。它和TCP/IP的一个显著不同就是它不使用ip地址,而是使用网卡的物理地址即(MAC)地址。在实际使用中,它基本不需要什么设置,装上就可以使用了。由于其在网络普及初期发挥了巨大的作用,所以得到了很多厂商的支持,包括microsoft等,到现在很多软件和硬件也均支持这种协议。

NetBEUI即NetBios Enhanced User Interface ,或NetBios增强用户接口。它是NetBIOS协议的增强版本,曾被许多操作系统采用,例如Windows for Workgroup、Win 9x系列、Windows NT等。NETBEUI协议在许多情形下很有用,是WINDOWS98之前的操作系统的缺省协议。总之NetBEUI协议是一种短小精悍、通信效率高的广播型协议,安装后不需要进行设置,特别适合于在“网络邻居”传送数据。所以建议除了TCP/IP协议之外,局域网的计算机最好也安上NetBEUI协议。另外还有一点要注意,如果一台只装了TCP/IP协议的WINDOWS98机器要想加入到WINNT域,也必须安装NetBEUI协议。

★ 离婚房产分割协议详解

★ 网络协议第二章链路层

★ 网络交换机?什么是网络交换机

★ 什么是网络拖延症

★ 档案详解

★ 网络是一把双刃剑作文

★ 异地协议离婚的程序是哪些

★ 详解建党节有哪些历史流程,建党节是纪念什么?

★ 网络求职 简历醒目是关键

篇6:串口通讯实验报告

目前终端服务器支持的操作系统主要有WINDOWS类操作系统、UNIX类操作系统、Linux系统以及NETWARE操作系统等几大类。

(1)WINDOWS类操作系统

(2)UNIX类操作系统

(3)Linux操作系统

篇7:VC++6.0实现串口通讯

串行通讯是计算机与其他设备进行数据交换时经常使用的方法之一。他具有实现简单,使用灵活方便,数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用。

VC下实现串行通讯有多种方法,如利用Windows API函数、利用MSComm ActiveX控件,多线程等。由于MSComm ActiveX控件在串口编程中非常方便,本文介绍用MSComm ActiveX控件实现串口通讯数据的处理。

1 通信协议

串口通信的协议标准目前应用最广泛的是RS-232标准,RS-232标准已被内置于从微控制器到主机的多种类型的计算机及其相连接的设备中,在工控系统及硬件设计中有着广泛的应用。

RS-232对电器特性、逻辑电平和各种信号线功能都作了规定。

2 MSComm控件串口编程基本流程

Microsoft Communication Control (简称MSComm)是Microsoft公司的简化Windows下串行通讯编程的ActiveX控件,它为应用程序提供了通过串口收发数据的简便方法。它提供两种处理通讯的方式:事件驱动法和查询法。

其中事件驱动通讯是利用MSComm控件的OnComm事件捕获并处理通讯事件,它类似于硬件的中断方式,具有响应及时和可靠性高的特点。

查询法则是通过检查MSComm的CommEvent属性值来查询事件和错误。本程序中采用的是事件驱动方式。

2.1 加入MSComm控件并初始化

在VC++6.0环境下,依次选择菜单中的Project、Add To Project、Components and Controls,添加Microsoft Communications Control控件到控件工具栏,将控件从工具栏拉至对话框中,即在类视图中自动添加了CMSComm类。

初始化代码如下:

此程序为打开并设置通信端口程序,并实现了多串口的自动选择,这样就避免了因端口号固定给工作带来的不便。由于发射机型号固定,发射数据格式一定,因此串口参数设为固定值波特率9600无校验、8个数据位、1个停止位。

设定接收到1个字符而不是一帧数据长度引发一个串口事件,避免了在接收过程中,一帧数据被分多次发送的情况下,无法激发串口事件而引起的数据遗失。

2.2 发送及收数据

按照上面的方式打开串口后,关键的问题就是添加OnComm ()中的处理代码。发射机每发送一个字符,就引发以下程序。

PC机发送和接收数据的程序如下:

用事件驱动方法编程时应注意,OnComm事件在通信事件或错误发生时都会激发,在处理函数中对各种可能的情况列举出来了并进行分别处理。

3 结束语

使用通信控件进行编程是实现串行通信较好的方法。

只要掌握好控件的属性,设定好可靠的通信协议,就能顺利进行通信,本文创新点是在多串口中可进行自行响应和判断。

参考文献

[1]张曜,郭立山,吴天.C函数实用手册[M]北京:冶金工业出版社.2003.

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

篇8:基于VB的串口通讯及其软件实现

关键词:串口;RS232;API;Pcomm;Mscomm;通信程序

中图分类号:TN911文献标识码:A 文章编号:1000-8136(2009)27-0001-03

现在通讯方式越来越多,速度越来越快,但串行通讯由于自身价格低、协议透明、硬件投资少、软件编程简单等诸多优点在远程数据采集、监视、通信及控制领域里一直占据着极其重要的地位。它不仅没有因为时代的进步而被淘汰,反而在规格上越来越完善、应用越来越广,长久不衰。

1串口通信的通信机理

PC串行通信是指直接对串行端口的UART(PC机的通用异步收发器,也叫异步通信适配器,是PC机用于异步通信的接口)进行编程实现的通信。PC机每个UART中的INS8250中有10个可编程的单字节寄存器,可用于控制、监视操作串行端口,COM1的寄存器地址3F8H-3FEH,COM2的寄存器地址为2F8H-2FEH。10个寄存器由7个地址访问,其中5个寄存器的访问条件是先设置3FBH线路控制寄存器的最高位为“1”,该位也称为DLAB状态位。[1]

一般说来,PC机都有一个或多个串行端口,它们依次为Com1、Com2……。这些串口提供了外部设备与PC进行数据传输和通信的通道,在CPU和外设之间充当了解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;而当接受数据时,从外界进来的比特流数据被转换成字符数据传递给CPU进行处理。在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接受数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。

作为一个VB程序员,要编写串口通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换言之,只需设定和监视通信控件的属性和时间即可。

2串行通讯接口RS-232

前一章节讨论了串口通讯的通信机理,但为了实现具体的数据采集、监视、通信功能,必须了解具体的串口形式。目前使用最广泛的串行接口有两种:RS-232和RS-485。本文着重讨论RS-232,RS- 485不作介绍。

RS-232C标准的全称是EIA-RS-232C标准,其中EIA代表美国电子工业协会,RS代表推荐标准,232是标识号,C代表RS232的最新一次修改(1969年),在这之前,有RS232A、RS232B协议。它规定连接电缆和机械、电气特性、信号功能及传送过程。EIA-RS-232C定义了按位串行传输的数据终端设备(DTE)和数据通讯设备(DCE)之间的接口信息。RS-232C是从DTE或计算机串行接口角度来定义引脚信号的。

目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。RS232采取不平衡传输方式,即所谓的单端通讯。[2]

DB9(9针串口)的接线方式如下:1脚,数据载波检测DCD;2脚,接收数据RXD;3脚,发送数据TXD;4脚,数据终端准备DTR;5脚,信号地GND;6脚,数据设备就绪DSR;7脚,请求发送RTS;8脚,清除发送CTS;9脚,振铃指示DELL。

DB25(25阵串口),常用的针脚也有9个,且和DB9可以一一对应,具体接线方式为:8脚,数据载波检测DCD;3脚,接收数据RXD;2脚,发送数据TXD;20脚,数据终端准备DTR;7脚,信号地GND;6脚,数据设备就绪DSR;4脚,请求发送RTS;5脚,清除发送CTS;22脚,振铃指示DELL。

一般来说,对于要求不太高的场合,使用接收数据RXD,发送数据TXD,信号地GND三个脚即可实现数据传输。如果要求有硬件流控制,则必须使用DTR、DSR、RTS和CTS这四个脚。

值得注意的是RS-232C是用正负电压来表示逻辑状态,与TTL以高电平表示逻辑状态的规定不同。因此,为了能够与计算机接口或终端的TTL器件连接,必须在RS-232C与TTL电路之间进行电平和逻辑关系的变换。目前较为广泛地使用集成电路转换器件,如MC1489、SN75150芯片可完成TTL电平到EIA电平的转换,而MC1489、SN75154可实现EIA电平到TTL电平的转换。

3三种读取串口数据的方式

目前通用的串口通讯的软件实现方式有3种,本文都进行详细的介绍,它们各有自身的优缺点,读者在编程时可根据具体的情况选择合适的方式。

3.1利用Mscomm控件

VB提供的这个通信控件“隐藏”了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。在通信数据量不大,通信要求不是很高的情况下建议采取此方式。

利用Mscomm控件实现通信最需要掌握的就是它的几个主要属性,下面选取其中重要的进行介绍,其余的可以参考相关资料。[3]

(1)Settings属性:以字符串的形式设置并返回波特率、 奇偶校验位、数据位、停止位。这个属性很重要,针对不同的终端设备需要根据设备的具体情况进行调整(比如日本的设备不同于美国的设备,通常会采用奇校验)。

(2)InputMode属性:设置接收数据的类型,0为文本格式,1为二进制格式。

(3)Input属性:读取并删除接收缓冲区中的数据流。

(4)Output属性:向发送缓冲区传送一数据流。

(5)Rthreshold属性:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。

(6)Handshaking属性:设置和返回握手协议,即计算机内部CPU与串口之间的通讯协议,保证在缓冲区过载时数据不会丢失。这个属性在保证数据传输的正确性方面有很大的作用,共有四个选项,分别表示:①无流控制;②软件流控制;③硬件流控制;④软硬件流控制。采用硬件流控时,要求串口之间和电缆支持硬件握手,在自己制作串口通信线时,有关硬件握手的线RTS、CTS、DSR、DTR要连接正确。

在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。

3.2直接调用Win32 API通信函数

直接调用Windows API函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层API函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。

在32位的Windows系统中,串口通信是作为文件处理的,串口操作一般为打开、关闭、读取、写入等操作,相应的Windows API函数如下:[4]

(1)CreateFile()函数:实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。

(2)CloseFile()函数:关闭串口,串口是非共享资源,应用程序以独占方式使用,通信结束应立即关闭。

(3)ReadFile()函数:从串口输入缓冲区读取数据流。

(4)WriteFile()函数:向串口输出缓冲区发送数据。

(5)GetCommState()函数:获取串口的当前配置。

(6)SetCommState()函数:重新分配串口资源的各个参数。

由于Windows API函数大部分是用C或C++编写,所以在Visual Basic 6.0 中调用Windows API函数之前必须先在模块级代码上用Declare语句对所调用的函数和用到的数据结构进行声明,具体的函数声明及数据结构请参考朱友芹编《新编Windows API参考大全》。

3.3调用第三方函数库(如Pcomm函数库)

DLL(Dynamic Link Library)动态链接库是一种可以被VB语言调用的程序模块。DLL中包含的可执行代码不能单独执行,而应由Windows应用程序调用执行。一般数据采集卡的供应商都会提供该采集卡的DLL库函数,使用这些DLL库函数,可以做到程序代码共享,减少程序的编写工作量。用户不需要知道这些代码的实现细节,只需要了解调用函数的参数和函数处理后的返回值。

Pcomm函数库是由台湾Moxa公司为开发串口通信程序提供的一套函数库。通过对Windows API函数的进一步封装,提供50多个串口操作函数。覆盖了Windows操作系统下几乎所有异步通信的问题,可以简洁的开发多线程通讯程序。采用该库,通信的可靠性与使用MSComm32控件比较有了明显提高, 而相对直接使用Win32API函数编程则降低了程序开发难度, 缩短了程序开发周期。

这种方式上述直接调用Windows API函数有相似之处,但也有明显的差异。API函数常采取的方法是在串口监视线程中设置串口通信事件掩码及重叠机制,允许程序在后台等待串口通信事件。通过WaitCommEvent检测特定的串行通信事件。而在Pcomm中,可以采用中断处理的方式,为各种事件指定相应的中断处理函数,如接收到一定数目的字符,接收到结束字符,接收到中止信号以及发送缓冲区为空等;同时还可以采用线程控制的方式,直接采用库中的sio_read()和sio_write()函数读写串口。

Pcomm..DLL中的函数按功能分为6项:端口设置、数据发送与接收、串口状态检测、事件服务、文件传输、杂项。Pcomm..DLL中主要的函数介绍如下。[5]

sio_open:打开端口;sio_close: 关闭端口。

sio_ioctl:设置端口参数,如波特率等。

sio_read:从端口接收数据;sio_write向端口发送数据。

sio_iqueue:得到接收缓冲区中的数据长度。

sio_oqueue:得到发送缓冲区中的数据长度。

Pcomm在串口通信中的功能十分强大,但基于篇幅的考虑,在此不便赘述,读者可参考相关书籍或Pcomm自带的帮助文档。

4串口通讯的错误及处理

由于外界干扰或电压波动等原因,串口通讯可能会出现错误,如接受缓冲区溢出,奇偶校验错误等。为了处理这些错误,在Mscomm控件中就提供了一个OnComm事件,它可以捕获通信时发生的串口事件和错误信息,自动转入事件处理程序。在OnComm事件中,CommEvent属性是OnComm事件的指示,下面简单介绍几个重要的CommEvent属性值。

ComEventBreak:表示收到一个中断信号;

ComEventFrame:表示硬件检测到一个数据帧错误;

ComEvenRxover:表示接收缓冲区溢出;

ComEventTxFull:表示输出缓冲区已满;

ComEvReceive:表示接手到了Rthreshold个字符;

ComEvEOF:表示接受到了EOF字符(ASCII字符26)。

编程时用SelectCase语句,根据不同的CommEvent属性值,去执行不同的处理程序。

除了以上所述的通讯错误外,在串口通信时,如果数据传输突然中断,对串口的读写操作可能会进入无限期的等待状态, 为避免这种情况发生, 必须设置串口读写操作的等待时间, 等待超时后,串口的读写操作将被主动放弃,这样即使数据传输突然中断程序也不会被挂起或阻塞。可以根据具体要求规定串口读写操作的最长时间值,即串口读写必须在这段时间内完成,否则提示串口操作失败。

5串口通讯实例

本实例是一个采集设备电流及功率的通讯程序,采集仪为横河WT230数字功率计,因为要采集的数据量不大,且工程结构简单,故采用Mscomm控件的形式进行串口读写操作。

具体实现步骤如下:

(1)在窗体Form上添加两个重要的控件:Timer1和Mscomm1;

(2)在程序的Form_Load事件过程中添加如下代码:

MSComm1.CommPort=1 ‘使用COM1端口

MSComm1.Setting=“9600,o,8,1” ‘设置通信口参数,注意是奇校验,具体的校验方式要视具体的仪器而定

MSComm1.InputMode=comInputModeBinary ‘设置接收模式为二进制形式,注意一般对于数据采集这类设备通信,都应该设置为二进制形式

MSComm1.PortOpen=True ‘参数设置好后打开端口

MSComm1.HandShaking=2-comRTS ‘设置为硬件流控制,可以有效避免数据丢失的情况发生

(3)程序开始后在一定情况设置Timer1.Enabled属性值为True 激活Timer1_Time事件,可以在固定的时间间隔下执行Timer1_Timer过程中的代码程序,完成数据采集。在Timer1_Timer过程中添加如下代码:

MSComm1.Output = "COMMUNICATE:WAIT 1" + Chr(13) + Chr(10)

MSComm1.Output = "MEASURE:NORMAL:VALUE?" + Chr(13) + Chr(10)

上述语句是将读取指令发送到串口输出缓冲区(注意每个命令字符串后都要加上回车和换行符Chr(13) + Chr(10)),再由系统将其自动发送给通过RS232通信线与计算机端口连接的WT230数字功率计,功率计在接收到命令字符串后,经过自身的单片机处理,就自动地把它测到的电压、电流、功率数据以固定的格式和字符形式通过RS232通信线传回至计算机,计算机程序从输入缓冲区读取这些字符数据并利用VB字符处理函数(如Val,InStr)进行处理就得到了所要的数据,下面是具体的程序代码。

Dim bytinput() as byte ‘注意要将bytinput定义为不定长数组

Dim strtem As String

Dim i as Integer

bytinput =MSComm1.Input ‘将输入缓冲区数据读入给字节型数组bytinput

For i = 0 To UBound(bytinput)

strtem = strtem + Chr(bytinput(i)) ‘字节数组中的ASCII码值转换成相应 Next 的字符

得到的strtem字符就形象的展示了电流、电压和功率值。对于WT230而言,它的数据结构是这样的,每个数据之间由逗号字符“,”隔开,每个数据以用科学计数法表示,且每个数据以字符“E”分为前半部分和后半部分,前半部分为具体的数据(整数形式),后半部分为此数据的指数,指数的底为10。

例如得到strtem的值为“23423E-2,00241E-3,05645E-2”这就表示电压值为234.23 V,电流值为0.241 A,功率为56.45 W。

6结论

串口通讯的硬件投资少,软件编程简单,在低速少量数据传输方面的应用极其广泛的应用。本文详细介绍了串口通讯的基本内容及其具体实现方式,读者可以根据具体情况进行选择。以上代码是实现串口通信的核心部分,经过笔者在多个数据采集系统开发中的应用,具有较强的实用价值。

参考文献

1 李朝青.PC机及单片机数据通信技术[M].北京:国防工业出版社,2002

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

3 [美] Microsoft公司著、北京希望电脑公司译.Microsoft Visual Basic 6.0 控件参考手册[M],1999

4 朱友芹.新编Windows API参考大全[M].电子工业出版社,2000

5 MOXA Crop.Pcomm Library Programming Guide,1998

6 范逸之.Visual Basic 与RS232串行通信控制.北京:中国青年出版社,2000

Serial communication and the program based on Visual Basic

Wen Cai, Zhang Xiaosong

Abstract:Serial communication has broad application in many fields because of its simple communication circuitry and flexibility. Based on deep comprehension of the technology of the serial communications, this article expounds important technology detail integrated with practice experience. An example of communication program is presented and analyzed, which gives other researchers valuable reference information.

上一篇:山行作文650字下一篇:苦与甜的作文