进程通信实验报告

进程通信实验报告
进程通信实验报告

西安电子科技大学

《操作系统原理》实验报告

题目:进程通信实验报告

班级: 030912

姓名:王增祥

学号: 03091168

实验内容补充说明:

一、分析和设计

1.理论分析

每个Windows进程都是由一个执行体进程块(EPROCESS)表示。API函数CreatProcess 可以创建进程,采用管道技术可以实现进程间的相互通信。建立pipe,进程以及其子进程就可以对该管道进程读写共享,管道读写操作利用,write、read、close进行。父进程利用pipe 发送消息,子进程利用该pipe接收父进程发来的消息;子进程利用管道向父进程发送应答,父进程利用该pipe接受应答。

2.总体设计

1、利用CreatProcess函数创建进程。

2、创建管道,实现进程间的通信

二、详细实现

1、创建界面,采用Botton、列表框等控件创建父子界面如下图:

父进程界面:

子进程界面:

其中父进程各个空间创建类向导如图:

子进程创建类向导如图:

2.父进程编写(1)创建管道:

(2)创建子进程:

(3)消息发送

(4)消息接受

3.子进程编写(1)发送消息

(2)读消息

三、实验结果

点击创建子进程按钮:

在创建子进程之后进行进程间的通信如下图

四、心得体会

1、从试验的角度了解了进程间是怎样利用管道进行通信的,了解了进程间通信的实际过程

2、进一步掌握了MFC的初步编程技巧,知道了怎样调试程序。

3进一步了解了,API函数的应用,明白了怎样进行界面编程。

4、进一步熟悉了在进行进程通信的编写过程中的各个细节。

六、附录

Process_Father.cpp

#include "stdafx.h"

#include "Process_Father.h" //包含已编写的Process_Father.h头文件

#include "Process_FatherDlg.h" //包含已编写的Process_FatherDlg.h头文件

//进行宏定义

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

//创建父进程

BEGIN_MESSAGE_MAP(CProcess_FatherApp, CWinApp)

//{{AFX_MSG_MAP(CProcess_FatherApp)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG

ON_COMMAND(ID_HELP, CWinApp::OnHelp)

END_MESSAGE_MAP()

// CProcess_FatherApp construction

CProcess_FatherApp::CProcess_FatherApp()

{

// TODO: add construction code here,

// Place all significant initialization in InitInstance

}

// The one and only CProcess_FatherApp object

CProcess_FatherApp theApp;

// CProcess_FatherApp initialization

BOOL CProcess_FatherApp::InitInstance()

{

AfxEnableControlContainer();

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL #else

Enable3dControlsStatic(); // Call this when linking to MFC statically #endif

CProcess_FatherDlg dlg;

m_pMainWnd = &dlg;

int nResponse = dlg.DoModal();

if (nResponse == IDOK)

{

// TODO: Place code here to handle when the dialog is

// dismissed with OK

}

else if (nResponse == IDCANCEL)

{

// TODO: Place code here to handle when the dialog is

// dismissed with Cancel

}

// Since the dialog has been closed, return FALSE so that we exit the

// application, rather than start the application's message pump.

return FALSE;

}

Process_FatherDlg.cpp

// Process_FatherDlg.cpp : implementation file

//

#include "stdafx.h"

#include "Process_Father.h"

#include "Process_FatherDlg.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()

///////////////////////////////////////////////////////////////////////////// // CProcess_FatherDlg dialog

CProcess_FatherDlg::CProcess_FatherDlg(CWnd* pParent /*=NULL*/) : CDialog(CProcess_FatherDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CProcess_FatherDlg)

//}}AFX_DATA_INIT

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

}

void CProcess_FatherDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CProcess_FatherDlg)

DDX_Control(pDX, IDC_BT_CreateChildProcess, m_BT_CreateChildProcess);

DDX_Control(pDX, IDC_Send, m_Send);

DDX_Control(pDX, IDC_LISTBOX_Record, m_LISTBOX_Record);

DDX_Control(pDX, IDC_EDIT_Message, m_EDIT_Message);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CProcess_FatherDlg, CDialog)

//{{AFX_MSG_MAP(CProcess_FatherDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BT_CreateChildProcess, OnBTCreateChildProcess)

ON_BN_CLICKED(IDC_Send, OnSend)

//}}AFX_MSG_MAP

ON_MESSAGE(WM_CHILD_SEND,OnReceiveMsg)

END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CProcess_FatherDlg message handlers

BOOL CProcess_FatherDlg::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

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

}

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

{

return (HCURSOR) m_hIcon;

}

void CProcess_FatherDlg::OnBTCreateChildProcess()

