文档库 最新最全的文档下载
当前位置:文档库 › PLO编译器扩展实验报告

PLO编译器扩展实验报告

PLO编译器扩展实验报告
PLO编译器扩展实验报告

云南大学编译原理实验报告

实验题目:PLO编译器扩展

学院:信息学院

专业:计算机科学与技术

学号:20091060064

姓名:刘继远

目录

一、实验目的 (1)

二、实验内容 (1)

三、源程序分析 (2)

1、PL/0语言编译器的基本工作流程 (2)

2、PL/0语言编译器主要函数的作用及其函数之间的调用 (3)

3、编译器的语法语义分析 (4)

(1)、编译器在进行语法语义分析时,各函数的调用关系 (4)

(2)、递归子程序实现 (5)

(3)、其他两大部分的功能 (6)

1)、说明部分的分析 (6)

2)、过程体的分析: (6)

4、PL/0编译程序的目标代码结构和代码生成 (7)

(1)、对分程序体人口的处理 (7)

(2)、类pcode代码指令的详细解释 (7)

5、PL/0编译程序的语法错误处理 (8)

四、设计的基本思想 (9)

1、对else语句的扩展: (9)

2、对一维数组的扩展: (10)

五、结果及分析 (16)

1、对else语句扩展的测试结果 (16)

2、对一维数组扩展的测试结果 (19)

一、实验目的

1.理解语法、语义分析程序为中心的单遍编译程序组织方法;

2.理解编译程序的基本逻辑过程(词法分析、语法分析、语义分析及目标代

码的生成;

3.理解编译过程中的符号表、内存管理、错误处理的基本方法;

二、实验内容

在已知的PL0程序的基础上,修改PL/0编译程序和类P-code解释程序的源代码,以支持对PL/0语言所进行的如下扩充,并调试通过:

(1)条件语句改为:

<条件语句>::=IF <条件>THEN <语句>[ELSE <语句>] 问题:按照你的修改方式,如下PL/0代码执行后变量x的值是什么?你认为这样的结果是否合理?为什么?

(2)增加整型一维数组变量,形式为:

<数组变量声明>::=<标识符>( <下界>:<上界>)

<数组变量引用>::= <标识符>( <表达式>)

其中<下界>和<上界>是常量名或整数,例如:

三、源程序分析

1、PL/0语言编译器的基本工作流程

如图1-1所示:

源程序

执行结果

图1-1 PL/0编译器基本工作流程

2、PL/0语言编译器主要函数的作用及其函数之间的调用它反映了编译程序工作的基理,如图1-2所示:

图1-2 PL/0编译器函数调用

3、编译器的语法语义分析

(1)、编译器在进行语法语义分析时,各函数的调用关系

从PL/0的语法描述图中可以清楚地看到,当对PL/0语言进行语法分析时,各个非终结符语法单元所对应的分析过程之间必须存在相互调用的关系。这种调用关系可用图1-3表示。也可称为PL/0语法的依赖图,在图中箭头所指向的程序单元表示存在调用关系,从图中不难看出这些子程序在语法分析时被直接或间接递归调用。

由图1-3 PL/0语法调用关系图可以看出对分程序和语句为直接递归调用,对表达式为间接递归调用:

图1-3 语法分析过程依赖关系

(2)、递归子程序实现

下面我对语法分析过程中的每个子程序用一段伪码来表示它的执行过程:

〈表达式〉的递归子程序实现

procedure expr;

begin

if sym in [ plus, minus ] then

begin

getsym; term;

end

else term;

while sym in [plus, minus] do

begin

getsym; term;

end

end;

〈项〉的递归子程序实现

procedure term;

begin

factor;

while sym in [ times, slash ] do

begin

getsym; factor;

end

end;

〈因子〉的递归子程序实现

procedure factor;

begin

if sym <> ident then

begin

if sym <> number then

begin

if sym = ‘(‘ then

begin

getsym;

expr;

if sym = ‘)’ then

getsym

else error

end

else error

end

end

end;

(3)、其他两大部分的功能

语法分析程序除总控外主要有两大部分的功能,即对说明部分的处理和对程序体部分的处理,也就是在语法单元中的分程序功能:

1)、说明部分的分析

由于PL/0语言允许过程调用语句,且允许过程嵌套定义。因此每个过程应有过程首部以定义局部于它自己过程的常量、变量和过程标识符,也称局部量。每个过程所定义的局部量只能供它自己和它自己定义的内过程引用。对于同一层并列过程的调用关系是先定义的可以被后定义的引用,反之则不行。

说明部分的处理任务就是对每个过程的说明对象造名字表,填写所在层次、标识符的属性和分配的相对位置等。标识符的属性不同时,所需要填写的信息也有所不同。登录信息是调用ENTER过程完成的。说明部分的处理对主程序看成是第0层过程,主程序定义的过程为第1层,随着嵌套的深度增加而层次数加大。PL/0允许最大层次为3。

所造名字表放在全程量一维数组TABLE表中。TX为索引表的指针,表中的每个元素为记录型数据。LEV给出层次,DX给出每层局部量当前已分配到的相对位置,可称地址指示器,每说明完一个变量后DX指示器加1。

2)、过程体的分析:

程序的主体是由语句构成的。处理完过程的说明后就处理由语句组成的过程体,从语法上要对语句逐句分析。当语法正确时就生成相应语句功能的目标代码。当遇到标识符的引用时就调用POSITION函数查TABLE表,看是否有过正确的定义,若已有,则从表中取相应的有关信息,供代码的生成用。若无定义则出错。

4、PL/0编译程序的目标代码结构和代码生成

(1)、对分程序体人口的处理

(见程序文本block 的过程体)

begin (*block*)

dx:=3;

