串口传输实验报告.docx

上传人:b****7 文档编号:9063521 上传时间:2023-02-03 格式:DOCX 页数:9 大小:19.72KB
下载 相关 举报
串口传输实验报告.docx_第1页
第1页 / 共9页
串口传输实验报告.docx_第2页
第2页 / 共9页
串口传输实验报告.docx_第3页
第3页 / 共9页
串口传输实验报告.docx_第4页
第4页 / 共9页
串口传输实验报告.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

串口传输实验报告.docx

《串口传输实验报告.docx》由会员分享,可在线阅读,更多相关《串口传输实验报告.docx(9页珍藏版)》请在冰豆网上搜索。

串口传输实验报告.docx

串口传输实验报告

串口传输实验报告

篇一:

RS232串口通信实验报告

  RS232串口通信实验报告

  学号:

  学院:

电子信息学院班级:

08031102姓名:

张泽宇康启萌余建军时间:

XX年11月13日学校:

西北工业大学XX301966XX301950XX301961

  一.实验题目:

  设计一个简单的基于串口通信的信息发送和接受界面

  二.实验目的:

  1.熟悉并掌握RS232串口标准及原理。

  2.实现PC机通过RS232串口进行数据的收发。

  3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。

  三.实验内容

  程序代码:

  P//PC1PC2Dlg.cpp:

implementationfile

  //

  #include"stdafx.h"

  #include"PC1PC2.h"

  #include"PC1PC2Dlg.h"

  #ifdef_DEBUG

  #definenewDEBUG_NEW

  #undefTHIS_FILE

  staticcharTHIS_FILE[]=__FILE__;

  #endif

  //////////////////////////////////////////////////////////////////////////

  //CAboutDlgdialogusedforAppAbout

  classCAboutDlg:

publicCDialog

  {

  public:

  CAboutDlg();

  //DialogData

  //{{AFX_DATA(CAboutDlg)

  enum{IDD=IDD_ABOUTBOX};

  //}}AFX_DATA

  //ClassWizardgeneratedvirtualfunctionoverrides

  //{{AFX_VIRTUAL(CAboutDlg)

  protected:

  virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL

  //Implementation

  protected:

  //{{AFX_MSG(CAboutDlg)

  //}}AFX_MSG

  DECLARE_MESSAGE_MAP()

  };

  CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

  {

  //{{AFX_DATA_INIT(CAboutDlg)

  //}}AFX_DATA_INIT

  }

  voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

  {

  CDialog:

:

DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CAboutDlg)

  //}}AFX_DATA_MAP

  }

  BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

  //{{AFX_MSG_MAP(CAboutDlg)

  //Nomessagehandlers

  //}}AFX_MSG_MAP

  END_MESSAGE_MAP()

  /////////////////////////////////////////////////////////////////////////////

  //CPC1PC2Dlgdialog

  CPC1PC2Dlg:

:

CPC1PC2Dlg(CWnd*pParent/*=NULL*/)

  :

CDialog(CPC1PC2Dlg:

:

IDD,pParent)

  {

  //{{AFX_DATA_INIT(CPC1PC2Dlg)

  m_send=_T("");

  m_receive=_T("");

  m_bt=_T("");

  //}}AFX_DATA_INIT

  //NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32

  m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

  }

  voidCPC1PC2Dlg:

:

DoDataExchange(CDataExchange*pDX)

  {

  CDialog:

:

DoDataExchange(pDX);

  //{{AFX_DATA_MAP(CPC1PC2Dlg)

  DDX_Control(pDX,IDC_MSCOMM1,m_Comm);

  DDX_Text(pDX,IDC_EDIT1,m_send);

  DDX_Text(pDX,IDC_EDIT2,m_receive);

  DDX_CBString(pDX,IDC_COMBO1,m_bt);

  //}}AFX_DATA_MAP

  }

  BEGIN_MESSAGE_MAP(CPC1PC2Dlg,CDialog)

  //{{AFX_MSG_MAP(CPC1PC2Dlg)

  ON_WM_SYSCOMMAND()

  ON_WM_PAINT()

  ON_WM_QUERYDRAGICON()

  ON_BN_CLICKED(IDC_BUTTON1,OnButton1)

  ON_BN_CLICKED(IDC_BUTTON_SET,OnButtonSet)

  ON_BN_CLICKED(IDC_BUTTON2,OnButton2)

  //}}AFX_MSG_MAP

  END_MESSAGE_MAP()

  /////////////////////////////////////////////////////////////////////////////

  //CPC1PC2Dlgmessagehandlers

  BOOLCPC1PC2Dlg:

:

OnInitDialog()

  {

  CDialog:

:

OnInitDialog();

  //Add"About..."menuitemtosystemmenu.

  //IDM_ABOUTBOXmustbeinthesystemcommandrange.

  ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

  ASSERT(IDM_ABOUTBOX  CMenu*pSysMenu=GetSystemMenu(FALSE);

  if(pSysMenu!

=NULL)

  {

  CStringstrAboutMenu;

  strAboutMenu.LoadString(IDS_ABOUTBOX);

  if(!

strAboutMenu.IsEmpty())

  {

  pSysMenu->AppendMenu(MF_SEPARATOR);

  pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}

  }

  //Settheiconforthisdialog.Theframeworkdoesthisautomatically

  //whentheapplication'smainwindowisnotadialog

  SetIcon(m_hIcon,TRUE);//Setbigicon

  SetIcon(m_hIcon,FALSE);//Setsmallicon

  //TODO:

Addextrainitializationhere

  m_Comm.SetCommPort

(1);//选择COM1

  m_Comm.SetInputMode

(1);//输入方式为二进制方式

  m_Comm.SetRThreshold

(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

  //CStringstr;

  //str="9600,n,8,1";

  //m_Comm.SetSettings(str);

  m_Comm.SetPortOpen(TRUE);//打开串口

  returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

  }

  voidCPC1PC2Dlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

  {

  if((nID&0xFFF0)==IDM_ABOUTBOX)

  {

  CAboutDlgdlgAbout;

  dlgAbout.DoModal();

  }

  else

  {

  CDialog:

:

OnSysCommand(nID,lParam);

  }

  }

  //Ifyouaddaminimizebutton

toyourdialog,youwillneedthecodebelow

  //todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,

  //thisisautomaticallydoneforyoubytheframework.

  voidCPC1PC2Dlg:

:

OnPaint()

  {

  if(IsIconic())

  {

  CPaintDCdc(this);//devicecontextforpainting

  SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

  //Centericoninclientrectangle

  intcxIcon=GetSystemMetrics(SM_CXICON);

篇二:

串口传输实验报告

  基于单片机的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机上显示时,那时的心情无法言语,希望以后能够以此为基础更好地学习。

篇三:

串口通信实验报告

  单片机实验报告

  课程名称

  实验名称专业班级学号姓名

  实验地点实验日期

  一、实验目的

  1、掌握8051单片机串行口工作原理;

  2、掌握串口编程与调试方法;3、了解Modbus协议及其应用;

  4、了解数据传输的可靠性措施与CRC校验实现方法;5、掌握8051单片机的Modbus编程;二、实验仪器

  三、实验内容

  串口功能验证:

PC机与8051单片机通信实验:

若PC机发送数据a,则单片机接收a后向PC机发送a+1;用串口工具软件(sscom32)观察通信结果。

  设计思路:

PC机采用主动方式,单片机为被动方式,因单片机端不知道PC何时发数据,若单片机采用查询方式接收,会产生接收不到PC数据而“死等”的现象。

因此为了不影响单片机端的主程序运行,单片机应采用中断方式接收;参考源码:

  //中断服务程序

  unsignedcharRxd_Data;//串口接收数据

  unsignedcharRxd_Over;//串口接收完成标志//串口初始化函数9600bpsvoidSbuf_Init(void){

  SCON=0x50;//10位方式//波特率设置

  PCON=0x00;//波特率不倍增

  TMOD=(TMOD&0x0f)|0x20;//T1方式2TH1=0xfd;//T1计数初值TL1=0xfd;

  ES=1;EA=1;//串口中断使能TR1=1;//启动定时器}

  voidUART_ISR(void)interrupt4{

  if(RI)//接收产生的中断{RI=0;//清接收标志Rxd_Data=SBUF;//接收数据Rxd_Over=1;//置Rxd_Over标志}}

  voidmain(void){

  Sbuf_Init();//串口初始化while

(1){if(Rxd_Over)//若接收完成{//串口数据发送SBUF=a+1;//串口发送while(TI==0);//等待发送完成TI=0;//清发送标志Rxd_Over=0;//清Rxd_Over标志}}}

  利用此程序可以判断串口通信是否正常。

串口通信失败的原因有如下几种情况:

(1)串口线未连接,用一根导线将串口线2,3脚短接,scomm32工具发送数据,根据能否接收数据判断串口线连接是否正常;

  

(2)最小系统板硬件故障:

借助示波器观察单片机的串口接收与发送CMOS电平与RS232电平可排查硬件故障;(3)软件问题。

  四、预习要求

  完成实验源码的预编写。

  五、实验步骤

  使用串口前,应对它进行初始化。

设置串行口工作方式控制(SCON);

  设置串口通信波特率:

T1(TMOD、TH1、TL1、ET1、EA、TR1、PCON);串口中断使能(ES、EA)。

具体步骤如下:

  

(1)设置串行口工作方式控制(SCON)如11位波特率可变的异步通信方式:

  SCON=0xd0;(11010000)

  

(2)借助T1初使化通信波特率(TMOD)

  Baud=2^SMOD×(T1溢出率/32)

  令SMOD=0,则9600=1/(n*12/fosc*32),若fosc=11.0592则n=3T1:

采用方式2(8位自动载入)即:

PCON=0x00;

  TMOD=(TMOD&0x0f)|0x20;TH1=0xfd;TL1=0xfd;TR1=1;

  六、实验过程

  程序部分:

  #include"reg51.h"#include"crc16.h"

  #defineMODBUS_ADDR0x01#defineMODBUS_RD0x03#defineMODBUS_WDATA10x02

  unsignedcharRxD_buf[8],TxD_buf[8];

  unsignedcharRX_OVER;//全局变量:

1:

串口接收完成标志////////////////////////////////////////////////////////////中断服务程序/////////////////////////////////////////////////////////////////////////////////////////voidUART_ISR(void)interrupt4{

  staticunsignedcharcount=0;staticunsignedcharpre_data=0;staticunsignedcharmid_data=0;staticunsignedcharnow_data=0;

  //////////////////////////////////////////////if(RI){

  now_data=SBUF;

  if(pre_data==MODBUS_ADDR&&mid_data==MODBUS_RD&&

  now_data==MODBUS_WDATA1)

  {}

  RxD_buf[0]=pre_data;RxD_buf[1]=mid_data;RxD_buf[2]=now_data;count=3;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1