{

//创建管道

SECURITY_ATTRIBUTES sa;

sa.nLength=sizeof(SECURITY_ATTRIBUTES);

sa.lpSecurityDescriptor=NULL;

sa.bInheritHandle=TRUE;

::CreatePipe(&hPipeRead,&hPipeWrite,&sa,0);

::CreatePipe(&hPipeRead2,&hPipeWrite2,&sa,0);

//创建子进程

STARTUPINFO StartupInfo;

memset(&StartupInfo,0,sizeof(STARTUPINFO)) ;

StartupInfo.cb=sizeof(STARTUPINFO);

StartupInfo.dwFlags=STARTF_USESTDHANDLES;

StartupInfo.hStdInput=hPipeRead;

StartupInfo.hStdOutput=hPipeWrite;

StartupInfo.hStdError=GetStdHandle(STD_ERROR_HANDLE);

PROCESS_INFORMATION ProcessInfo;

::CreateProcess("Process_Child.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&Startu pInfo,&ProcessInfo);

m_BT_CreateChildProcess.EnableWindow(FALSE);

}

void CProcess_FatherDlg::OnSend()

{

CString str;

char ss[20]="Father:";

m_EDIT_Message.GetWindowText(str);

DWORD dwWritten;

Linux进程间通信(2)实验报告

实验六:Linux进程间通信(2)(4课时) 实验目的: 理解进程通信原理;掌握进程中信号量、共享内存、消息队列相关的函数的使用。实验原理: Linux下进程通信相关函数除上次实验所用的几个还有: 信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。要调用的第一个函数是semget,用以获得一个信号量ID。 int semget(key_t key, int nsems, int flag); key是IPC结构的关键字,flag将来决定是创建新的信号量集合,还是引用一个现有的信号量集合。nsems是该集合中的信号量数。如果是创建新集合(一般在服务器中),则必须指定nsems;如果是引用一个现有的信号量集合(一般在客户机中)则将nsems指定为0。 semctl函数用来对信号量进行操作。 int semctl(int semid, int semnum, int cmd, union semun arg); 不同的操作是通过cmd参数来实现的,在头文件sem.h中定义了7种不同的操作,实际编程时可以参照使用。 semop函数自动执行信号量集合上的操作数组。 int semop(int semid, struct sembuf semoparray[], size_t nops); semoparray是一个指针,它指向一个信号量操作数组。nops规定该数组中操作的数量。 ftok原型如下: key_t ftok( char * fname, int id ) fname就是指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。 当成功执行的时候,一个key_t值将会被返回,否则-1 被返回。 共享内存 共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。首先要用的函数是shmget,它获得一个共享存储标识符。 #include #include #include int shmget(key_t key, int size, int flag); 当共享内存创建后,其余进程可以调用shmat()将其连接到自身的地址空间中。 void *shmat(int shmid, void *addr, int flag); shmid为shmget函数返回的共享存储标识符,addr和flag参数决定了以什么方式来确定连接的地址,函数的返回值即是该进程数据段所连接的实际地

线程实现邮箱通信-实验报告

进程通信实验报告 一、实验名称:进程通信 二、实验目的:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 三、实验原理:邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send ()向对方邮箱发邮件 receive ()从自己邮箱取邮件, send ()和 receive ()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send ()和 receive ()的内部实现主要还是要解决生产者与消费者问题。 四、实验内容:进程通信的邮箱方式由操作系统提供形如send ()和receive ()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。 五、背景知识介绍: 1、sembuf 数据结构 struct sembuf { unsigned short int sem_num; //semaphore number short int sem_op; //semaphore operation short int sem_flg; //operation flag }; sem_num :操作信号在信号集中的编号,第一个信号的编号是0。 进程A 进程B 信箱A 信箱B Send() Send() receive() receive()

数据通信原理实验报告

DONGFANG COLLEGE,FUJIAN AGRICULTURE AND FORESTRY UNIVERSITY 课程名称:数据通信原理 系别:计算机系 年级专业: 2010级电子信息工程 学号: 1050302103 姓名:廖少兵 任课教师:詹仕华成绩: 2012 年12 月25 日

实验项目列表 序号课程名称成绩指导教师 1 模拟信号源实验詹仕华 2 接收滤波器与功放实验詹仕华 3 基带信号的常见码型变换实验詹仕华 4 AMI/HDB3编译码实验詹仕华 5 FSK(ASK)调制解调实验詹仕华6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

实验一模拟信号源实验 实验室名称:_______ 实验设备号:实验时间: 成绩: 模拟信号源实验 1、实验目的和要求 1.了解本模块中函数信号产生芯片的技术参数; 2.了解本模块在后续实验系统中的作用; 3.熟悉本模块产生的几种模拟信号的波形和参数调节方法。 2、实验原理 本模块主要功能是产生频率、幅度连续可调的正弦波、三角波、方波等函数信号(非同步函数信号),另外还提供与系统主时钟同源的2KHZ正弦波信号(同步正弦波信号)和模拟电话接口。在实验系统中,可利用它定性地观察通信话路的频率特性,同时用做PAM、PCM、ADPCM、CVSD( M)等实验的音频信号源。本模块位于底板的左边。 3、主要仪器设备 1.非同步函数信号、同步正弦波信号、模拟电话输入电路 2.时钟与基带数据发生模块,位号:G 3.频率计1台 4.20M双踪示波器1台 5.小电话单机1部 1.非同步函数信号(实物图片如下)

通信工程专业综合实验报告..

通信工程专业综合实验 实验报告 (移动通信系统和网络协议部分) 姓名: 学号: 班级: 指导教师:

实验一:主被叫实验 一、实验目的 1、掌握移动台主叫正常接续时的信令流程。 2、了解移动台主叫时被叫号码为空号时的信令流程。 3、了解移动台主叫时被叫用户关机或处于忙状态时的信令流程。 4、了解移动台主叫时被叫用户振铃后长时间不接听的信令流程。 5、掌握移动台被叫正常接续时的信令流程。 6、掌握通话结束呼叫释放时的信令流程。 7、了解被叫用户振铃后长时间不接听时移动台被叫的信令流程。 二、实验仪器 1、移动通信实验箱一台; 2、台式计算机一台; 3、小交换机一台: 三、实验原理 处于开机空闲状态的移动台要建立与另一用户的通信,在用户看来只要输入被叫号码,再按发送键,移动台就开始启动程序直到电话拨通。实际上,移动台和网络要经许多步骤才能将呼叫建立起来。以移动台和移动台进行通信为例,就包括主叫移动台和主叫MSC建立信令链接、主叫MSC通过被叫电话号码对被叫用户进行选路,即寻找被叫所处的MSC、被叫MSC寻呼被叫MS并建立信令连接过程等三个过程。本实验主要是让学生掌握移动通信中移动台主叫时MS和MSC之间的信令过程、以及为了完成通话连接,主叫MSC和被叫MSC之间的信令过程(即七号信令中的部分消息)。 四、实验内容 1、记录正常呼叫的过程中,移动台主叫部分和被叫部分的信令流程 2、记录被叫关机时,移动台主叫部分的信令流程 3、记录被叫振铃后无应答时,移动台主叫部分和被叫部分的信令流程 4、记录被叫号码无效时,移动台主叫的信令流程 5、记录通话结束后,呼叫链路释放的信令流程 五、实验步骤 主叫实验: 1、通过串行口将实验箱和电脑连接,给实验箱上电。将与实验箱相连的电脑上的学生平台程序打开。在主界面上双击“主叫实验”图标,进入此实验界面。 2、点击“初始化”键,看到消息框中出现“初始化”完成。再点击“开机”键,从而使移动台处于开机状态。

进程管理实验报告文档

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码: #include <> #include <> #include #include <> main() {

int p1,p2; p1=fork(); ockf()函数是将文件区域用作信号量(监视锁),或控制对锁定进程的访问(强制模式记录锁定)。试图访问已锁定资源的其他进程将返回错误或进入休态,直到资源解除锁定为止。而上面三个进程,不存在要同时进入同一组共享变量的临界区域的现象,因此输出和原来相同。 (3) a) 编写一段程序,使其实现进程的软中断通信。 要求:使用系统调用fork() 创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill() 向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process 1 is killed by Parent! Child Process 2 is killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is killed!

杭电通信系统课程设计报告实验报告

通信系统课程设计实验报告 XX:田昕煜 学号:13081405 班级:通信四班 班级号:13083414 基于FSK调制的PC机通信电路设计

一、目的、容与要求 目的: 掌握用FSK调制和解调实现数据通信的方法,掌握FSK调制和解调电路中相关模块的设计方法。初步体验从事通信产品研发的过程. 课程设计任务:设计并制作能实现全双工FSK调制解调器电路,掌握用Orcad Pspice、Protel99se进行系统设计及电路仿真。 要求:合理设计各个电路,尽量使仿真时的频率响应和其他参数达到设计要求。尽量选择符合标称值的元器件构成电路,正确完成电路调试。 二、总体方案设计 信号调制过程如下: 调制数据由信号发生器产生(电平为TTL,波特率不超过9600Baud),送入电平/幅度调整电路完成电平的变换,再经过锁相环(CD4046),产生两个频率信号分别为30kHz和40kHz(发“1”时产生30kHz方波,发“0”时产生40kHz方波),再经过低通滤波器2,变成平滑的正弦波,最后通过线圈实现单端到差分信号的转换。

信号的解调过程如下: 首先经过带通滤波器1,滤除带外噪声,实现信号的提取。在本设计中FSK 信号的解调方式是过零检测法。所以还要经过比较器使正弦信号变成方波,再经过微分、整流电路和低通滤波器1实现信号的解调,最后经过比较器使解调信号成为TTL电平。在示波器上会看到接收数据和发送数据是一致的。 各主要电路模块作用: 电平/幅度调整电路:完成TTL电平到VCO控制电压的调整; VCO电路:在控制电压作用下,产生30KHz和40KHz方波; 低通2:把30KHz、40KHz方波滤成正弦波; 线圈:完成单端信号和差分信号的相互转换; 带通1:对带外信号抑制,完成带信号的提取; 限放电路:正弦波整形成方波,同时保留了过零点的信息; 微分、整流、脉冲形成电路:完成信号过零点的提取; 低通1:提取基带信号,实现初步解调; 比较器:把初步解调后的信号转换成TTL电平 三、单元电路设计原理与仿真分析 (1)带通1(4阶带通)-- 接收滤波器(对带外信号抑制,完成带信号的提取) 要求通带:26KHz—46KHz,通带波动3dB; 阻带截止频率:fc=75KHz时,要求衰减大于10dB。经分析,二级四阶巴特沃斯带通滤波器来提取信号。 具体数值和电路见图1仿真结果见图2。

通信综合实训系统实验报告

通信综合实训系统实验 (程控交换系统实验) 学生姓名 学号 专业班级通信工程班 指导老师 年月日

实验1 局内呼叫处理实验 一、实验目的 1. 通过对模拟用户的呼叫追踪,加深对程控交换机呼叫处理过程的理解; 2. 掌握程控交换机配置数据的意义及原理; 3. 根据设计要求,完成对程控交换机本局数据的配置。 二、实验内容 1.学习ZXJ10 程控交换机本局数据配置方法; 2.模拟用户动态跟踪,深入分析交换机呼叫流程; 3.按照实验指导书的步骤配置本局数据,电话号码7000000~7000023 分配到ASLC 板 卡的0~23 端口,并用7000000 拨打7000001 电话,按照实验指导书方法创建模拟用 户呼叫跟踪,观察呼叫动态迁移,理解单模块呼叫流程。 4.本局数据配置需要配置如下: 局信息配置 局容量数据配置 交换局配置 物理配置 号码管理、号码分析 三、实验仪器 程控交换机 1 套 维护终端若干 电话机若干四、实验步骤 (一)、启动后台维护控制中心 启动程控交换机网管终端计算机,点击桌面快捷方式的,启动后的维护控制中心如下图2-1(利用众友开发软件CCTS可省略该步骤): (二)、启动操作维护台 选中后台维护系统控制中心,单击右键,选中【启动操作维护平台】, 出现如下的对话框,输入操作员名【SYSTEM】, 口令为空,单击【确定】后,将会登陆操作维护系统。

(三)、告警局配置 打开“系统维护(C)”---- “告警局配置(B)”,点击“局信息配置(B)”后,弹出如下界面。 输入该局的区号532,局号 1 ,然后点击【写库】。 (四)、局容量数据配置 打开【基本数据管理】-【局容量数据配置】, 点击后弹出如下操作界面(分别进行全局容量、各模块容量进行规划设置),点击【全局规划】,出现如下的对话框. 点击【全部使用建议值】, 当前值自动填上系统默认的数值,点击【确定】后返回容量规划界面,点击【增加】, 模块号 2 ,MP内存128 ,普通外围、远端交换模块,填写完,点击【全部使用建议值】。 (五)、交换局配置 在后台维护系统打开[数据管理→基本数据管理→交换局配置]弹出如下的对话框,按照 图示,只填写【本交换局】-【交换局配置数据】,点击设置。 (六)、物理配置 在后台维护系统打开[数据管理→基本数据管理→物理配置]: 1. 新增模块 点击【新增模块】,填完模块号,选中紧凑型外围交换模块,点击确定,返回开始的对话 框。

网络与数据通信实验报告

网络与数据通信实验报告 指导老师:李艳 姓名:胡嘉懿(1110200302) 周敏(1110200311)

实验1 网络协议分析Ethereal 1.ARP帧解析 ·帧1(线路上传输60字节,俘获60字节) 到达时间:2004年5月7日00:35:13.802398000 与上一帧的时间差:0.000000000秒 与第一帧的时间差:0.000000000秒 帧序号:1 数据包长度:60字节 俘获长度:60字节 ·以太网Ⅱ,源地址:00:0d:87:f8:4c:f9,目的地址:ff:ff:ff:ff:ff:ff(MAC地址) 目的地址:ff:ff:ff:ff:ff:ff(广播) 源地址:00:0d:87:f8:4c:f9(192.168.0.44) 类型:地址转换协议ARP(Ox0806) 尾部:000000000

·地址转换协议 ·硬件类型(Hardware type):16位,定义ARP实现在何种类型的网络上,以太网的硬件类型值为Ox0001,图中为以太网Ox0001 ·协议类型(Protocol type):16位,定义使用ARP/RARP的协议类型,IPv4类型值为Ox0800,图中为IP Ox0800 ·硬件地址长度(Hardware size):1字节,以字节为单位定义物理地址的长度,图中为6 ·协议地址长度(Protocol size):1字节,以字节为单位定义协议地址的长度,图中为4 ·操作类型(Opcode):16位,定义报文类型,1为ARP请求,2为ARP应答,3为RARP 请求,4为RARP应答,图中为请求(Ox0001) ·发送方MAC地址(Sender MAC address):6字节,发送方的MAC地址,图中为00:0d:87:f8:4c:f9 ·发送方IP地址(Sender IP address):4字节,发送方的IP地址,RARP请求中不填此字段图中为192.168.0.44 ·目的MAC地址(Target MAC address):6字节,ARP请求中不填此字段(待解析),图中为00:00:00:00:00:00 ·目的协议地址(Target IP address):4字节,长度取决于协议地址长度,长度一共28字节,图中为192.168.80.1

通信技术综合实验报告

综合实验报告 ( 2010-- 2011年度第二学期) 名称:通信技术综合实验题目:SDH技术综合实验院系:电子与通信工程系班级: 学号: 学生姓名: 指导教师: 设计周数:两周 成绩: 日期:2011年 6 月

A C B D S1 P1S1 P1 主用 备用 AC AC 环形保护组网配置实验 一、实验的目的与要求 1、实验目的: 通过本实验了解2M 业务在环形组网方式时候的配置。 2、实验要求: 在SDH1、SDH2、SDH3配置成环网,开通SDH2到SDH3两个节点间的2M 业务,并提供环网保护机制。 1)掌握二纤单向保护环的保护机理及OptiX 设备的通道保护机理。 2)掌握环形通道保护业务配置方法。采用环形组网方式时,提供3套SDH 设备,要求配置成虚拟单向通道保护环。 3)了解SDH 的原理、命令行有比较深刻,在做实验之前应画出详细的实际网络连接图,提交实验预习报告,要设计出实验实现方案、验证方法及具体的步骤。 4)利用实验平台自行编辑命令行并运行验证实验方案,进行测试实验是否成功。 二、实验正文 1.实验原理 单向通道保护环通常由两根光纤来实现,一根光纤用于传业务信号,称S 光纤;另一根光纤传相同的信号用于保护,称P 光纤。单向通道保护环使用“首端桥接,末端倒换”结构如下图所示: 业务信号和保护信号分别由光纤S1和P1携带。例如,在节点A ,进入环以节点C 为目的地的支路信号(AC )同时馈入发送方向光纤S1和P1。其中,S1光纤按ABC 方向将业务信号送至节点C ,P1光纤按ADC 方向将同样的信号作为保护信号送至分路节点C 。接收端分路节点C 同时收到两个方向支路信号,按照分路通道信号的优劣决定选其中一路作为分路信号,即所谓末端选收。正常情况下,以S1光纤送来信号为主信号。同时,从C 点插入环以节点A 为目的地的支路信号(CA)按上述同样方法送至节点A 。