tx0:=tx; (*保留当前table表指针值,实际为过程名在table表中的位置*/ table[tx].adr:=cx;(*保留当前code指针值到过程名的adr域*)

gen(jmp,0,0);

/*生成转向过程体入口的指令,该指令的地址为cx已保留在过程名的adr域,真正的过程体入口地址,等生成过程体入口的指令时,再由table[tx].adr中取出cx 将过程体入口返填到cx所指目标代码,即:(jmp,0,0)的第3区域,同时填到table[tx].adr 中*/

程体入口时的处理 :

code[table[tx0].adr].a:=cx;(cx为过程入口地址,填写在code中)

with table[tx0] do

begin

adr:=cx; (过程的入口填写在table表的过程名中)

size:=dx; (过程需要的空间填写在table中)

end;

cxo:=cx; (保留过程在code中的入口地址在输出目标代码时用)

gen(int,0,dx);(生成过程入口指令)

请特别注意dx、 tx、 cx的作用和如何处理信息之间的连接关系。

(2)、类pcode代码指令的详细解释

(指令功能表):

认识目标代码类pcode :

目标代码类pcode是一种假想栈式计算机的汇编语言。

指令格式:

f 功能码

l 层次差(标识符引用层减去定义层)

a 根据不同的指令有所区别

5、PL/0编译程序的语法错误处理

(1) 、对于一些易于校正的错误,如丢了逗号、分号等,则指出出错位置,

并加以校正。校正的方式就是补上逗号或分号。

(2)、对某些错误编译程序难于确定校正的措施,为了使当前的错误不致影响整个程序的崩溃,把错误尽量局限在一个局部的语法单位中。这样就需跳过一些后面输入的单词符号,直到读入一个能使编译程序恢复正常语法分析工作的单词为止。具体做法是:当语法分析进入以某些关键字(保留字)或终结符集合为开始符的语法单元时,通常在它的入口和出口处,调用一个测试程序TEST(见图2.9)。例如:语句的开始符是begin,if,while,call,read,write;说明的开始符是var,const,procedure;因子的开始符是"(",ident,number。当语法分析进入这样的语法单元前,可用测试程序检查当前单词符号是否属于它们开始符号的集合,若不是则出错。

四、设计的基本思想

1、对else语句的扩展:

(1)、先在初始化函数init()中,保留字里增加"else",对应符号为elsesym(这里注意是按照字母顺序增加):

/* 设置保留字名字,按照字母顺序,便于折半查找*/

strcpy(&(word[0][0]), "begin");

……

strcpy(&(word[4][0]), "else"); //增加else为保留字

strcpy(&(word[5][0]), "end");

……

/* 设置保留字符号*/

wsym[0] = beginsym;

……

wsym[4] = elsesym;

wsym[5] = endsym;

……

(2)、在语句处理函数statement()中对if语句处理那段程序增加相应代码:

if (sym == ifsym) /* 准备按照if语句处理*/

{

...

cx1 = cx; /* 保存当前指令地址*/

gendo(jpc, 0, 0); /* 生成条件跳转指令,跳转地址未知,暂时写0 */

statementdo(fsys, ptx, lev); /* 处理then后的语句*/

///////以下增加了else关键字的词法分析和代码生成/////////

/* 根据else之后是否有then子句进行不同处理*/

cx2=cx; /*准备回填的*/

gendo(jmp,0,0); /*无条件跳转*/

code[cx1].a = cx; /* 经statement处理后,cx为then后语句执行完的位置,它正是前面未定的跳转地址*/

if(sym==semicolon)

getsymdo;

if(sym==elsesym) //增加对else的处理

{

getsymdo;

statementdo(fsys,ptx,lev);

code[cx2].a=cx; //回填

}

else statementdo(fsys, ptx, lev);

2、对一维数组的扩展:

(1)、现在程序开头定义两个全局变量,用来保存数组定义的下界和容量:

static int g_arrBase = 0;

static int g_arrSize = 0;

(2)、在头文件中,声明了两个函数;然后增加两个虚拟机指令lda, sta, 分别用来从数组中取数和存到数组中;最后再增加一条处理语句:

int arraydeclaration(int* ptx, int lev, int* pdx);

int arraycoef(bool *fsys, int *ptx, int lev);

……

/* 虚拟机代码*/

enum fct {

…… lda, sta,

};

……

#define arraycoefdo(a,b,c) if(-1==arraycoef(a,b,c)) return -1

(3)、再在头文件的扩充名字表结构中,增加一个data域保存数组的下界:

struct tablestruct

{

...

int data; /* 其他数据,对array来说是下界, add by ltc_mouse */ };

(4)、登记到名字表的函数enter也要添加相应代码:

void enter(enum object k, int* ptx, int lev, int* pdx)

{

...

case array: /* 数组名,进行记录下界等*/

table[(*ptx)].level = lev;

table[(*ptx)].adr = (*pdx);

table[(*ptx)].data = g_arrBase;

table[(*ptx)].size = g_arrSize;

*pdx = (*pdx)+g_arrSize;

break;

}

(5)、编写一个数组声明处理函数, 下界和上界允许已经定义过的常量标识符int arraydeclaration(int* ptx, int lev, int* pdx)

{

char arrId[al]; /* 暂存数组标识名,避免被覆盖*/

int cstId; /* 常量标识符的位置*/

int arrBase=-1, arrTop=-1; /* 数组下界、上界的数值*/

if('(' == ch) /* 标识符之后是'(',则识别为数组*/

{

strcpy(arrId, id);

getchdo;

/* 检查下界*/

getsymdo;

if(ident == sym)

{

if(0 !=(cstId = position(id, (*ptx))) )

arrBase = (constant == table[cstId].kind) ? table[cstId].val : -1;

}

else

{

arrBase = (number == sym) ? num : -1;

}

if(-1 == arrBase) error(43); /*下界定义不正确*/

/* 检查冒号*/

{

error(41); /*缺少冒号*/

}

getchdo;

/* 检查上界*/

getsymdo;

if(ident == sym)

{

if(0 !=(cstId = position(id, (*ptx))) )

arrTop = (constant == table[cstId].kind) ? table[cstId].val : -1;

}

else

{

arrTop = (number == sym) ? num : -1;

}

if(-1 == arrTop) error(44); /*上界定义不正确*/

/* 检查')' */

getsymdo;

if(rparen != sym)

{

error(42); /*缺少右括号*/

}

/* 上下界是否符合条件检查*/

g_arrSize = arrTop - arrBase + 1;

g_arrBase = arrBase;

if( g_arrSize <= 0 ) error(45); /*数组的大小错误*/

/* 恢复数组的标识符*/

strcpy(id, arrId);

return 1;

}

return 0;

}

(6)、在变量声明处理函数vardeclaration中,增加相应出来数组变量的代码:int vardeclaration(int* ptx,int lev,int* pdx)

{

int arrayRet = -1;

{

arrayRet = arraydeclaration(ptx, lev, pdx) ); /* 先判断数组*/

switch(arrayRet)

{

case 1:

enter(array, ptx, lev, pdx); // 填写数组名

break;

case 0:

enter(variable, ptx, lev, pdx); // 填写名字表

getsymdo;

break;

default:

return -1; /* 数组定义解析出错*/

}

}

else

{

error_no(4); /* var后应是标识*/

}

return 0;

}

(7)、编写一个数组元素索引计算与“虚拟机”生成的函数:

int arraycoef(bool *fsys, int *ptx, int lev)

{

bool nxtlev[symnum];

int i = position(id, *ptx);

getsymdo;

if (sym == lparen) /* 索引是括号内的表达式*/

{

getsymdo;

memcpy(nxtlev, fsys, sizeof(bool)*symnum);

nxtlev[rparen] = true;

expressiondo(nxtlev, ptx, lev);

if (sym == rparen)

{

gendo(lit, 0, table[i].data);

gendo(opr, 0, 3); /* 系数修正,减去下界的值*/

return 0;

}

else

{

error(42); /* 缺少右括号*/

}

}

else

{

error(51); /* 数组访问错误*/

}

return -1;

}

(8)、在因子处理函数factor中,增加处理数组的代码:

int factor(bool* fsys, int* ptx, int lev)

{

...

if(sym == ident)

{

...

case variable:

gendo(lod, lev-table[i].level, table[i].adr);

break;

case array: /* 名字为数组名*/

arraycoefdo(fsys, ptx, lev);

gendo(lda, lev-table[i].level, table[i].adr); /* 找到变量地址并将其值入栈*/

break;

}

}

(9)、在语句处理函数statement中,增加处理数组的代码,数组处理仅仅在获得左值时与普通变量不同:

int statement(bool* fsys, int* ptx, int lev)

{

int i, cx1, cx2;

bool nxtlev[symnum];

if (sym == ident) /* 准备按照赋值语句处理*/

{

i = position(id, *ptx);

if (i == 0)

{

error_no(11); /* 变量未找到*/

}

else

{

enum fct fct1 = sto;

switch(table[i].kind)

{

case array:

arraycoefdo(fsys, ptx, lev);

fct1 = sta; /* 数组保存,要多读一个栈*/

/* go through */

case variable:

{

……

}

break;

default:

error(12); /* 赋值语句格式错误*/

i = 0;

break;

}//switch

}//if (i == 0)

}

else

{

...

}

return 0;

}

(10)、虚拟机解释函数interpret中增加的两个虚拟机代码的处理:

void interpret()

{

...

case lda: /* 数组元素访问,当前栈顶为元素索引,执行后,栈顶变成元素的值*/

s[t-1] = s[base(i.l,s,b) + i.a + s[t-1]];

break;

case sta: /* 栈顶的值存到数组中,索引为栈顶之下的那个值*/ t-=2;

s[base(i.l,s,b) + i.a + s[t]] = s[t+1];

break;

...

}

(11)、最后在程序主体函数block中,增加输出名字表的array类型代码:

int block(int lev, int tx, bool* fsys)

{

if (tableswitch) /* 输出名字表*/

{

……

case array:

printf(" %d array %s ", i, table[i].name);

printf("lev=%d addr=%d size=%d\n", table[i].level, table[i].adr, table[i].size);

fprintf(fas, " %d array %s ", i, table[i].name);

fprintf(fas, "lev=%d addr=%d size=%d\n", table[i].level, table[i].adr, table[i].size);

break;

……

printf("\n");

}

}

(12)、对增加的关于数组错误编号的说明:

41:缺少冒号

42:缺少右括号

43:下界定义不正确

44:上界定义不正确

45:数组的大小错误

51:数组访问错误

五、结果及分析

1、对else语句扩展的测试结果

测试程序为:

const a=10;

var b,c;

procedure p;

begin

if b>10 then

c:=b-a;

else

c:=b+a;

end;

begin

read(b);

while b#0 do

begin

call p;

write(2*c);

read(b);

end;

end.

结果为:

传感器实验报告.doc

实验一金属箔式应变片性能—单臂电桥 1、实验目的了解金属箔式应变片,单臂单桥的工作原理和工作情况。 2、实验方法在CSY-998传感器实验仪上验证应变片单臂单桥的工作原理 3、实验仪器CSY-998传感器实验仪 4、实验操作方法 所需单元及部件:直流稳压电源、电桥、差动放大器、双孔悬臂梁称重传感器、砝码、一片应变片、F/V表、主、副电源。 旋钮初始位置:直流稳压电源打倒±2V档,F/V表打到2V档,差动放大增益最大。 实验步骤: (1)了解所需单元、部件在实验仪上的所在位置,观察梁上的应变片,应变片为棕色衬底箔式结构小方薄片。上下二片梁的外表面各贴二片受力应变片。 (2)将差动放大器调零:用连线将差动放大器的正(+)、负(-)、地短接。将差动放大器的输出端与F/V表的输入插口Vi 相连;开启主、副电源;调节差动放大器的增益到最大位置,然后调整差动放大器的调零旋钮使F/V表显示为零,关闭主、副电源。 (3)根据图1接线R1、R2、R3为电桥单元的固定电阻。R4为应变片;将稳压电源的切换开关置±4V 档,F/V表置20V档。开启主、副电源,调节电桥平衡网络中的W1,使F/V表显示为零,等待数分钟后将F/V表置2V档,再调电桥W1(慢慢地调),使F/V表显示为零。 (4) 将测微头转动到10㎜刻度附近,安装到双平行梁的右端即自由端(与自由端磁钢吸合),调节测微头支柱的高度(梁的自由端跟随变化)使V/F表显示值最小,再旋动测微头,使V/F表显示为零(细调零),这时的测微头刻度为零位的相应刻度。 (5) 往下或往上旋动测微头,使梁的自由端产生位移记下V/F表显示的值,每旋动测微头一周即 压值的相应变化。

静态存储器扩展实验报告

静态存储器扩展实验报告告圳大学实验报深

微机原理与接口技术 课程名称: 静态存储器扩展实验实验项目名称: 信息工程学院学院: 专业:电子信息工程

指导教师:周建华 32012130334 学号:班级:电子洪燕报告人:班 2014/5/21 实验时间: 实验报告提交时间:2014/5/26 教务部制. 一.实验目的与要求: 1. 了解存储器扩展的方法和存储器的读/写。 2. 掌握CPU对16位存储器的访问方法。

二.实验设备 PC机一台,TD-PITE实验装置或TD-PITC实验装置一套,示波器一台。 三.实验原理VCC28A141WE27A122A1326A73A8254A6存储器是用来存储信息的A924A55A1123A46OE22A3762256A10218A2CS209A1部件,是计算机的重要组成部D719A010D618D011D517D112D416D213D315GND14管组成的是由MOS分,静态RAM触发器电路,每个触发器可以存放1位

信息。只要不掉电,所储存的信息就不会丢失。因此,静态RAM工作稳定,不要外加刷新电路,使用方便。 但一般SRAM 的每一个触发器是由6个晶体管组成,SRAM 芯片的集成度不会太高,目前较常用的有6116(2K×8位),图4.1 62256引脚图6268位)622532位。本验平台上选. 用的是62256,两片组成32K×16位的形式,共64K字节。 62256的外部引脚图如图4.1所示。 本系统采用准32位CPU,具有16位外部

