文档库 最新最全的文档下载
当前位置:文档库 › RS232串口通信实验报告

RS232串口通信实验报告

RS232串口通信实验报告
RS232串口通信实验报告

RS232串口通信实验报告

学院:电子信息学院

班级:08031102

姓名:张泽宇康启萌余建军

学号:2011301966 2011301950 2011301961

时间:2014年11月13日

学校:西北工业大学

一.实验题目:

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

二.实验目的:

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

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

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

三.实验内容

程序代码:

P// PC1PC2Dlg.cpp : implementation file

//

#include "stdafx.h"

#include "PC1PC2.h"

#include "PC1PC2Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

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

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

CAboutDlg();

// Dialog Data

//{{AFX_DATA(CAboutDlg)

enum { IDD = IDD_ABOUTBOX };

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CAboutDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

// Implementation

protected:

//{{AFX_MSG(CAboutDlg)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

//{{AFX_DATA_INIT(CAboutDlg)

//}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CAboutDlg)

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

//{{AFX_MSG_MAP(CAboutDlg)

// No message handlers

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

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

// CPC1PC2Dlg dialog

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

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CPC1PC2Dlg::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()

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

// CPC1PC2Dlg message handlers

BOOL CPC1PC2Dlg::OnInitDialog()

{

CDialog::OnInitDialog();

// Add "About..." menu item to system menu.

// IDM_ABOUTBOX must be in the system command range.

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

ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);

if (pSysMenu != NULL)

{

CString strAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if (!strAboutMenu.IsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

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

}

}

// Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE); // Set big icon

SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here

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

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

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

// CString str;

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

// m_Comm.SetSettings(str);

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

return TRUE; // return TRUE unless you set the focus to a control

}

void CPC1PC2Dlg::OnSysCommand(UINT nID, LPARAM lParam)

{

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

{

CAboutDlg dlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog::OnSysCommand(nID, lParam);

}

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CPC1PC2Dlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

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

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CPC1PC2Dlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

//把字符通过串口发送出去

void CPC1PC2Dlg::OnButton1()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE); //读编辑框内容

if(strlen(m_send)==0)

MessageBox("发送的数据不能为空!","提示",MB_OK);

else

{

m_Comm.SetOutput(COleV ariant(m_send));

Sleep(100);

}

}

BEGIN_EVENTSINK_MAP(CPC1PC2Dlg, CDialog)

//{{AFX_EVENTSINK_MAP(CPC1PC2Dlg)

ON_EVENT(CPC1PC2Dlg, IDC_MSCOMM1, 1 /* OnComm */, OnOnCommMscomm1, VTS_NONE)

//}}AFX_EVENTSINK_MAP

END_EVENTSINK_MAP()

void CPC1PC2Dlg::OnOnCommMscomm1()