进程间通信实验报告

进程间通信实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通讯机制及信息量机制。 实验内容与分析设计: (1)消息的创建,发送和接收。 ①使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为1k 的消息的发送和接收程序。 ②观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用? (2)共享存储区的创建、附接和段接。 使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。(3)比较上述(1),(2)两种消息通信机制中数据传输的时间。 实验步骤与调试过程: 1.消息的创建,发送和接收: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)在SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER 。SERVER每接收到一个消息后显示一句“(server)received”。 (3)CLIENT端使用Key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,既是 SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。 (4)父进程在 SERVER和 CLIENT均退出后结束。 2.共享存储区的创建,附接和断接: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)SERVER端建立一个KEY为75的共享区,并将第一个字节置为-1。作为数据空的标志.等待其他进程发来的消息.当该字节的值发生变化时,表示收到了该消息,进行处理.然后再次把它的值设为-1.如果遇到的值为0,则视为结束信号,取消该队列,并退出SERVER.SERVER 每接收到一次数据后显示”(server)received”. (3)CLIENT端建立一个为75的共享区,当共享取得第一个字节为-1时, Server端空闲,可发送请求. CLIENT 随即填入9到0.期间等待Server端再次空闲.进行完这些操作后, CLIENT退出. CLIENT每发送一次数据后显示”(client)sent”. (4)父进程在SERVER和CLIENT均退出后结束。 实验结果: 1.消息的创建,发送和接收: 由 Client 发送两条消息,然后Server接收一条消息。此后Client Server交替发送和接收消息。最后一次接收两条消息。Client 和Server 分别发送和接收了10条消息。message 的传送和控制并不保证完全同步,当一个程序不再激活状态的时候,它完全可能继续睡眠,造成上面现象。在多次send message 后才 receive message.这一点有助于理解消息转送的实现机理。