数据总线,即D0、D1、…、D15,地址总线为BHE#(#表示该信号低电平有效)、BLE #、A1、A2、…、A20。存储器分为奇体和偶体,分别由字节允许线BHE#和BLE#选通。 存储器中,从偶地址开始存放的字称为规则字,从奇地址开始存放的字称为非规则字。处理器访问规则字只需要一个时钟周期,BHE#和BLE#同时有效,从而同时选通存储器奇体和偶体。处理器访问非规则字却需要

静态存储器-实验报告

计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称计算机组成与结构 项目名称静态随机存储器实验 班级 学号 姓名 同组人员无 实验日期 2015-10-24

一、实验目的与要求 掌握静态随机存储器RAM 工作特性及数据的读写方法 二、实验逻辑原理图与分析 2.1 实验逻辑原理图及分析 实验所用的静态存储器由一片6116(2K ×8bit)构成(位于MEM 单元),如下 图所示。6116有三个控制线:CS(片选线)、OE(读线)、WE(写线),当片选有效(CS=0)时,OE=0时进行读操作,WE=0时进行写操作,本实验将CS 常接地线。 由于存储器(MEM)最终是要挂接到CPU 上,所以其还需要一个读写控制逻辑,使得CPU 能控制MEM 的读写,实验中的读写控制逻辑如下图所示,由于T3的参与,可以保证MEM 的写脉宽与T3一致,T3由时序单元的TS3给出。IOM 用来选择是对I/O 还是对MEM 进行读写操作,RD=1时为读,WR=1时为写。 XMRD XIOR XIOW XMWR RD IOM WE T3 读写控制逻辑 实验原理图如下如所示,存储器数据线接至数据总线,数据总线上接有8 个LED 灯显示D7…D0的内容。地址线接至地址总线,地址总线上接有8个LED 灯显示A7…A0的内容,地址由地址锁存器(74LS273,位于PC&AR 单元)给出。数据开关(位于IN 单元)经一个三态门(74LS245)连至数据总线,分时给出地址和数据。地址寄存器为8位,接入6116的地址A7…A0,6116的高三位地址A10…A8接地,所以其实际容量为256字节。

霍尔传感器制作实训报告