{

// TODO: Add your control notification handler code here

V ARIANT data;

COleSafeArray data2;

CByteArray datatemp;

CString strtemp,buffer;

LONG len,i;

BYTE Inbyte[2048],temp;

UpdateData(TRUE); //读编辑框内容

if(m_Comm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符{

data=m_Comm.GetInput(); //读缓冲区

data2=data; //V ARIANT型变量转换为ColeSafeArray型变量len=data2.GetOneDimSize(); ////得到有效数据长度

if(len>0)

{

for(i=0;i

data2.GetElement(&i,Inbyte+i);//转换为BYTE型数组

for(i=0;i

{

temp=*(char*)(Inbyte+i); //字符型

strtemp.Format("%c",temp); //将字符送入临时变量strtemp存放

buffer+=strtemp; //将字符串送入临时变量buffer中存放}

}

m_receive=m_receive+buffer+" ";

}

UpdateData(FALSE); //更新编辑框内容

// MessageBox("gegnxin","提示",MB_OK);

}

void CPC1PC2Dlg::OnButtonSet()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

CString str;

str.Format("%s,n,8,1",m_bt);

m_Comm.SetSettings(str);

}

void CPC1PC2Dlg::OnButton2()

{

// TODO: Add your control notification handler code here

GetDlgItem(IDC_EDIT2)->SetWindowText(_T(""));

}

四.实验过程:

(1)将9针RS232串口通信线与PC机串口连接,并用跳线将RS232串口通信线另一端2(RXD)和3(TXD)短接。

(2)在VC程序环境下,完成相关的程序编写与初始设置。

(3)调试程序完成数据的发送和接受。

或者直接运行PC1PC2.exe程序也可

五.实验总结

通过这次实习,让我了解了什么是VB语言,如何运用VB语言。虽然中途遇到了不少的问题,不过通过查找大量的资料,认真的熟读程序,找出了里面的问题,从中也学到了不少的知识。

这次的实验增强了我的自信心,增强了我对编程的兴趣,我会更加的努力,不断的提高自己的动手能力!

通过本次RS232串口通信实验,实现了在PC机串口标准和串口通信原理下的数据收发,对于PC机串口通信有了进一步的了解。

RS232串口通信实验报告

RS232串口通信实验报告 学院:电子信息学院 班级:08031102 姓名:张泽宇康启萌余建军 学号:2011301966 2011301950 2011301961 时间:2014年11月13日 学校:西北工业大学

一.实验题目: 设计一个简单的基于串口通信的信息发送和接受界面 二.实验目的: 1.熟悉并掌握RS232串口标准及原理。 2.实现PC机通过RS232串口进行数据的收发。 3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。 三.实验内容 程序代码: P// PC1PC2Dlg.cpp : implementation file // #include "stdafx.h" #include "PC1PC2.h" #include "PC1PC2Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

串口通信实验报告全版.doc

实验三双机通信实验 一、实验目的 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; //定义局部变量ij for(i=0;i

{ m=1; //KEY1键按下 return(m); } if(H2==0) { m=4; //KEY4键按下 return(m); } } } if(L2==0) { delay(5); if (L2==0) { L2=0;H1=1;H2=1; if(H1==0) { m=2; //KEY2键按下 return(m); } if(H2==0) { m=5; //KEY5键按下 return(m); } } } if(L3==0) { delay(5); if (L3==0) { L3=0;H1=1;H2=1; if(H1==0) { m=3; //KEY3键按下

UART串口通信设计实例

2.5 UART串口通信设计实例(1) 接下来用刚才采用的方法设计一个典型实例。在一般的嵌入式开发和FPGA设计中,串口UART是使用非常频繁的一种调试手段。下面我们将使用Verilog RTL编程设计一个串口收发模块。这个实例虽然简单,但是在后续的调试开发中,串口使用的次数比较多,这里阐明它的设计方案,不仅仅是为了讲解RTL编程,而且为了后续使用兼容ARM9内核实现嵌入式开发。 串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用USB转串口的方案虚拟一个串口供笔记本使用。图2-7为UART串口的结构图。串口具有9个引脚,但是真正连接入FPGA开发板的一般只有两个引脚。这两个引脚是:发送引脚TxD和接收引脚RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过TxD线1 bit接着1 bit 发送。在接收时,同样通过RxD引脚1 bit接着1 bit接收。 再看看串口发送/接收的数据格式(见图2-8)。在TxD或RxD这样的单线上,是从一个周期的低电平开始,以一个周期的高电平结束的。它中间包含8个周期的数据位和一个周期针对8位数据的奇偶校验位。每次传送一字节数据,它包含的8位是由低位开始传送,最后一位传送的是第7位。

这个设计有两个目的:一是从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是8位放在一起,成为并行状态(见图2-10)。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。

串行通信实验报告

串行通信实验报告 班级学号日期 一、实验目的: 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3、学习串口通讯的程序编写方法。 二、实验要求 1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察收发状态。 2.利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。 三、实验说明 通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上。 连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。波特率定为600,SMOD=0。 在第二个实验中,将两台实验箱的RXD和TXD交叉相连。编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过运行程序观察存储单元内数值的变化。 四、程序 甲方发送程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H MOV 78H,#20H

MOV 77H,00H MOV 76H,20H MOV 75H,40H ACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV IE,#00H CLR F0 MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TI MOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TI MOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TI

串行口通信实验 单片机实验报告

实验六串行口通信实验 一、实验内容 实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。 二、实验目的 掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。 三、实验原理 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。 为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。 单片机串行接口有两个控制寄存器:SCON和PCON。串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。 单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。 四、实验电路 [参考学习板说明书P27]

RS232串口通信详解

串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。--------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片:

--------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、 4800、9600、19200波特。b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。 --------------------------------- 串口通信的传输格式:串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一 位一位的传输。示波器读数时,左边是数据的高位。 例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图 2(RS-232电平)所示。 55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为1010101010B; aaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为1101010100B;

UART串口通信实验报告

实验四 UART 串口通信 学院:研究生院 学号:1400030034 姓名:张秋明 一、 实验目的及要求 设计一个UART 串口通信协议,实现“串 <-->并”转换功能的电路,也就是 “通用异步收发器”。 二、 实验原理 UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实 现全双工传输和接收。在嵌入式设计中,UART 用来主机与辅助设备通信,如汽 车音响与外接AP 之间的通信,与PC 机通信包括与监控调试器和其它器件,如 EEPROM 通信。 UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一 位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑” 0的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是 4、5、6、7、8等,构成 一个字符。通常采用ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“ 1的位数应为偶数(偶校验)或奇数 (奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是 1位、1.5位、2位的高电 平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能 在通信中两台设备间出现了小小的不同步。 因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步 的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“ 1状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol )。 一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为 120 字符/秒,传输使用256阶符号,每个符号代表8bit ,则波特率就是120baud,比 特率是120*8=960bit/s 。这两者的概念很容易搞错。 三、 实现程序 library ieee; use ieee.std 」o gic_1164.all; end uart; architecture behav of uart is en tity uart is port(clk : in std_logic; rst_n: in std 」o gic --系统时钟 --复位信号 rs232_rx: in std 」o gic rs232_tx: out std 」o gic --RS232接收数据信号; --RS232发送数据信号;); use ieee.std_logic_ un sig ned.all;

串行通信实验报告

串行通信实验报告 班级姓名学号日期 一、实验目的: 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3、学习串口通讯的程序编写方法。 二、实验要求 1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察收发状态。 2.利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。 三、实验说明 通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上。 连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。波特率定为600,SMOD=0。 在第二个实验中,将两台实验箱的RXD和TXD交叉相连。编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过运行程序观察存储单元内数值的变化。 四、程序 甲方发送程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H MOV 78H,#20H

— MOV 77H,00H MOV 76H,20H MOV 75H,40H ACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV IE,#00H CLR F0 MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TI MOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TI MOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TI

实验报告-实验一IAR串口通信

实验报告-实验一IAR串口通信 以下是为大家整理的实验报告-实验一IAR串口通信的相关范文,本文关键词为实验,报告,IAR,串口,通信,实验,平台,使用,串口,通信,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。 实验一平台使用及串口通信 本次实验报告在下课后3天内上交!一、实验目的 (1)了解物联网实验 (2)箱熟悉IAR开发平台

(3)能够读懂原理图中有关传感器的接口电路(4)能够建工程项目并编写程序(5)掌握串口通信 二、实验设备 仿真器1台,gec_cc2530板1块,usb连接线1根。 三、实验内容 使用cc2530通过uART接收控制命令,完成LeD的控制。 四、实验代码 完善红色注释部分代码: #include#include #defineuintunsignedint#defineucharunsignedchar #defineRLeDp1_0#definegLeDp1_1#defineYLeDp1_4 voidinituART0(void); ucharRecdata[3]=%ucharRxTxflag=1; uchartemp; uintdatanumber=0;uintstringlen; /*******************************@brief串口(uART0)初始化******************************/voidinituART0(void){ cLKconcmD//设置系统时钟源为32mhZ晶振while(cLKconsTA//等待晶振稳定 cLKconcmD//设置系统主时钟频率为32mhZpeRcFg=0x00;//位置1p0口p0seL=0x3c;//p0用作串口

基于VerilogHDL的RS-232串口通信在CPLD上的实现综述

基于Verilog的RS-232串口通信在CPLD上的实现 CPLD(Complex Programable Logic Device)是一种复杂的用户可编程逻辑器件。采用连续连接结构,延时可预测,从而使电路仿真更加准确。CPLD 是标准的大规模集成电路产品,可用于各种数字逻辑系统的设计。开发工具Quartus II、ISE等功能强大,编程语言灵活多样,使设计开发缩短了周期。 随着嵌入式的发展,对数据的传输和人机交互通信的要求越来越高。而串口通信因其资源消耗少、技术成熟而被广泛应用。系统中上位机与嵌入式芯片之间的交互通信可以通过专用集成芯片作为外设RS-232异步串行接口,如TI、EXAR、EPIC公司的550、452等系列UAWT集成电路,或在拥有Nios系统的FPGA上可以方便地嵌入UART模块。但是在设计中用户会提出自己的要求,如:数据加密或只使用UART部分功能等,即要求更灵活的UART。而且有时CPLD资源剩余,出于成本考虑也会要求设计一种模拟的UART。对于上述的两种情况,就可以在CPLD其丰富的资源上制作一款UART,实现PC机与嵌入式系统之间的数据交换。 1 串口通信协议 1.1 UART简介 通用异步收发器(Universal Asynchronous Receiver Transmitter,UART)。

异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小。具有相关工业标准提供的标准的接口电平规范等优点,在工业控制领域被广泛采用。 异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位。 本设计基于RS-232的数据帧结构,设置数据帧结构如图1所示:1 bit起始位,8 bit数据位,1 bit停止位,无校验位。每帧实质上传送1 Byte数据。 1.2 自定义数据包格式 多个上文所描述的帧就可以组成一个数据包。串口通信是在RS-232数据帧结构的基础上定义的,传输以数据包为单位进行。包结构如图2所示。 本文采用和校验的结构,一个数据包包含15 Byte。其中第1个字节是数据包头即握手字符。第2字节为控制字符,EE代表写命令,DD代表读命

单片机串口通讯实验报告

实验十单片机串行口与PC机通讯实验报告 ㈠实验目的 1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制; 2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议; 3.了解PC机通讯的基本要求。 ㈡实验器材 1.G6W仿真器一台 2.MCS—51实验板一台 3.PC机一台 ㈢实验内容及要求 利用8051单片机串行口,实现与PC机通讯。 本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到PC 机显示器上,再将PC机所接收的字符发送回单片机,并在实验板的LED上显示出来。 ㈣实验步骤 1.编写单片机发送和接收程序,并进行汇编调试。 2.运行PC机通讯软件“commtest.exe”,将单片机和PC机的波特率均设定 为1200。 3.运行单片机发送程序,按下不同按键(每个按键都定义成不同的字符), 检查PC机所接收的字符是否与发送的字符相同。 4.将PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检 查实验板LED数码管所显示的字符是否与PC机发送的字符相同。

㈤ 实验框图

源程序代码: ORG 0000H AJMP START ORG 0023H AJMP SERVE ORG 0050H START: MOV 41H,#0H ;对几个存放地址进行初始化 MOV 42H,#0H MOV 43H,#0H MOV 44H,#0H MOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示 MOV TMOD,#20H ;设置为定时器0,模式选用2 MOV TL1, #0E6H ;设置1200的波特率 MOV TH1, #0E6H SETB TR1 ;开定时器 MOV SCON,#50H ;选用方式1,允许接收控制 SETB ES SETB EA ;开中断 LOOP: ACALL SOUT ;键盘扫描并发送,等待中断 SJMP LOOP SERVE JNB RI,SEND ;判断是发送中断还是接收中断,若为发送中 断则调用 ACALL S IN ;发送子程序,否则调用接收子程序 RETI SEND: CLR TI ;发送子程序 RETI SIN: CLR RI ;接受子程序 MOV SCON, #00H MOV A, SBUF ;接收数据 LCALL XS ;调用显示子程序 RETI 子程序: SOUT: CLR TI ;清发送中断标志位 LCALL KEY ;调用判断按键是否按下子程序 MOV A,R0 ;将按键对应的数字存入A MOV SBUF,A ;输出按键数字给锁存 RET KEY: MOV P1,#0FFH ;将P1设置为输入口 MOV A, P1 CPL A ;将A内值取反

嵌入式系统实验报告-串行通信实验-答案

《嵌入式系统实验报告》 串行通信实验 南昌航空大学自动化学院050822XX 张某某 一、实验目的: 掌握μC/OS-II操作系统的信号量的概念。 二、实验设备: 硬件:PC机1台;MagicARM2410教学实验开发平台台。 软件:Windows 98/2000/XP操作系统;ADS 1.2集成开发环境。 三、实验内容: 实验通过信号量控制2个任务共享串口0打印字符串。为了使每个任务的字符串信息(句子)不被打断,因此必须引入互斥信号量的概念,即每个任务输出时必须独占串口0,直到完整输出字符串信息才释放串口0。 四、实验步骤: (1)为ADS1.2增加DeviceARM2410专用工程模板(若已增加过,此步省略)。 (2)连接EasyJTAG-H仿真器和MagicARM2410实验箱,然后安装EasyJTAG-H仿真器(若已经安装过,此步省略),短接蜂鸣器跳线JP9。 (3)启动ADS 1.2,使用ARM Executable Image for DeviceARM2410(uCOSII)工程模板建立一个工程UART0_uCOSII。(本范例在ADS文件夹中操作) (4)在ADS文件夹中新建arm、Arm_Pc、SOURCE文件夹。将μC/OS 2.52源代码添加到SOURCE文件夹,将移植代码添加到arm文件夹,将移植的PC服务代码添加到Arm_Pc文件夹。 (5)在src组中的main.c中编写主程序代码。 (6)选用DebugRel生成目标,然后编译链接工程。 (7)将MagicARM2410实验箱上的UART0连接跳线JP1短接,使用串口延长线把MagicARM2410实验箱的CZ11与PC机的COM1连接。 注意:CZ11安装在MagicARM2410实验箱的机箱右侧。 (8)PC机上运行“超级终端”程序(在Windows操作系统的【开始】->【程序】->【附件】->【通讯】->【超级终端】),新建一个连接,设置串口波持率为115200,具体设置参考图3.5,确定后即进入通信状态。 (9)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。 (10)全速运行程序,程序将会在main.c的主函数中停止(因为main函数起始处默认设置有断点)。 (11)可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,在超级终端上观察任务0和任务1的打印结果。 五、实验结论与思考题(手写,打印无效): 1、如果任务0删除语句“OSSemPost(UART0_Sem);”,那么程序还能否完全正常无误运行? 答:OSSemPost (OS_EVENT *pevent),这个函数是释放资源,执行后资源数目会加1。在该函数中,删除对应语句则使串口资源UART0_Sem始终无法释放。

RS232串口通信详解

. 串口是计算机上一种非常通用的设备通信协议。 --------------------------------- 串口的引脚定义: 9芯信号方向来自缩写描述 1调制解调器CD载波检测 2调制解调器RXD接收数据 3PC TXD发送数据 4PC DTR数据终端准备好 5GND信号地 6调制解调器DSR通讯设备准备好 7PC RTS请求发送 8调制解调器CTS允许发送 9调制解调器RI响铃指示器 两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。--------------------------------- 串口的电气特性: 1)RS-232串口通信最远距离是50英尺 2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps 3)RS-232C上传送的数字量采用负逻辑,且与地对称 逻辑1:-3 ~-15V 逻辑0:+3~+15V 所以与单片机连接时常常需要加入电平转换芯片:

--------------------------------- 串口通信参数: a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、 4800、9600、19200波特。b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。 c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为 0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。 --------------------------------- 串口通信的传输格式:串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一 位一位的传输。示波器读数时,左边是数据的高位。 例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图 2(RS-232电平)所示。 55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为1010101010B; aaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为1101010100B;

UART串口通信实验报告

实验四UART串口通信 学院:研究生院学号:1400030034姓名:张秋明 一、实验目的及要求 设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。 二、实验原理 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟 rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --RS232接收数据信号; rs232_tx: out std_logic --RS232发送数据信号;); end uart; architecture behav of uart is

RS232+RS485实现通讯实验板

RS232+RS485实现通讯实验板 1 引言 计算机控制系统中经常采用多机系统进行通信,在由PC机和单片机构成的分布式控制系统中,往往以PC机为上位机完成较为复杂的数据处理和对前沿机的监督管理,以及对下位机进行多机协调,本文介绍一种将 RS232,RS485,及红外接口集成在一起的PC机--单片机多功能通讯实验板,用于实现PC机与单片机间的串口通信、红外通信及PC机与PC机间的通讯实验。 2 实验板的组成原理与设计 2.1 串行通信 串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线,以每次一个二进制位移动的,他的优点是只需一对传输线进行传送信息,因此其成本低,适用于远距离通信,他的缺点是传送速度低,串行通信有异步通行和同步通信两种基本通信方式,同步通信适用于传送速度高的情况,其硬件复杂,而异步通信应用于传送速度在50-19200波特之间,是比较常用的传送方式,在异步通信中,数据是一帧一帧传送的,每一串行帧的数据格式由1位起始位,5-8位的数据位,1位的奇偶校验位(可省略)和1位停止位4部分组成,在串行通信前,发送方和接收方要约定具体的数据格式和波特率(通信协议)。 2.2 AT89C51微控制器 AT89C51单片机系统具有设计简单、性能可靠、功耗低等优点,它为用户预留下足够的软硬件资源,可供用户进行再开发应用,该系统除内部已有的 4K FLASH存储器外,还可以扩展选址64K ROM区和64K RAM区,供用户使用,用户在系统开发时,可以将自己的数据块和程序段、数据表,以若干控制子程序、数据块形式存放于AT89C51单片机的扩展ROM或 RAM 区中,以便系统工作时重复使用和反复调用。 2.3 RS232C通信接口 RS232C是一种电压型总线标准,可用于设计计算机接口与终端或外设之间的连接,以不同的极性的电压表示逻辑值。-3~-25V表示逻辑"1"。+3~+25V表示逻辑"0"。其电平与TTL和CMOS电平是不同的,所以在通信时必须进行电平转换。 2.4 MAX232芯片 MAXIM公司的MAX232/MAX232A接收/发送器是MAXIM公司特别为满足EIA/TEA2232E的标准而设计的,他们在 EIA/TIA2232E标准串行通信接口中日益得到广泛的应用,他们具有功耗低、工作电源为单电源、外接电容仅为0.1μF或1μF,采用双列直插封装形式、接收器输出为三态TTL/CMOS等优越性,为双组RS 232接收发送器,工作电源为+5V,波特率高,仅需外接0.1μF或1μF的电容,其价格低,可在一般需要串行通信的系统中使用,MAX232外围需要 4个电解电容,是内部电源转换所需电容,其取值均为1μF/25V宜选用钽电容并且应尽量靠近芯片。。 2.5 红外发送、接收电路 红外通讯以红外线作为通讯载体,通过红外光在空中的传播来传输数据,他由红外发射器和红外接收器来完成,在发射端,发送的数字信号经过适当的调制编码后,送入电光变换电路,经红外发射管转变为红外脉冲发射到空中;在接收端,红外接收器对接收到的红外光脉冲进行光电变换,解调译码后恢复出原信号。 红外发送电路中采用的红外发射器件是塑封的TSAL6200红外发射二极管,他将周期的电信号转变成一定频率的红外光信号,他是一种时断时续的高频红外脉冲信号,但脉冲串时间长度是恒定的,根据脉冲串之间的间隔大小,表示传输的是数据"0"还是

TTL与RS232电平模拟转换电路及工作原理

1.先介绍电脑上与单片机进行通讯的接口的名称 (1)一般是用电脑串口来进行通讯的,平常大家说的电脑的串口是指台式电脑主机后面的九针接口,如下图 这个接口有个专业的名称,叫RS23接口,而RS232接口是串口通讯的一种,其实所谓的接口,我的理解就是一种通信协议,规定了传输电平,传输方式,及怎么传输数据等等。 协议标准规定采用一个25个脚的DB25连接器,还规定了连接器的每个引脚的信号内容,同时还对各种信号的电平加以规定。但随着设备的不断改进,出现了代替DB25的DB9接口,现在都把RS232接口叫做DB9。 (2)电脑上的RS232接口采用的是负逻辑电平: -15~-3表示逻辑1; +15~+3表示逻辑0; 电压值通常在7V左右 (3)我们可以使用串口电缆直接连接两台PC机的串口,实现两台PC机的串口通讯。但是PC 机和单片机的通讯却不能够用电缆直接进行连接,原因是PC机RS232串口的电平标准和单片机的TTL电平不一致,因此单片机和PC机之间的串口通讯必须要有一个RS232/TTL电平转换电路。通常这个电路都选择专用的RS232接口电平转换集成电路进行设计,如MAX232、HIN232等。 2.单片机串口输出的逻辑电平 单片机的串口输出电路采用的逻辑电平是TTL电平。这种电平信号由TTL器件产生的,一般的芯片,如运放,数字器件等... TTL:Transistor-Transistor Logic 三极管结构。 Vcc:5V;VOH>=2.4V;VOL<=0.5V; VIH>=2V;VIL<=0.8V 3.单片机与电脑串口的连接 首先解决的就是逻辑接口电平的问题,其次就是通信方法及方式的问题 (1)在这里我们可以使用集成芯片MAX232,这是一款专门用来进行信号电平的转换的芯片,使用起来简单方便,这里把电路贴出。

单片机实验报告串行口

单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号:090402105 班级:光电一班 实验时间:2011-11-29 南京理工大学紫金学院电光系

一、实验目的 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD、RXD口; 3、了解MAX232芯片的使用。 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。它有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。 要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号做接收或发送移位寄存器的移位时钟。TI和RI分别发送完数据和接收完数据的中断标志,用来向CPU发中断请求。 三、实验内容 1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。 2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。 3、编写一个程序,利用单片机的串行口发送0x55,波特率为9600。 程序设计流程图

4、程序下载运行后,可在PC机上的串口调试软件上(内嵌在DPFlash软件的串口调 试器,设置通信口为COM1口,波特率为9600,数据位8,停止位1)看到接收到“UUUUUU……”,出现这样的结果就基本达到要求。 (1)代码: #include void main() { long int i; SCON=0x40; PCON=0; TMOD=0x20; TH1=0xfd; TL1=0xfd; TI=1; TR1=1; star:for(i=0;i<5000;i++); SBUF=0x55; goto star; } (2)电路图; 5、在单片机接收到0x55时返回一个0x41,在PC机一端,以接收到0x41完成,波特率2400。

ARM串口实验报告.

《 APM串口实验》 实验报告 课程名称:嵌入式微处理器技术 班级:电信 0901 姓名: 地点:嵌入式系统基础实训室 指导教师:王瑾 ARM的串行口实验 一、实验目的 ◆ 1.掌握ARM 的串行口工作原理。 ◆ 2.学习编程实现ARM 的UART 通讯。 ◆ 3.掌握CPU 利用串口通讯的方法。 二、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART 相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。编程实现ARM 和计算机实现串行通讯: ARM 监视串行口,将接收到的字符再发送给串口(计算机与开发平台是通过超级终端通讯的),即按PC 键盘通过超级终端发送数据,开发平台将接收到的数据再返送给PC,在 超级终端上显示。 三、预备知识 1、1.用ARM SDT 2.5或ADS1.2 集成开发环境,编写和调试程序的基本过程。 2、2.ARM 应用程序的框架结构。

3、3.了解串行总线 四、实验设备及工具 硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。 五、实验原理及说明 1.异步串行I/O 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步,字符和字符间还可能有长度不定的空闲时间,因此效率较低。 图2-1 串行通信字符格式 图2-1 给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0” 作为起始位,然后出现在通信线上的是字符的二进 制编码数据。每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后是表示停止位的“1” 信号,这个停止位可以约定持续1 位、1.5位或2 位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50,

相关文档