Linux进程通信实验报告

Linux进程通信实验报告 一、实验目的和要求 1.进一步了解对进程控制的系统调用方法。 2.通过进程通信设计达到了解UNIX或Linux系统中进程通信的基本原理。 二、实验内容和原理 1.实验编程,编写程序实现进程的管道通信(设定程序名为pipe.c)。使 用系统调用pipe()建立一条管道线。而父进程从则从管道中读出来自 于两个子进程的信息,显示在屏幕上。要求父进程先接受子进程P1 发来的消息,然后再接受子进程P2发来的消息。 2.可选实验,编制一段程序,使其实现进程的软中断通信(设定程序名为 softint.c)。使用系统调用fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上来的中断信号(即按Del键),当父进程 接受这两个软中断的其中一个后,父进程用系统调用kill()向两个子 进程分别发送整数值为16和17的软中断信号,子进程获得对应软中 断信号后分别输出相应信息后终止。 三、实验环境 一台安装了Red Hat Linux 9操作系统的计算机。 四、实验操作方法和步骤 进入Linux操作系统,利用vi编辑器将程序源代码输入并保存好,然后 打开终端对程序进行编译运行。 五、实验中遇到的问题及解决 六、实验结果及分析 基本实验 可选实验

七、源代码 Pipe.c #include"stdio.h" #include"unistd.h" main(){ int i,j,fd[2]; char S[100]; pipe(fd); if(i=fork==0){ sprintf(S,"child process 1 is sending a message \n"); write(fd[1],S,50); sleep(3); return; } if(j=fork()==0){ sprintf(S,"child process 2 is sending a message \n"); write(fd[1],S,50); sleep(3); return;