佛山职业技术学院 实训报告 课程名称传感器及应用 报告内容霍尔传感器制作与调试 专业电气自动化技术 班级08152 姓名陈红杰‘’‘’‘’‘’‘’‘’‘’‘ 学号31 二0一0年六月 佛山职业技术学院

《传感器及应用》 霍尔传感器制作实训报告 班级08152学号31 姓名陈红杰时间2009-2010第二学期项目名称霍尔传感器电路制作与 指导老师张教雄谢应然调试 一、实验目的与要求: 1.对霍尔传感器的实物(电路部分)进行一个基本的了解。 2.了解双层PCB板以及一定(霍尔传感器)的焊接排版的技术和工艺。 二、实验仪器、设备与材料: 1.认识霍尔传感器(电路部分)的元件(附图如下): 2.焊接电路PCB板(双层)和对电路设计的排版工艺的了解。 3.对霍尔传感器的电路原理图进行基本的分析(附图如下):

实验开始,每组会得到分发的元件,我先由霍尔传感器的电路原理图开始分析,将每个元件插放好位置,这点很重要,如果出了问题那么会使电路不能正常工作,严重的还有可能导致电路元件受损而无法恢复。所以我先由霍尔传感器的电路原理图开始着手,分析清楚每个元件的指定位置,插放好了之后再由焊接,最后要把多余的脚剪掉。 整个电路的元件除了THS119是长脚直插式元件之外,其余的元件均为低位直插或者贴板直插。 焊接的过程中,所需要注意的事情就是不能出现虚焊脱焊或者更严重的烙铁烫坏元件的表壳封装损坏印制电路板等。这些都是在焊接的整个过程中要注意的事情。 比如,焊接三端稳压管7812时,要考虑到电路板的外壳封装和三端稳压管7812的散热问题,如果直插焊接的话那么就会放不进塑料外壳里,还有直插没有折引脚的话对三端稳压管7812的散热影响很大。综合这些因素再去插放焊接元件,效果会好很多。 又比如,焊接THS119的时,原本PCB板在设计的时已经排好版了,就是在TL082的背面插放THS119。这样的设计很巧妙,能够保证每一个THS119插进去焊接完了之后都能很好地与塑料外壳严密配合安放进去。因为这是利用了IC引脚与PCB板的间距来实现定距离的,绝不会给焊接带来任何麻烦。 最后,顺便提及一下,在保证能将每一个元件正确地焊接在印制电路板上的前提条件下要尽量将元件插放焊接得美观。 五、实验心得体会 (1)首先,从整个霍尔传感器来看,设计的电路的合理性,元件的选用,还有焊接的制作工艺是保证整个电路能正常工作前提。 (2)在学习电子电路的过程中,急需有一个过度期,焊接霍尔传感器电路的过程当中就会得到一个这样的练习。 (3)简单的说就是,拿到一张电路原理图未必做得出一个比较好的产品,这里需要对整个电路设计的元件参数的考虑和排版,元件插放等等。只有将这些问题逐一解决了,才能做好一个电路,也只有这样才能做好一个产品。 (4)霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低。霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。若使霍尔集成电路起传感作用,需要用机械的方法来改变磁场强度。 六、实验收获 从拿到第一个元件开始,我仍然没有太多的收获,直到开始分析整个电路原理图的时候才慢慢开始了解到一些确实精巧的设计,可以说是独具匠心,到整个霍尔传感器电路完成之后才算是明白了一二。 在此,我具体地说说。首先,为什么不用一个普通的稳压管替代Z2这个精密稳压集成电路TL431呢?我查阅相关资料知道它的温度范围宽能在 区间工作。将其的R、C脚并焊再串上一个电阻来等效代替电

实验十四 存储器扩展机读写实验

实验十四存储器扩展机读写实验 一、实验目的 (1)通过阅读并测试示例程序,完成程序设计题,熟悉静态RAM的扩展方法。 (2)了解8086/8088与存储器的连接,掌握扩展存储器的读写方法。 二、实验内容 1.实验原理(62256RAM介绍) 62256是32*8的静态存储器,管脚如图所示。其中:A0~A14为地址线,DB0~DB7为数据线,/cs为存储器的片选,/OE为存储器数据输出选通信号,/WE为数据写入存储器信号。62256工作方式如下图。 /CS /WE /OE 方式DB-~DB7 H X X 未选中高阻 L H H 读写禁止高阻 L L H 写IN L H L 读OUT 2.实验内容 设计扩展存储电器的硬件连接图并编制程序,讲字符A~Z循环存入62256扩展RAM 中,让后再检查扩展存储器中的内容。 三、程序设计 编写升序,将4KB扩展存储器交替写入55H和0AAH。 程序如下: RAMADDR EQU 0000H RAMOFF EQU 9000H COUNT EQU 800H CODE SEGMENT ASSUME CS:CODE START: PROC NEAR MOV AX,RAMADDR MOV DS,AX MOV BX,RAMOFF MOV CX,COUNT MOV DL,55h MOV AX ,0AAH REP: MOV [BX],DL INC BX MOV [BX],AX INC BX LOOP REP JMP $ CODE ENDS END START 四、实验结果 通过在软件上调试,运行时能够看到内存地址的改变,证明此扩展的程序成功实现了。 五、实验心得

计算机组成原理存储器读写和总线控制实验实验报告

信息与管理科学学院计算机科学与技术 实验报告 课程名称:计算机组成原理 实验名称:存储器读写和总线控制实验 姓名:班级:指导教师:学号: 实验室:组成原理实验室 日期: 2013-11-22

一、实验目的 1、掌握半导体静态随机存储器RAM的特性和使用方法。 2、掌握地址和数据在计算机总线的传送关系。 3、了解运算器和存储器如何协同工作。 二、实验环境 EL-JY-II型计算机组成原理实验系统一套,排线若干。 三、实验内容 学习静态RAM的存储方式,往RAM的任意地址里存放数据,然后读出并检查结果是否正确。 四、实验操作过程 开关控制操作方式实验 注:为了避免总线冲突,首先将控制开关电路的所有开关拨到输出高电平“1”状态,所有对应的指示灯亮。 本实验中所有控制开关拨动,相应指示灯亮代表高电平“1”,指示灯灭代表低电平“0”。连线时应注意:对于横排座,应使排线插头上的箭头面向自己插在横排座上;对于竖排座,应使排线插头上的箭头面向左边插在竖排座上。 1、按图3-1接线图接线: 2、拨动清零开关CLR,使其指示灯显示状态为亮—灭—亮。 3、往存储器写数据:

以往存储器的(FF ) 地址单元写入数据“AABB ”为例,操作过程如下: 4、按上述步骤按表3-2所列地址写入相应的数据 表3-2 5、从存储器里读数据: 以从存储器的(FF ) 地址单元读出数据“AABB ”为例,操作过程如下: (操作) (显示) (操作) (显示) (操作) (显6、按上述步骤读出表3-2数据,验证其正确性。 五、实验结果及结论 通过按照实验的要求以及具体步骤,对数据进行了严格的检验,结果是正确的,具体数据如图所示:

传感器实训心得体会.doc

传感器实训心得体会 篇一:传感器实训心得 实训报告 学了一学期的传感器实训心得体会)传感器,在最后期末的时候我们也参加了传感器这一学科的实训,收获还是颇多。 在做测试技术的实验前,我以为不会难做,就像以前做物理实验一样,做完实验,然后两下子就将实验报告做完.直到做完测试实验后,才知道其实并不容易做,但学到的知识与难度成正比,使我们受益匪浅.做实验时,最重要的是一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白,这样,也会有事半功倍的效果。 实验就是使我们加深理解所学基础知识,掌握各类典型传感器、记录仪器的基本原理和适用范围;具有测试系统的选择及应用能力;具有实验数据处理和误差分析能力;得到基本实验技能的训练与分析能力的训练,使我们初步掌握测试技术的基本方法,具有初步独立进行机械工程测试的能力,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。更重要的是能够提高我们的动手能力。 这次实习的却让我加深了对各种传感器的了解和它们各自的原理,而且还培养我们分析和解决实际问题的能力。 在做实验的时候,连接电路是必须有的程序,也是最重要的,而连接电路时最重要的就是细心。我们俩最开始做实验的时候,并没有多注意,还是比较细心,但当我们把电路连接好通电后发现我们并不能得到数据,不管怎么调节都不对,后来才知道是我们电路连接错了,然

后我们心里也难免有点失落,因为毕竟是辛辛苦苦连了这么久的电路居然是错了,最后我们就只有在认真检查一次,看错啊你处在哪里。有了这次的经验下次就更加细心了。以上就是我们组两人对这次实训最大的感触,下次实训虽然不是一样的学科,但实验中的经验和感受或许会有相似的,我们会将这次的经验用到下次,经验不断积累就是我们实训最大的收获。 篇二:传感器实训报告 上海第二工业大学 传感器与测试技术技能实习 专业:机械电子工程 班级:10机工A2 姓名: 学号: 指导老师:杨淑珍 日期:2013年6月24日~7月7日 项目五:转子台转速测量及振动监控系统。 (一)内容 设计一个转子台的振动检测系统,能实时测量转子台工作时的振动信号(振幅)并实时显示转速,当振幅超过规定值时,报警。具体要求: 1.能测量振动信号并显示波形,若振动超过限值,报警(软硬件报警); 2.能测量并显示转子的转速; 3.限值均由用户可设定(最好以对话框方式设置,软件重新打开后,能记住上次的设置结果);

存储器管理实验报告.docx

操作系统实验报告 存储器管理 学院电信学院 专业计算机科学与技术 班级 14级计科一班 实验题目动态分区分配 实验组别第三组 指导老师曹华

一、实验目的 了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。 二、实验内容 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过分区链来管理,在进行内存分配时,系统优先使用空闲区低端的空间。 请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。 三、实验主要仪器设备 软件环境:VC++6编程环境 四、实验原理及设计方案 1.实验原理: 可变分区调度算法有:最先适应分配算法,循环首次适应算法,最佳适应算法,最坏适应算法。 首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可用块。只要找到第一个足以满足要求的空闲块就停止查找,并把它分配出去; 如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改区分大小和分区始址。 用户提出内存空间的申请:系统根据申请者的要求,按照一定的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,系统要收回它所占用的内存空间或它归还的部分内存空间。 最佳适应算法(Best-fit):当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩余块是最小的。然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。 内存回收:将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空,并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。 每当一个进程被创建时,内存分配程序首先要查找空闲内存分区链,从中寻找一个合适的空闲块进行划分,并修改空闲内存分区链,系统根据回收区的首址,从空闲区链中找到相应的插入点,此时出现如下四种情况: (1)回收区与插入点的前一个空闲区F1相邻接,此时可将回收区直接与F1合并,并修改F1的大小; (2)回收区与插入点的后一个空闲分区F2相邻接,此时可将回收区直接与F2合并,并用回收区的首址作为新空闲区的首址,大小为二者之和; (3)回收区同时与插入点的前后两个空闲分区邻接,此时需将三者合并; (4)回收区不与任何一个空闲区邻接,此时应建一新的表项 2.主要数据结构的说明 定义一个空闲区说明表结构

实验一扩展存储器读写实验

实验一:扩展存储器读写实验 一.实验要求 编制简单程序,对实验板上提供的外部存贮器(62256)进行读写操作。 二.实验目的 1.学习片外存储器扩展方法。 2.学习数据存储器不同的读写方法。 三.实验电路及连线 将P1.0接至L1。CS256连GND孔。 四.实验说明 1.单片机系统中,对片外存贮器的读写操作是最基本的操作。用户藉此来熟悉MCS51单片机编程的基本规则、基本指令的使用和使用本仿真实验系统调试程序的方法。 用户编程可以参考示例程序和流程框图。本示例程序中对片外存贮器中一固定地址单元进行读写操作,并比较读写结果是否一致。不一致则说明读写操作不可靠或该存储器单元不可靠,程序转入出错处理代码段(本示例程序通过熄灭一个发光二极管来表示出错)。读写数据的选用,本例采用的是55(0101,0101)与AA(1010,1010)。一般采用这两个数据的读写操作就可查出数据总线的短路、断路等,在实际调试用户电路时非常有效。 用户调试该程序时,可以灵活使用单步、断点和变量观察等方法,来观察程序执行的流程和各中间变量的值。 2.在I状态下执行MEM1程序,对实验机数据进行读写,若L1灯亮说明RAM读

写正常。 3.也可进入LCA51的调试工具菜单中的对话窗口,用监控命令方式读写RAM,在I状态执行SX0000↓ 55,SPACE,屏幕上应显示55,再键入AA,SPACE,屏幕上也应显示AA,以上过程执行效果与编程执行效果完全相同。 注:SX是实验机对外部数据空间读写命令。 4.本例中,62256片选接地时,存储器空间为0000~7FFFH。 五.实验程序框图 实验示例程序流程框图如下: 六.实验源程序: ORG 0000H LJMP START ORG 0040H START:

传感器实验报告

传感器实验报告(二) 自动化1204班蔡华轩 U2 吴昊 U5 实验七: 一、实验目的:了解电容式传感器结构及其特点。 二、基本原理:利用平板电容C=εA/d 和其它结构的关系式通过相应的结 构和测量电路可以选择ε、A、d 中三个参数中,保持二个参数不变,而只改变其中一个参数,则可以有测谷物干燥度(ε变)测微小位移(变d)和测量液位(变A)等多种电容传感器。 三、需用器件与单元:电容传感器、电容传感器实验模板、测微头、相敏 检波、滤波模板、数显单元、直流稳压源。 四、实验步骤: 1、按图6-4 安装示意图将电容传感器装于电容传感器实验模板上。 2、将电容传感器连线插入电容传感器实验模板,实验线路见图7-1。图 7-1 电容传感器位移实验接线图 3、将电容传感器实验模板的输出端V01 与数显表单元Vi 相接(插入主控 箱Vi 孔),Rw 调节到中间位置。 4、接入±15V 电源,旋动测微头推进电容传感器动极板位置,每间隔 记下位移X 与输出电压值,填入表7-1。

5、根据表7-1 数据计算电容传感器的系统灵敏度S 和非线性误差δf。 图(7-1) 五、思考题: 试设计利用ε的变化测谷物湿度的传感器原理及结构,并叙述一 下在此设计中应考虑哪些因素 答:原理:通过湿度对介电常数的影响从而影响电容的大小通过电压表现出来,建立起电压变化与湿度的关系从而起到湿度传感器的作用;结构:与电容传感器的结构答大体相同不同之处在于电容面板的面积应适当增大使测量灵敏度更好;设计时应考虑的因素还应包括测量误差,温度对测量的影响等

