串口传输实验报告.docx
《串口传输实验报告.docx》由会员分享,可在线阅读,更多相关《串口传输实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
串口传输实验报告
串口传输实验报告
篇一:
RS232串口通信实验报告
RS232串口通信实验报告
学号:
学院:
电子信息学院班级:
08031102姓名:
张泽宇康启萌余建军时间:
2014年11月13日学校:
西北工业大学201130196620113019502011301961
一.实验题目:
设计一个简单的基于串口通信的信息发送和接受界面
二.实验目的:
1.熟悉并掌握RS232串口标准及原理。
2.实现PC机通过RS232串口进行数据的收发。
3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。
三.实验内容
程序代码:
P//:
implementationfile
//
#include““
#include““
#include““
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE=__FILE__;
#endif
//////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg;
//DialogData
//{{AFX_DATA
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL
protected:
virtualvoidDoDataExchange;//DDX/DDVsupport//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG
//}}AFX_MSG
DECLARE_MESSAGE_MAP
};
CAboutDlg:
:
CAboutDlg:
CDialog
{
//{{AFX_DATA_INIT
//}}AFX_DATA_INIT
}
voidCAboutDlg:
:
DoDataExchange
{
CDialog:
:
DoDataExchange;
//{{AFX_DATA_MAP
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP
//{{AFX_MSG_MAP
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP
/////////////////////////////////////////////////////////////////////////////
//CPC1PC2Dlgdialog
CPC1PC2Dlg:
:
CPC1PC2Dlg
:
CDialog
{
//{{AFX_DATA_INIT
m_send=_T;
m_receive=_T;
m_bt=_T;
//}}AFX_DATA_INIT
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp->LoadIcon;
}
voidCPC1PC2Dlg:
:
DoDataExchange
{
CDialog:
:
DoDataExchange;
//{{AFX_DATA_MAP
DDX_Control;
DDX_Text;
DDX_Text;
DDX_CBString;
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP
//{{AFX_MSG_MAP
ON_WM_SYSCOMMAND
ON_WM_PAINT
ON_WM_QUERYDRAGICON
ON_BN_CLICKED
ON_BN_CLICKED
ON_BN_CLICKED
//}}AFX_MSG_MAP
END_MESSAGE_MAP
/////////////////////////////////////////////////////////////////////////////
//CPC1PC2Dlgmessagehandlers
BOOLCPC1PC2Dlg:
:
OnInitDialog
{
CDialog:
:
OnInitDialog;
//Add“About...”menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT==IDM_ABOUTBOX);
ASSERT;
CMenu*pSysMenu=GetSystemMenu;
if
{
CStringstrAboutMenu;
;
if)
{
pSysMenu->AppendMenu;
pSysMenu->AppendMenu;}
}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication’smainwindowisnotadialog
SetIcon;//Setbigicon
SetIcon;//Setsmallicon
//TODO:
Addextrainitializationhere
m_;//选择COM1
m_;//输入方式为二进制方式
m_;//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
//CStringstr;
//str=“9600,n,8,1”;
//m_;
m_;//打开串口
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol
}
voidCPC1PC2Dlg:
:
OnSysCommand
{
if==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
dlgAb
;
}
else
{
CDialog:
:
OnSysCommand;
}
}
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow
//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,
//thisisautomaticallydoneforyoubytheframework.
voidCPC1PC2Dlg:
:
OnPaint
{
if)
{
CPaintDCdc;//devicecontextforpainting
SendMessage,0);
//Centericoninclientrectangle
intcxIcon=GetSystemMetrics;
篇二:
串口传输实验报告
基于单片机的RS232和RS485总线的数据传输
张裕卓XX班
摘要
本设计是基于单片机的RS232和RS485总线的数据传输实验设计。
通过MAX232和MAX485芯片进行电平转换,按照设计要求,先将单片机输出的TTL电平经MAX232转换为RS232电平,再通过MAX232将RS232电平转换为TTL电平,以便于作为MAX485信号的输入,经过MAX485转换后得到RS485电平,以进行发送端的数据发送,在接收端,用MAX485再将RS485电平转换为TTL电平,再用MAX232转换为RS232电平以提供给PC机并在上位机中显示,从而完成了串口通信。
整个设计电路简洁,功能完成良好。
关键词:
电平转换、单片机、串口通信
1.设计要求
了解RS232和RS485总线的电平特性。
使用MAX232和MAX485芯片进行单片机和微机的数据传输。
将单片机的TTL电平传输到MAX232转换成RS232电平,再转RS485总线远距离传输。
同时接收方划拨给RS485信号转为RS232信号,传送到目标PC机上,用超级终端显示。
2.设计原理及方案
RS232是美国电子工业协会制定的一种串行物理接口标准,在双工通信中只需要三根信号线就可以实现数据传输,因此被广泛使用,但是因为其为单端传输,传输过程中易受干扰,从而制约了其传输距离。
RS485接口电路采用平衡差分结构,且收发器共用总线。
其主要优点为低阻传输线对电气噪声不敏感,且其差分结构可有效抑制共模噪声。
故可适用于远距离信号传输。
本设计方案基于此,通过电平转换来优化数据传输的效果,从而较好的实现串口通信。
现分别介绍电平转换模块和串口通信模块。
数字系统中,数据用“0”和“1”及其组合表示,而“0”和“1”则用物理的电气电平信号表示,例如经常使用的TTL电平中5V表示“1”,0V表示“0”。
在RS232系统中,用-3~-15V表示“1”,3~15V表示“0”,-3~3V间的电平无效。
在RS485系统中,使用差分电平传输,当正向输出端电压高于反向输出端电压时表示“1”,当反向输出端电压高于正向输出端电压时表示“0”。
根据题目要求,需要进行电平转换才能实现串口传输。
MAX232和MAX485是MAXIM公司的电平转换芯片,MAX232能够实现TTL与RS232间的电平转换,MAX485能够实现TTL与RS485间的电平转换。
从而根据题目要求,我们在发送端用两块MAX232进行TTL-RS232-TTL电平转换,然后用一块RS485转换为RS485电平;在接收方,我们先用一块MAX485将RS485电平转换为TTL电平,然后用一块MAX232将电平转换为RS232电平,从而可以传输给使用RS232电平的PC机。
串口是单片机中普遍存在和使用的一种外部设备,主要用以与其他设备通信。
在51单片机中,串口通信一般使用异步串口通信模式,其波特率用定时器进行配置,可以配置成不同的波特率以便于通信需求。
并且其数据的接受可以产生串口中断,以便于数据的获取。
在本设计中,只要求单工通信,故只需要用单片机的串口发送数据,在PC端进行接受即可。
本设计中的波特率为19200bps,通过理论分析,能够很好地进行数据传输。
3.系统硬件设计
因MAX232和MAX485外围电路比较简单,系统硬件设计比较简洁,只需按照要求画出电路即可。
根据电路腐蚀出电路板,并进行焊接调试,效果良好。
图1.发送方电路
图2.接收方电路
4.系统软件设计
本系统软件设计要求简单,只需要实现单工信号传输即可,故只需要配置单片机的串口传输模块,在PC机上进行观察即可。
程序设计流程图如下:
图3.程序流程图
5.设计过程中遇到的问题
此次设计,没有一帆风顺,在其过程中遇到了很多问题,其中最严重的问题是对于电平变换的理解。
之前没有考虑到RS232电平转换为RS485电平需要经过TTL电平过渡,导致没能正常转换。
经过严格的电路测试及理论分析,我最终发现了这个问题,并通过再加入MAX232进行RS232到TTL的电平转换,最后成功地实现了全部的电平转换,并实现了串口通信,在PC机上显示正常。
6.总结
此次课程设计让我对电平转换和单片机串口通信知识有了更深入地了解,在其过程中我也初步掌握了一些技能,比如keil和protel的熟练使用。
实验过程中很多问题出现了,但是我并没有灰心,而是更加坚定了前进的步伐,当最后信息成功地在PC机上显示时,那时的心情无法言语,希望以后能够以此为基础更好地学习。
篇三:
西安邮电大学串口通信实验报告
《高级Internet》实验报告
题目:
串口通信
学生姓名:
班级:
软件工程1202学号:
指导老师:
王文浪
西安邮电大学计算机学院
2015年6月10日
一、实验目的
1.了解串口通信的通信的原理
2.串口包的安装(Windows下)
3.解使用java进行串口通信的配置
二、实验准备
1.首先准备一条串口通信线
2.在设备上实现Java串口通信,需要用到包.目前,常见的Java串口包有SUN在1998年发布的串口通信API:
(Windows下)、(Linux/Solaris);IBM的串口通信API以及一个开源的实现。
鉴于在Windows下SUN的API比较常用以及IBM的实现和SUN的在API层面都是一样的,那个开源的实现又不像两家大厂的产品那样让人放心,这里就只介绍SUN的串口通信API在Windows平台下的使用。
3.到SUN的网站下载
按照其使用说明()的说法,要想使用串口包进行串口通信,除了设置好环境变量之外,还要将复制到\bin目录下;将复制到\lib;把也同样拷贝到\lib目录下。
然而在真正运行使用串口包的时候,仅作这些是不够的。
因为通常当运行“javaMyApp”的时候,是由JRE下的虚拟机启动MyApp的。
而我们只复制上述文件到JDK相应目录下,所以应用程序将会提示找不到串口。
解决这个问题的方法很简单,只须将上面提到的文件放到JRE相应的目录下就可以了.
三、实验过程
1.串口API概览
这是用于描述一个被底层系统支持的端口的抽象类。
它包含一些高层的IO控制方法,这些方法对于所有不同的通讯端口来说是通用的。
SerialPort和ParallelPort都是它的子类,前者用于控制串行端口而后者用于控这并口,二者对于各自底层的物理端口都有不同的控制方法。
这里我只关心SerialPort。
2.
这个类主要用于对串口进行管理和设置,是对串口进行访问控制的核心类。
主要包括以下方法
确定是否有可用的通信端口
为IO操作打开通信端口
决定端口的所有权
处理端口所有权的争用
管理端口所有权变化引发的事件(Event)
3.
这个类用于描述一个RS-232串行通信端口的底层接口,它定义了串口通信所需的最小功能集。
通过它,用户可以直接对串口进行读、写及设置工作4.串口通信实例
(1)要准备相应的设备:
电脑,外设,通过数据线把他们连接起来。
(2)检验外设到底是用的那个COM口和电脑通讯的.也就是说,他们有没有真确的连接上。
可以通过下载串口通讯口测试软件,我用的是”“的绿色软件,进行测试的。
这软件很适应,如果选中的某个COM已经被使用了,它会给你一个相应的提示(端口以被占用)。
如果你不知道到底是使用的那个端口,那么你可以通过superCommTool软件一个一个的试,如果正常的话,那么你可以看到有数据显示在数据接收窗口。
也许,有些主板的串口坏了,那么就要买一个转接卡,通过PCI插口转接。
(3)查看外设使用说明书知道外设的相关参数.比如,波特率,数据位,停止位,校验位,等等。
只有正确参数,才能显示正确的数据。
当然,可以在通讯测试软件上调试这些参数的。
比如:
波特率=2400,数据位=8,停止位=2,校验位=1。
(4)准备开发环境:
最基本的JDK了,使用自己的IDE,帮助开发。
IDE可能自带了JDK,那么你要把相应的javaComm20-win32放到运行时使用的JDK中。
下载JAVAcomm20-win32。
必须把复制到/bin下;把复制到/lib下;把添加到classPath下。
前面两个都是非常重要的。
(5)获取SerialPortsPort对象的方法。
CommPortIdentifierportId=CommPortIdentifier.getPortIdentifier;SerialPortsPort=;
设置串行端口通讯参数:
;
获取输入(出)流:
InputStreamis=;//从外设获取数据
OutputStreamos=;//发送命令到外设
通过监听器就可以得到数据了:
;
;
;
StringBufferlinkWgt=newStringBuffer;//存放获取的数据
newSerialPortEventListener{
publicvoidserialEvent{
intnewData=0;
switch){
case_AVAILABLE:
while{
try{
newData=;
if{
break;}
ifnewData){}
else{newData);}}
catch{
;
return;}
}
try{
));
}
catch{
;}
finally{
try{//用完了,关闭端口。
;;
}catch
{
;}
}break;---------|||||
case:
;
}
}
}
(6)枚举出系统所有的RS232端口
在开始使用RS232端口通讯之前,我们想知道系统有哪些端口是可用的,以下代码列出系统中所有可用的RS232端口:
Enumerationen=;
CommPortIdentifierportId;while)
{
portId=;/*如果端口类型是串口,则打印出其端口信息*/
if==_SERIAL)
{
);
}
}
在电脑上以上程序输出以下结果:
COM1COM2
(7)主要程序
程序文件名称:
*功能:
从串行口COM1中发送数据import*;
import*;
import*;
import*;
import*;
classS_FrameextendsFrameimplementsRunnable,ActionListener{
/*检测系统中可用的通讯端口类*/
staticCommPortIdentifierportId;
/*Enumeration为枚举型类,在util中*/
staticEnumerationportList;
OutputStreamoutputStream;
/*RS-232的串行口*/
SerialPortserialPort;
ThreadreadThread;
Panelp=newPanel;
TextFieldin_message=newTextField;