通信综合实训系统实验报告

. 通信综合实训系统实验 (程控交换系统实验) 学生姓名 学号 专业班级通信工程班 指导老师 年月日

实验1 局内呼叫处理实验 一、实验目的 1.通过对模拟用户的呼叫追踪,加深对程控交换机呼叫处理过程的理解; 2.掌握程控交换机配置数据的意义及原理; 3.根据设计要求,完成对程控交换机本局数据的配置。 二、实验内容 1.学习ZXJ10程控交换机本局数据配置方法; 2.模拟用户动态跟踪,深入分析交换机呼叫流程; 3.按照实验指导书的步骤配置本局数据,电话号码7000000~7000023分配到ASLC板 卡的0~23端口,并用7000000拨打7000001电话,按照实验指导书方法创建模拟用户呼叫跟踪,观察呼叫动态迁移,理解单模块呼叫流程。 4.本局数据配置需要配置如下: 局信息配置 局容量数据配置 交换局配置 物理配置 号码管理、号码分析 三、实验仪器 程控交换机1套 维护终端若干 电话机若干 四、实验步骤 (一)、启动后台维护控制中心 启动程控交换机网管终端计算机,点击桌面快捷方式的,启动后的维护控制中心如下图2-1(利用众友开发软件CCTS可省略该步骤): (二)、启动操作维护台 选中后台维护系统控制中心,单击右键,选中【启动操作维护平台】,出现如下的对话框,输入操作员名【SYSTEM】,口令为空,单击【确定】后,将会登陆操作维护系统。