六:实验数据处理 由excle处理后得图线可知:系统灵敏度S= 非线性误差δf=353=% 实验八直流激励时霍尔式传感器位移特性实验 一、实验目的:了解霍尔式传感器原理与应用。 二、基本原理:霍尔式传感器是一种磁敏传感器,基于霍尔效应原理工作。 它将被测量的磁场变化(或以磁场为媒体)转换成电动势输出。 根据霍尔效应,霍尔电势UH=KHIB,当霍尔元件处在梯度磁场中 运动时,它就可以进行位移测量。图8-1 霍尔效应原理

电子秤课程设计实验报告

电 子 设 计 实 验 报 告 电子科技大学 设计题目:电子称姓名:

学生姓名 任务与要求 一、任务 使用电阻应变片称重传感器,实现电子秤。用砝码作称重比对。 二、要求 准确、稳定称重; 称重传感器的非线性校正,提高称重精度; 实现“去皮”、计价功能; 具备“休眠”与“唤醒”功能,以降低功耗。

电子秤 第一节绪论 摘要:随着科技的进步,在日常生活以及工业运用上,对电子秤的要求越来越高。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。影响其精度的因素主要有:机械结构、传感器和数显仪表。在机械结构方面,因材料结构强度和刚度的限制,会使力的传递出现误差,而传感器输出特性存在非线性,加上信号放大、模数转换等环节存在的非线性,使得整个系统的非线性误差变得不容忽视。因此,在高精度的称重场合,迫切需要电子秤能自动校正系统的非线性。此外,为了保证准确、稳定地显示,要求所采用的ADC具有足够的转换位数,而采用高精度的ADC,自然增加了系统的成本。基于电子秤的现状,本文提出了一种简单实用并且精度高的智能电子秤设计方案。通过运用很好的集成电路,使测量精度得到了大大提高,由于采用数字滤波技术,使稳态测量的稳定性和动态测量的跟随性都相当好。并取得了令人满意的效果。 关键词:压力传感器,AD620N放大电路,ADC模数转换,STM32单片机,OLED 显示屏,矩阵键盘,电子秤。 1.1引言 本课程设计的电子秤以单片机为主要部件,利用全桥测量原理,通过对电路输出电压和标准重量的线性关系,建立具体的数学模型,将电压量纲(V)改为重量纲(g)即成为一台原始电子秤。其中测量电路中最主要的元器件就是电阻应变式传感器。电阻应变式传感器是传感器中应用最多的一种,本设计采用全桥测量电路,是系统产生的误差更小。输出的数据更精确。而AD620N放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D 转换器对输入信号电平的要求。A/D转换的作用是把模拟信号转变成数字信号,进行模拟量转数字量转换,然后把数字信号输送到显示电路中去,最后由OLED

存储器和IO扩展实验,计算机组成原理

科技学院 课程设计实验报告 ( 2014--2015年度第一学期) 名称:计算机组成原理综合实验题目:存储器和I/O扩展实验 院系:信息工程系 班级: 学号: 学生姓名: 指导教师:李梅王晓霞 设计周数:一周 成绩: 日期:2015 年1 月

一、目的与要求 1. 内存储器部件实验 (1)熟悉ROM芯片和RAM芯片在功能和使用方法等方面的相同和差异之处;学习用编程器设备向EEPROM芯片内写入一批数据的过程和方法。 (2)理解并熟悉通过字、位扩展技术实现扩展存储器系统容量的方案; (3)了解静态存储器系统使用的各种控制信号之间正常的时序关系; (4)了解如何通过读、写存储器的指令实现对58C65 ROM芯片的读、写操作; (5)加深理解存储器部件在计算机整机系统中的作用。 2. I/O口扩展实验 学习串行口的正确设置和使用。 二、实验正文 1.主存储器实验内容 1.1实验的教学计算机的存储器部件设计(说明只读存储器的容量、随机读写器的容量,各选用了什么型号及规格的芯片、以及地址空间的分布) 在教学计算机存储器部件设计中,出于简化和容易实现的目的,选用静态存储器芯片实现内存储器的存储体,包括唯读存储区(ROM,存放监控程序等) 和随读写存储区(RAM)两部分,ROM存储区选用4片长度8位、容量8KB 的58C65芯片实现,RAM存储区选用2片长度8位、容量2KB的6116芯片 实现,每2个8位的芯片合成一组用于组成16位长度的内存字,6个芯片被分 成3组,其地址空间分配关系是:0-1777h用于第一组ROM,固化监控程序, 2000-2777h用于RAM,保存用户程序和用户数据,其高端的一些单元作为监 控程序的数据区,第二组ROM的地址范围可以由用户选择,主要用于完成扩 展内存容量(存储器的字、位扩展)的教学实验。 1.2扩展8K字的存储空间,需要多少片58C65芯片,58C65芯片进行读写时的特殊要求 要扩展8K字的存储空间,需要使用2片(每一片有8KB容量,即芯片内由8192个单元、每个单元由8个二进制位组成)存储器芯片实现。对 58C65 ROM芯片执行读操作时,需要保证正确的片选信号(/CE)为低点平, 使能控制信号(/OE)为低电平,读写命令信号(/WE)为高电平,读58C65 ROM 芯片的读出时间与读RAM芯片的读出时间相同,无特殊要求;对58C65 ROM 芯片执行写操作时,需要保证正确的片选信号(/CE)为低电平,使能控制信 号(/OE)为高电平,读写命令信号(/WE)为低电平,写58C65 ROM芯片的 维持时间要比写RAM芯片的操作时间长得多。为了防止对58C65 ROM芯片执 行误写操作,可通过把芯片的使能控制引脚(/OE)接地来保证,或者确保读 写命令信号(/WE)恒为高电平。 1.3在实验中思考为何能用E命令直接写58C65芯片的存储单元,而A命令则有时不正确;

实验五存储器读写实验报告

实验五存储器读写实验报告 实验报告 课程名:《计算机组成原理》题目:实验五存储器读写班级:计算机+ 自动化0901班姓名:张哲玮,郑俊飞 《计算机组成原理》实验报告- 1 - 实验五、存储器读写实验 一、目的与要求 (1)掌握存储器的工作特性 (2)熟悉静态存储器的操作过程,验证存储器的读写方法 二、实验原理及原理图 (1)?静态存储器芯片6116的逻辑功能 6116是一种数据宽度为8位(8个二进制位),容量为2048字节的静态存储器芯片,封在24引脚的封装中,封装型式如图2-7所示。6116芯片有8根双向三态数据线D7-D0,所谓三态是指输入状态,输出状态和高阻状态,高阻状态数据线处于一种特殊的“断开”状态;11根地址线A10-A0,指示芯片内部2048个存储单元号;3根控制线CS片选控制信号,低电平时,芯片可进行读写操作,高电平时,芯片保存信息不能进行读写;WE 为写入控制信号,低电平时,把数据线上的信息存入地址线A10-A0指示的存储单元中;0E为输出使能控制信号,低电平时,把地址线A10-A0指示的存储单元中的数据读出送到数据线上。