(三)、告警局配置 打开“系统维护(C)”----“告警局配置(B)”,点击“局信息配置(B)”后,弹出如下界面。 输入该局的区号532,局号1,然后点击【写库】。 (四)、局容量数据配置 打开【基本数据管理】-【局容量数据配置】,点击后弹出如下操作界面(分别进行全局容量、各模块容量进行规划设置),点击【全局规划】,出现如下的对话框. 点击【全部使用建议值】,当前值自动填上系统默认的数值,点击【确定】后返回容量规划界面,点击【增加】, 模块号2,MP内存128,普通外围、远端交换模块,填写完,点击【全部使用建议值】。 (五)、交换局配置 在后台维护系统打开[数据管理→基本数据管理→交换局配置]弹出如下的对话框,按照图示,只填写【本交换局】-【交换局配置数据】,点击设置。 (六)、物理配置 在后台维护系统打开[数据管理→基本数据管理→物理配置]:

通信工程综合实验报告

通信工程专业综合实验实验报 (计算机网络部分)姓名: 学号: 班级: 指导教师:

实验一路由器基本操作 一、实验内容 1、通过Console 方式对路由器或交换机进行管理操作。 2、完成Telnet 方式对路由器或交换机访问操作。 3、利用tftp server 实现计算机和设备(交换机和路由器)之间的数据备份。 二、实验组网图 三、实验步骤 1用每台PC提供的Console连线和网线,选择一台路由器或者交换机连接好。 2、网线连接时,注意选择正确的接口(区分两种不同的以太网接口)。 3、按照实验指导书完成各项试验内容。 4、完成试验后,备份你试验中形成的配置文件,用U盘考走,用于写试验报告。 四、路由器的配置文件内 容 # version , Release 1809P01 # sysname H3C % # super password level 3 simple test 码为test 明文 # domain default enable system # telnet server enable 更改系统名为H3C % 用户级别切换到level 3 的密% 域名系统默认启用 %telnet 服务启用 #

dar p2p signature-file flash:/ # port-security enable # vlan 1 domain system access-limit disable state active idle-cut disable self-service-url disable 端口安全启用虚拟局域网 1 默认系统配置 user-group system # local-user admin password cipher .]@USE=B,53Q=AQ'MAF4<1!! authorization-attribute level 3 % service-type telnet % local-user test % password cipher =W6JJ'N_LBKQ=A Q'MAF4<1!! % service-type telnet # interface Aux0 用户群系统 本地用户admin 密码显示为密文显示设置权限为level 3 服务方式为远程登录本地用户名改为test 密码显示为密文显示服务方式为远程登录 设置Aux0 async mode flow link-protocol ppp # interface Cellular0/0 配置Cellular0/0 async mode protocol link-protocol ppp # interface Ethernet0/0 配置Ethernet0/0 port link-mode route ip address %ip # 地址为24 interface Serial0/0 link-protocol ppp # interface NULL0 interface Vlan- interface1 ip address # 设置ip 及掩码interface Ethernet0/1 port link-mode bridge

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

数据通信实验报告

电子科技大学 实验报告 实验一 NS2的基础使用 NS2是一种提供虚拟环境进行网络模拟仿真,能验证网络性能的正确性和进行相关性能测试的软件。 一、实验环境: Ubuntu 12.04/kernel 3.5 GCC 4.6.3 NS-2.33 二、网络拓扑: 实验共有6个节点,每个节点的连接情况如图所示。其中节点N0、N2和节点N1、N2连接,N3、N4和N4、N5连接,N2和N3连接。从0号节点到2号节点,带宽为2Mb,延时为10ms。 三、实践步骤: 切换到用户根目录下cd ~ 建立自己的文件夹mkdir your_document_name 进入刚刚新建的文件夹cd your_document_name 新建一个TCL 脚本文件gedit your_TCL_file_name.tcl #Here is the beginning of this code file set val(stop) 5.0 ;# 模拟器结束时间 #新建一个NS 模拟对象 set ns [new Simulator] #打开NS 追踪文件 set tracefile [open out.tr w] $ns trace-all $tracefile

#打开NAM 追踪文件 set namfile [open out.nam w] $ns namtrace-all $namfile #新建6 个节点 set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #建立节点之间的链路,格式解释如下 #duplex-link 双向链路可选选项(duplex-link,simple-link 单向链路) #$n0 $n2 表明从0 号节点到2 号节点 #2.0Mb 申明链路传输速率,可使用Mb,Kb,b #10ms 申明链路传输延迟 #DropTail 队列类型 $ns duplex-link $n0 $n2 2.0Mb 10ms DropTail #申明链路队列长度 $ns queue-limit $n0 $n2 10 $ns duplex-link $n1 $n2 2.0Mb 10ms DropTail $ns queue-limit $n1 $n2 10 $ns duplex-link $n4 $n3 2.0Mb 10ms DropTail $ns queue-limit $n4 $n3 10 $ns duplex-link $n3 $n2 1.0Mb 20ms DropTail $ns queue-limit $n3 $n2 10 $ns duplex-link $n3 $n5 2.0Mb 10ms DropTail $ns queue-limit $n3 $n5 10 #为NAM 创建节点位置描述,以第一个为例,2 号节点在0 号节点的右下方 $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns duplex-link-op $n4 $n3 orient left-down $ns duplex-link-op $n3 $n2 orient left $ns duplex-link-op $n3 $n5 orient right-down #新建一个UDP 连接 set udp0 [new Agent/UDP] #将0 号节点Agent/UDP 绑定,以下类似 $ns attach-agent $n0 $udp0 set null2 [new Agent/Null] $ns attach-agent $n4 $null2 #将Agent/UDP 及Agent/Null 节点进行连接 $ns connect $udp0 $null2 #设置Agent/UDP 包大小

宽带通信网综合实验报告

《宽带通信网综合实验报告》 组员:XX 组员:XX 学院:通信工程学院

FTTx实验 【实验步骤和结果】 1、根据图13所示,搭建系统,其中三台ONU接计算机终端,还有一台ONU 接IPTV机顶盒。用ping命令检查接入系统是否可以连通?如果不能连通,请分析原因。如果可以连通,使用tracert命令检查路由,并给出HTTx的路由信息。 图1(ping) 图2(tracert) 2、用ipconfig检查接入终端的IP地址和网关,记录下来,并与LAN接入的地 址相比较,它们有什么不同?原因是什么? 经比较发现,两个地址的网段不同。

图3为ipconfig命令 图4为LAN接入地址 3、用telnet远程登录R4101路由器,记录有关光接口的配置信息。 ESR实验 【实验步骤和结果】 1、搭建系统,将三台S2016交换机组成一个ESR环,确定主节点为S2016(1),从节点 为S2016(2)和S2016(3)。

(1)先配置主交换机: (2)进入ESR配置模式,并将该交换机配置成主站: (3)置ESR环所用接口和VLAN,并使能该ESR: (4)配置从交换机: 先对S2016(2)进行配置:

步骤同上,对S2016(3)进行相同配置。 (5)使用ping 192.168.6.254命令查看网络,网络连通成功。 3、人为切断ESR环路,由于前面对主、从交换机的成功配置,使得ESR域的master node 控制其第二接口的阻塞实现了保护倒换功能。系统正常运行。

WLAN实验 【实验步骤和结果】 1、按照上面介绍的无线AP和连接计算机的配置方法进行配置,配置完成后, 用无线网卡接入(注意输入密钥),连接后,使用ping 192.168.0.1命令查看网络是否连通?如果网络连通,使用ipconfig命令查看连接计算机的IP地址、网关以及DNS,记录相关信息。使用tracert 192.168.0.1命令查看路由,并分析该路由。 图1 (配置界面图)

操作系统进程创建及通信实验报告

武汉工程大学计算机科学与工程学院 《操作系统》实验报告[Ⅰ]

一、实验目的 创建进程,实现进程消息通信和共享内存通信,了解进程的创建、退出和获取进程信。了解什么是映像文件、管道通信及其作用,掌握通过内存映像文件和管道技术实现进程通信。 二、实验内容 本例用三种方法实现进程通信,仅用于示例目的,没有进行功能优化。 1、创建进程A和B后,在进程A中输入一些字符,点“利用 SendMessage发送消息”按钮可将消息发到进程B。 2、在进程A中输入一些字符,点“写数据到内存映像文件”按钮, 然后在进程B中点“从内存映像文件读数据”按钮可收到消息。其中在点“写数据到内存映像文件”时,要求创建映像文件,B进程在印象文件中读取数据。 3、先在进程B中点“创建管道并接收数据”按钮,然后在进程A 中输入一些字符,点“写数据到管道文件”按钮可将消息发到进程B。管道是连接读/写进程使他们进行通信的一个共享文件,目的是更好地实现进程间的通信。 三、实验思想 这次试验最主要的内容和核心思想就是学会创建进程并实现进程间的简单通信、创建映像文件和创建管道文件来通信,后两者是实现进程通信的高级通信机制中的两种。. 创建一个程序A和程序B,其中程序A和B各有一个主窗体,A主窗体上要求可以实现创建进程B(即调用函数B)、结束进程B、关闭进程A、向进程B发送数据、创建映像文件、创建管道文件等功能,进程B要求有从映像文件读取数据、创建管道并接收数据、结束进程B功能。最终让A、B进程相互通信。