6116芯片控制信号逻辑功能表 (2).存储器实验单元电路 因为在计算机组成原理实验中仅用了256个存储单元,所以6116芯片的3根地址线A11-A8接地也没有多片联用问题,片选信号CS接地使芯片总是处于被选中状态。芯片的WE和0E信号分别连接实验台的存储器写信号M-W和存储器读信号M-Ro这种简化了控制过程的实验电路可方便实验进行。 存储器部件电路图 (3)?存储器实验电路 存储器读\写实验需三部分电路共同完成:存储器单元(MEM UNIT),地址寄存器单元(ADDRESS UNIT)和输入,输出单元(INPUT/OUTPIT UNIT).存储器单元6116芯片为中心构成,地址寄存器单元主要由一片74LS273组成,控制信号B-AR的作用是把总线上的数据送入地址寄存器,向存储器单元电路提供地址信息,输入,输出单元作用与以前相同。

虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书 课程名:《操作系统》 题目:虚拟存储器管理 页面置换算法模拟实验 班级: 学号: 姓名:

一、实验目的与要求 1.目的: 请求页式虚存管理是常用的虚拟存储管理方案之一。通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。 2.要求: 本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。 二、实验说明 1.设计中虚页和实页的表示 本设计利用C语言的结构体来描述虚页和实页的结构。 在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。 在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。 2.关于缺页次数的统计 为计算命中率,需要统计在20次的虚页访问中命中的次数。为此,程序应设置一个计数器count,来统计虚页命中发生的次数。每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内, 此虚页被命中,count加1。最终命中率=count/20*100%。 3.LRU算法中“最近最久未用”页面的确定 为了能找到“最近最久未用”的虚页面,程序中可引入一个时间计数器countime,每当要访问 一个虚页面时,countime的值加1,然后将所要访问的虚页的time项值设置为增值后的当前

计算机组成原理实验五存储器读写实验

实验五 存储器读写实验实验目的 1. 掌握存储器的工作特性。 2. 熟悉静态存储器的操作过程,验证存储器的读写方法。 二、实验原理 表芯片控制信号逻辑功能表

2. 存储器实验单元电路 芯片状态 控制信号状态 DO-D7 数据状态 M-R M -W 保持 1 1 高阻抗 读出 0 1 6116-^总钱 写人 1 0 总线-*6116 无效 报警 ^2-10 D7—DO A7—A0

團2-8存储器实验电路逻辑图 三、实验过程 1. 连线 1) 连接实验一(输入、输出实验)的全部连线。 2) 按逻辑原理图连接M-W M-R 两根信号低电平有效信号线 3) 连接A7-A0 8根地址线。 4) 连接B-AR 正脉冲有效信号 2. 顺序写入存储器单元实验操作过程 1) 把有B-AR 控制开关全部拨到0,把有其他开关全部拨到1,使全部信号都处 于无效 状态。 2) 在输入数据开关拨一个实验数据,如“ 00000001”即16进制的01耳 把IO-R 控制开关拨下,把地址数据送到总线。 3) 拨动一下B-AR 开关,即实现“1-0-1 ”产生一个正脉冲,把地址数据送地 址寄存器保存。 4) 在输入数据开关拨一个实验数据,如“ 10000000',即16进制的80耳 把IO-R 控 制开关拨下,把实验数据送到总线。 3. 存储器实验电路 0 O O 0 0 olo O O O O 0 00 OUTPUT L/O :W 8-AR £ ■」2 ■七 ol^Fgr' L P O 74LS273 A7- AO vz 0 o|o 0 r 6116 A7 INPUT D7-O0 [olololololololol T2

无线传感器网络实验报告

无线传感器网络实验报告 Contiki mac协议与xmac协议的比较 1.简介 无线传感器网络(wireless sensor networks, WSN)节点由电池供电,其能力非常有限,同时由于工作环境恶劣以及其他各种因素,节点能源一般不可补充。因而降低能耗、延长节点使用寿命是所有无线传感器网络研究的重点。 WSN中的能量能耗主要包括通信能耗、感知能耗和计算能耗,其中通信能耗所占的比重最大,因此,减少通信能耗是延长网络生存时间的有效手段。同时,研究表明节点通信时Radio 模块在数据收发和空闲侦听时的能耗几乎相同,所以要想节能就需要最大限度地减少Radio 模块的侦听时间(收发时间不能减少),及减小占空比。 传统的无线网络中,主要考虑到问题是高吞吐量、低延时等,不需要考虑能量消耗,Radio 模块不需要关闭,所以传统无线网络MAC协议无法直接应用于WSN,各种针对传感器网络特点的MAC协议相继提出。现有的WSN MAC协议按照不同的分类方式可以 分成许多类型,其中根据信道访问策略的不同可以分为: X-MAC协议 X-MAC协议也基于B-MAC协议的改进,改进了其前导序列过长的问题,将前导序列分割成许多频闪前导(strobed preamble),在每个频闪前导中嵌入目的地址信息,非接收节点尽早丢弃分组并睡眠。 X-MAC在发送两个相邻的频闪序列之间插入一个侦听信道间隔,用以侦听接收节点的唤醒标识。接收节点利用频闪前导之间的时间间隔,向发送节点发送早期确认,发送节点收到早

期确认后立即发送数据分组,避免发送节点过度前导和接收节点过度侦听。 X-MAC还设计了一种自适应算法,根据网络流量变化动态调整节点的占空比,以减少单跳延时。 优点: X-MAC最大的优点是不再需要发送一个完整长度的前导序列来唤醒接收节点,因而发送延时和收发能耗都比较小;节点只需监听一个频闪前导就能转入睡眠。 缺点: 节点每次醒来探测信道的时间有所增加,这使得协议在低负载网络中能耗性比较差。而且分组长度、数据发送速率等协议参数还需进一步确定 X-MAC原理图如图3所示: ContikiMAC协议 一.ContikiMAC协议中使用的主要机制: 1.时间划分

传感器实训报告.doc

温度数字检测系统---实训报告 一、实训内容: 通过本实训设计并制作温度数字检测系统,把所制作传感器 应用于温度检测系统中。 二、实训要求: 学习、复习相关传感器的理论,检测系统的组成;设计制作温度数字检测系统电路,含设计电路,测试元件,电路布线,焊接元件,调试传感器电路;传感器应用于温度检测系统中,完成系统的接线和调试,并完成设计报告。 三、实训方法与步骤: 1. 温度数字检测系统电路的设计 理解掌握所设计的温度数字检测系统电路的要求,测量对 象、范围、原理;电路信号变换电路,信号处理单元的功能; (系统框图如图1所示) 图1-系统框图 2. 测试元件,电路布线,焊接元件,调试传感器电路;

3.传感器电路的过程验收; 4.传感器应用于温度检测系统中,完成系统的接线和调试。 5.设计报告 按要求完成设计报告:温度数字检测系统电路的系统框图、原理、功能电路的工作过程、主要元件的性能原理、电路图、装配图。 四、温度传感器LM35中文资料 TO-92封装引脚图SO-8 IC式封装引脚图 供电电压35V到-0.2V 输出电压6V至-1.0V 输出电流10mA 指定工作温度范围 LM35A -55℃ to +150℃ ATmega8L资料 –?工作电压 –– 2.7 - 5.5V (ATmega8L) –– 4.5 - 5.5V (ATmega8) –?速度等级

–– 0 - 8 MHz (ATmega8L) –– 0 - 16 MHz (ATmega8) –? 4 Mhz时功耗 , 3V, 25°C ––工作模式: 3.6 mA ––空闲模式: 1.0 mA ––掉电模式: 0.5 μA –引脚说明 –VCC 数字电路的电源。 –GND 地。 –端口 B(PB7..PB0) –XTAL1/XTAL2/TOSC1/TOSC2 –端口 B 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 –性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 –低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 处于高阻状态。 –通过时钟选择熔丝位的设置, PB6 可作为反向振荡放大器或时钟操作电路的输入端。 –通过时钟选择熔丝位的设置 PB7 可作为反向振荡放大器的输出端。 –若将片内标定 RC 振荡器作为芯片时钟源,且 ASSR 寄存器的

微机原理实验---存储器的扩展实验

深圳大学实验报告 课程名称:_____________ 微机计算机设计__________________ 实验项目名称:静态存储器扩展实验______________ 学院:_________________ 信息工程学院____________________ 专业:_________________ 电子信息工程____________________ 指导教师:____________________________________________ 报告人:________ 学号:2009100000班级:<1>班 实验时间:_______ 2011.05. 05 实验报告提交时间:2011. 05. 31 教务处制 一、实验目的 1. 了解存储器扩展的方法和存储器的读/ 写。 2. 掌握CPU寸16位存储器的访问方法。 二、实验要求

编写实验程序,将OOOOH H OOOFH共16个数写入SRAM的从0000H起始的一段空间中,然后通过系统命令查看该存储空间,检测写入数据是否正确。 三、实验设备 PC 机一台,TD-PITE 实验装置或TD-PITC 实验装置一套。 四、实验原理 1、存储器是用来存储信息的部件,是计算机的重要组成部分,静态RAM是由MOS 管组成的触发器电路,每个触发器可以存放1 位信息。只要不掉电,所储存的信息就不会丢失。此,静态RAM工作稳定,不要外加刷新电路,使用方便。 2、本实验使用两片的62256芯片,共64K字节。本系统采用准32位CPU具有16 位外部数据总线,即D0 D1、…、D15,地址总线为BHE^(#表示该信号低电平有效)、BLE#、A1、A2、…、A20。存储器分为奇体和偶体,分别由字节允许线BH四和BLE#选通。存储器中,从偶地址开始存放的字称为规则字,从奇地址开始存放的字称为非规则字。处理器访问规则字只需要一个时钟周期,BH即和BLE #同时有效,从而同时选通存储器奇体和偶体。处理器访问非规则字却需要两个时钟周期,第一个时钟周期BH即有效,访问奇字节;第二个时钟周期BLE#有效,访问偶字节。处理器访问字节只需要一个时钟周期,视其存放单元为奇或偶,而BH四或BLE#有效,从而选通奇体或偶体。 五、实验过程 1、按图接线好电路。 2. 编写实验程序,经编译、链接无误后装入系统。 实验部分代码如下: STACK SEGMENT STACK DW 32 DUP(?) STACK ENDS CODE SEGMENT START PROC FAR ASSUME CS:CODE MOV AX, 8OOOH ; MOV DS, AX AAO: MOV SI, OOOOH ; MOV CX, OO1OH MOV AX, OOOOH AA1: MOV [SI], AX

实验一 存储器实验

实验一存储器实验 1.FPGA中LPM_ROM定制与读出实验 一.实验目的 1、掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性与配置方法。 2、用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于 lpm_ROM中; 3、在初始化存储器编辑窗口编辑mif文件配置ROM; 4、验证FPGA中mega_lpm_ROM的功能。 二.实验原理 ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modules)参数化的模块库,可构成如lpm_rom、lpm_ram_io、lpm_fifo、lpm_ram_dq的存储器结构。CPU 中的重要部件,如RAM、ROM可直接调用她们构成,因此在FPGA中利用嵌入式阵列块EAB 可以构成各种结构的存储器,lpm_ROM就是其中的一种。lpm_ROM有5组信号:地址信号address[ ]、数据信号q[ ]、时钟信号inclock、outclock、允许信号memenable,其参数都就是可以设定的。由于ROM就是只读存储器,所以它的数据口就是单向的输出端口,ROM中的数据就是在对FPGA现场配置时,通过配置文件一起写入存储单元的。图3-1-1中的lpm_ROM有3组信号:inclk——输入时钟脉冲;q[23、、0]——lpm_ROM的24位数据输出端;a[5、、0]——lpm_ROM的6位读出地址。 实验中主要应掌握以下三方面的内容: ⑴ lpm_ROM的参数设置; ⑵ lpm_ROM中数据的写入,即LPM_FILE初始化文件的编写; ⑶lpm_ROM的实际应用,在GW48_CP+实验台上的调试方法。 三.实验步骤 (1)用图形编辑,进入mega_lpm元件库,调用lpm_rom元件,设置地址总线宽度address[] 与数据总线宽度q[],分别为6位与24位,并添加输入输出引脚,如图3-1-1设置与连接。 (2)设置图3-1-1为工程。 (3)在设置lpm_rom数据参数选择项lpm_file的对应窗口中(图3-1-2),用键盘输入 lpm_ROM配置文件的路径(rom_a、mif),然后设置在系统ROM/RAM读写允许,以便能

传感器实验报告详解

五邑大学 《传感器与电测技术》 实验报告 实验时间:2016年11月16日-17日实验班级:班 实验报告总份数: 4 份 实验教师:

信息工程学院(系) 611 实验室 __交通工程_____专业 班 学号 姓名_______协作者______________ 成绩:

实验一熟悉IAR 集成开发环境下C程序的编写 一.实验目的 1、了解IAR 集成开发环境的安装。 2、掌握在IAR 环境下程序的编辑、编译以及调试的方法。 二.实验设备 1、装有IAR 开发环境的PC 机一台 2、物联网开发设计平台所配备的基础实验套件一套 3、下载器一个 三.实验要求 1、熟悉IAR 开发环境 2、在IAR 开发环境下编写、编译、调试一个例程 3、实验现象节点扩展板上的发光二极管 D9 被点亮 三、问题与讨论 根据提供的电路原理图等资料,修改程序,点亮另一个LED 灯D8。(分析原理,并注释。) 先定义IO口,再初始化,最后点亮

一、实验目的与要求 1、理解光照度传感器的工作原理 2、掌握驱动光照度传感器的方法 二、实验设备 1、装有IAR 开发工具的PC 机一台 2、下载器一个 3、物联网开发设计平台一套 三、实验要求 1、编程要求:编写光照度传感器的驱动程序 2、实现功能:检测室内的光照度 3、实验现象:将检测到的数据通过串口调试助手显示,用手遮住传感器,观察数据变化。 四、实验讨论 讨论:光敏电阻的工作原理?光敏电阻是否为线性测量元件,为什么?常用于什么测量场合? 1.它的工作原理是基于光电效应。在半导体光敏材料两端装上电极引线,将其 封装在带有透明窗的管壳里就构成光敏电阻。为了增加灵敏度,两电极常做成梳状。半导体的导电能力取决于半导体导带内载流子数目的多少。当光敏电阻受到光照时,价带中的电子吸收光子能量后跃迁到导带,成为自由电子,同时产生空穴,电子—空穴对的出现使电阻率变小。光照愈强,光生电子—空穴对就越多,阻值就愈低。当光敏电阻两端加上电压后,流过光敏电阻的电流随光照增大而增大。入射光消失,电子-空穴对逐渐复合,电阻也逐渐恢复原值,电流也逐渐减小 2.不是线性测量元件,可以说光敏电阻在照度固定时是线性的。光敏电阻的阻 值随光照的增强而减少,但这个关系不是线性的。 3.常用作开关式光电转换器

相关文档
相关文档 最新文档