四、设计分析: 首先设得设计A、B两个程序的操作界面,然后编写各个功能模块。对于A 程序窗体,在“利用SendMessage发送消息”按钮的消息响应函数中,主要是利用Windows API函数CWnd::FindWindow来找到接收消息的窗体,即进程B,找到进程B后,利用这个函数返回的窗体指针的SendMessage函数来发送消息。在“写数据到内存印象文件”按钮的消息响应函数中,主要是利用函数CreateFileMapping来创建一个印象文件,这个函数返回的是这个印象文件的句柄,然后将这个句柄和要发送的消息字符串传递到函数sprintf中,就可以所要发送的消息写入印象文件,在B程序窗体中有个“从内存印象文件读数据”按钮,在这个按钮的消息响应函数中读取父进程所创建的印象文件中的数据就可以实现通信了。在B程序窗体按钮“写数据到管道文件”的消息响应函数中,不能直接将要发送的消息发送到管道文件,因为管道必须先由子进程通过函数CreateNamedPipe创建,只有待子进程创建好管道后父进程才能根据管道创建管道文件,将消息写入管道文件并及时发送给子进程。而且这个管道只能使用一次,即每次发送完消息后那个管道不能在使用了,必须再由子进程创建一个管道,A 进程才能再次创建管道文件并向其中写入消息。这个程序也不一定要MFC实现,还可以用其他的技术和语言实现,比如说Java、VB等,外表构架可以不一样,但核心技术都是一样的,只是不同的调用形式和调用方法,比如说在VB中,实现进程间的一般通信就是使用动态数据交换DDE,实现起来就比较简单,但是要创建映像文件和管道文件就比较繁琐,可以根据不同的需求采用不同的语言。 五、程序部分源代码: 1.“利用SendMessage发送消息”按钮中的主要代码 //找到接收消息的窗口(窗口名为Receiver) CString str="进程B"; CWnd *pWnd=CWnd::FindWindow(NULL,str); if(pWnd) { COPYDATASTRUCT buf; char * s=new char[m_Msg1.GetLength()]; //m_Msg1为CString类型的变量 s=m_Msg1.GetBuffer(0);

无线传感器数据通信实验报告

实验二:无线传感器数据通信实验 一、实验目的: 在无线传感器节点的单片机驱动代码的基础上,编写无线通信程序,实现多个传感器节点之间的双向数据传输。 二、实验原理: 温湿度传感器和单片机采用的是类似IIC的串行通信,和单片机相连如图1-8所示 VDD和GND是传感器供电引脚。 SCK是时钟引脚,在通信这个过程中,SCK信号都是有单片机控制的。 DATA是数据线,和单片机IO口相连。用于向传感器发送指令和从单片机读走数据。数据在时钟的上升沿生效在时钟是高电平时保持不变。在时钟是低电平时准备数据。接口如图所示。 图1-8 温湿度接口 单片机先向传感器发送开始命令,然后开始通信,开始命令时序图如图所示。在SCK高电平时,将数据线拉低,在下一个时钟高电平期间,将数据线拉高。开始信号发送完毕。 图1-9 开始信号

再开始信号后是命令信号,命令信号包含3位地址位(只支持000)和5位命令位组成。传感器在接收到1byte数据时(即第八个时钟下降沿)将数据线拉低,表示数据正确接收。在九个下降沿被释放。命令如下表。 单片机在发送完命令信号后,等待温湿度传感器测量完成。传感器在转换完成后将数据线拉低。单片机产生时钟信号,从温湿度传感器读数据。数据包含2bytes的测量结果和1bytes的校验。单片机在收到每字节数据都要将数据线拉低给出应答信号。数据高位在前,低位在后。传感器在测量结束和通信完毕后自动进入休眠。具体操作见数据手册。时序图如图1-10所示。 图1-10 传感器工作时序图 8、 计算公式 温度计算公式:

湿度计算公式: 三、实验设备: ZIGBEE无线空气温湿度传感器一个、装有实验软件的计算机。 四、实验内容: 1、建立开发工程; 用MDK打开工程模板。 2、把similar_i2C.c和similar_i2C.h加入到工程。 将similar_i2c文件夹拷贝到工程模板目录中。 调用similar_i2C.c中函数,编写温度采集和湿度采集代码 在工程模板根目录下建立sht1xx_sensor,在里面新建sht1xx.c和sht1xx.h空文件,将c加入到工程,将h文件加入到工程设置中编写main()调用温度采集和湿度采集函数,并对原始数据进行处理。 在原有的程序的基础上,添加代码使程序能够根据数据计算出湿度,并显示出来。

相关文档
最新文档