大连理工大学计算机原理实验报告_第1页
大连理工大学计算机原理实验报告_第2页
大连理工大学计算机原理实验报告_第3页
大连理工大学计算机原理实验报告_第4页
大连理工大学计算机原理实验报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

千里之行,始于足下让知识带有温度。第第2页/共2页精品文档推荐大连理工大学计算机原理实验报告名目

1试验任务(1)

2设计计划(1)

3设计电路(3)

4设计程序(5)

5碰到的问题(2)

(1)程序语法方面(2)

(2)运行规律方面(2)

(3)软件使用方面(2)

6何解决问题(2)

(1)程序语法方面(2)

1)寄存器使用时,数据类型不匹配:(2)

2)程序越来越大的时候,程序结构混乱:(2)

3)基本操作的要求:(3)

4)对于中断服务程序、堆栈段以及中断STI指令的理解:(3)

(2)运行规律方面(3)

1)电梯加速减速在一楼到二楼的特别状况的考虑问题:(3)

2)电梯运行方式确实定问题:(4)

3)电梯延续运行时,各种参数的转换问题:(5)

4)对于电梯实时运行显示的显示规律问题:(5)

(3)软件使用方面(5)

1)在使用软件的时候,对于软件设置断点,以及使用断点的问题:(5)

2)在软件使用中,常常浮现的USB端口缺失,以及软件程序不能发送到试验板中的问题:(6)

7试验体味(6)

1试验任务

本次试验通过汇编语言编程,基本实现电梯的功能:通过在试验板的8位开关举行挑选需要到的楼层,步进电机举行旋转,250个脉冲为一层,即电机旋转5.2圈为一层,每次启动,电机由速度为0加速启动,加速到最大速度时,正巧达到二楼。到达目的楼层之前,在距离楼层半层时开头减速,精确     到达楼层时停止转动。其中,当运动为一层时,电梯仅仅加速到最大速度的一半,然后减速,到达目的楼层。在每次到达目的楼层之后,继续修改目的楼层,可以延续工作。在工作的过程中,通过数码管实时显示当前的楼层,同时通过LED灯也实时显示楼层状况。

2设计计划

(1)电梯电机驱动部分

通过地址200H选中8254定时器芯片,使用定时器0和定时器1对试验板上的1MHz脉冲信号举行分频,通过两个定时器举行分频,之后out1给中

断控制器8259,触发中断,在中断中举行参数spnum的自加,在通过这个

变量的数值大小与主程序speed的比较来打算主程序是否对步进电机发出相

序信号,使其开头转动。

movax,speed

cmpax,spnum;推断现在是否开头发步进电机脉冲时序

jnatozero;可以发脉冲,并且计数值spnum归零

jmpgo;不发脉冲,继续举行检测

其中,步进电机的驱动信号数组有两个,为了分离实现倒转和正转,分离建立如下两个相序彻低相反的数组:

data1db01h,03h,02h,06h,04h,0ch,08h,09h

data2db09h,08h,0ch,04h,06h,02h,03h,01h

(2)电梯电机调速部分

由(1)可以实现步进电机以一定的转速举行转动,在主程序中,通过修改speed的数值,来打算主程序在于spnum举行比较后主程序发送步进电

机驱动相序的频率。通过检测现在步进电机的行走路程distance,计算浮现

在的电梯所在楼层数floor,打算现在步进电机的运行状态。

详细规律如下:

图2.1速度与楼层控制规律图

如图:设定达到最大速度的时候速度参数speed为100,且经过一层距离之后达到最大速度。

1)在电梯行走一层时,可以看到速度没有加到最大速度,到达最大速度的一半就开头减速,直到达到二楼。在程序中,检测distance的数值为半层楼的时候开头减速。

2)当电梯行走路程超过一层之后时,电梯可以达到最高速度,如图2.1可以看到,从二楼开头加速,到达三楼时达到最高速度,目标楼层是7楼,在达到6层是开头减速。到达7楼精确     停速。

(3)楼层控制部分

本程序是可以延续运行的,在初始时设置到达的楼层,到达目的楼层之后,通过开关输入下一次的目的楼层,之后,可以继续到达下一次的目的楼层。

程序中,通过变量distance(步进电机行走路程)计算浮现在所在的楼层数floor,每当到达目的楼层之后,把现在所在楼层存在变量floorbeforeshow中,在下一次通过开关输入想要楼层之后,推断其次次的目的楼层与本来楼层的相对大小,把差值送给下一次电梯需要行走的路程的目标变量中。继续举行下面的行走。(4)楼层显示部分

显示部分分为:小灯LED楼层模拟显示,以及数码管实时显示当前楼层,LED默认从1层开头,每经过一层楼,小灯移位;数码管默认从1楼开头,电梯到达几楼就显示几楼的数值,实现了实时显示。

-10

900

2

4

6

8

10

速度与楼层关系

速度

3设计电路

本次试验使用有:

(1)定时器芯片8254,本次试验使用的片选地址是220h,使用定时器0和定时器1,分离工作在方式3,采纳二进制计数方式,把1MHz的时钟信号分频,并且把out1接入到中断管理芯片8259的主片IR5上,触发中断,在中断服务函数中举行参数spnum的加一动作。

(2)LED以及LED开关打到CPU控制端时的编码芯片,在程序中选定其地址为200h。

(3)中断管理芯片,8259芯片,但是这个芯片我们并不知道其片选地址,其初始化已经在芯片中集成提前初始化,并不需要我们举行操作,提供应用户的引脚有IR5,本次我们使用IR5引脚来举行中断服务函数的编程。

(4)输入输出接口芯片8255,利用其出入输出缓冲的A、B、C八位端口,设置为A口输出,B口输入,C口输出,分离实现控制步进电机旋转、读取开关状态以及C口输出到LED灯实现楼层的实时显示。

其中各地址计算如下:

表3.1地址解释

地址对应芯片化为2进制

200hLED编码芯片001000000000

210h8255输入输出接口芯片001000010000

220h8253(8254)定时器芯片001000100000

由上可知,设计电路如下:

其中左边是8086最小系统的简化表示,通过锁存器实现了对于地址的单一性挑选,从而实现数据传输。

图31系统电路设计

4设计程序

程序流程图如下:

图4.1综合题程序流程图

表4.1参数解释表

参数名数据类型意义

floorinitdb记录初始从开关读入的需要电梯运行的楼层数floorinitdisdw读入的电梯运行楼层数折算出来的步长进数distancedw记录此时从读入目的楼层到运行时的步进数

floordb从distance折算出来的当前楼层

floorbeforeshowdb记录上一次电梯到达目的地的楼层数

updb标志位,目的楼层与现在楼层对照控制电机向上向下beforeloucengdb记录上一次开关的位置,打算了延续运行的开头

源程序如下:

;******************************

;电梯调速,四圈是一层,120步

;******************************

io_8253_0equ200h

io_8253_1equ201h

io_8253_kequ203h

p8255_aequ210h

p8255_bequ211h

p8255_cequ212h

p8255_ctlequ213h

led_csequ220h;同时也是字形端口的地址,位扫描地址为221h

datasegment

movedb0;运动标志位

floorinitdb0;目标楼层,会改

floorinitdisdw0

data1db01h,03h,02h,06h,04h,0ch,08h,09h

data2db09h,08h,0ch,04h,06h,02h,03h,01h

distanc

edw0;步进的距离,后面可以换成楼层,

在中断中更新数值

floordb0;直接存起来现在的楼层

floorbeforeshowdb0

ledcodedb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,67h,00h

lednowdb0

updb0

beforeloucengdb0

spnumdw0;记录进入中断次数

speeddw100;速度分频值,数越大速度越慢

bufdb0

bufnumdb0

iiiidb00000001b

dataends

codesegment

assumecs:code,ds:data

main:

movax,cx

movds,ax

movax,data

movds,ax

;设置8259中断屏蔽字

inal,21h

andal,11011111b

out21h,al

inal,0a1h

andal,0feh

out0a1h,al

;设置中断向量表

pushds

movbx,0

movds,bx

leaax,cs:int_proc;WRITEINTERRUPTPROGRAMEMTRYADDRESS

movbx,5;n=IRx

movsi,30h;base=30H

addsi,bx

addsi,si;typenumX4

addsi,si

movds:[si],ax

pushcs

popax

movds:[si+2],ax

pushcs

popax

movds:[si+2],ax

popds

;初始化8255

movdx,p8255_ctl

moval,82h;初始化,方式0,A端口步进电机输出,b端口输入楼层,c端口输出小灯

outdx,al

movbuf,33h

;初始化8253,利用两次的分频

movdx,io_8253_k

moval,36h

outdx,al

movdx,io_8253_0

movax,10

outdx,al

moval,ah

outdx,al

movdx,io_8253_k

moval,74h

outdx,al

movdx,io_8253_1

movax,40

outdx,al

moval,ah

outdx,al

run:cli

;程序开头,从8255中取出想要去的楼层往上走还是往下走

movdx,p8255_b

inal,dx

movbeforelouceng,al

cmpal,floorbeforeshow

jnagiveup

movup,1

subal,floorbeforeshow

movfloorinit,al

decal

movbh,250

mulbh

addax,125

movfloorinitdis,ax

jmpout1

giveup:

movup,0

subfloorbeforeshow,al

moval,floorbeforeshow

movfloorinit,al

decal

movbh,250

mulbh

addax,125

movfloorinitdis,ax

out1:moval,buf

movdx,p8255_a

outdx,al

sti

cmpup,1

jebxup

leabx,data2

bxup:leabx,data1;把相续代码的地址给bx

;**************循环体*********************

LLL:

;控制部分,主要是转化现在楼层,以及按照现在楼层设置速度

movax,speed

cmpax,spnum

jnatozero

jmpgo

tozero:xorax,ax

movspnum,ax

moval,[bx]

nx1:movdx,p8255_a

outdx,al

cmpup,1

jnenx2

incbx

movah,bufnum

incah

movbufnum,ah

moval,8

cmpal,bufnum

jnznext

xorax,ax

leabx,data1

movbufnum,al

jmpnext

nx2:

incbx

movah,bufnum

incah

movbufnum,ah

moval,8

cmpal,bufnum

jnznext

xorax,ax

leabx,data2

movbufnum,al

jmpnext

next:incdistance;记录步进电机的步数

movax,distance

movch,250

divch

movfloor,al

;假如目的是2楼

cmpfloorinit,1

jnznext1;不等于二,举行下一步的正常启动

cmpdistance,125

jnbshut_2

subspeed,1

cmpspeed,20

jnbshut_2

movspeed,20

shut_2:cmpdistance,250

jbshut

cli;到了二楼关中断

cmpup,1

jnestoredown1

movah,floor

addfloorbeforeshow,ah

callfinddown

storedown1:movah,floor

subfloorbeforeshow,ah

callfinddown

shut:

cmpdistance,125

jnago

addspeed,1;提高数值减速

cmpspeed,100

jbgo

movspeed,100

jmpgo

next1:

;加速阶段

cmpdistance,250

jnbshutdown

subspeed,1

cmpspeed,20

jnbgo

movspeed,20

shutdown:moval,floorinitcmpfloor,al

jnzshut1

cli

cmpup,1

jnestoredown2

movah,floor

addfloorbeforeshow,ah

callfinddown

storedown2:movah,floor

subfloorbeforeshow,ah

callfinddown

movmove,0

shut1:movax,floorinitdis

cmpdistance,ax

jnago

addspeed,1;提高数值减速cmpspeed,100

jbgo

movspeed,100

go:

;循环之中显示小灯和数码管cmpup,1

jneshow2

;led

moval,00000001b

movah,floorbeforeshow

addah,floor

movcl,ah

rolal,cl

movdx,p8255_c

outdx,al

;数码管

moval,ah

incal

movcl,01h

calldisp

jmpcontinue

show2:

;led

moval,00000001b

movah,floorbeforeshow

subah,floor

movcl,ah

rolal,cl

movdx,p8255_c

outdx,al

;数码管

moval,ah

incal

movcl,01h

calldisp

continue:jmplll

finddownproc

movdistance,0

loop1:

;程序开头,从8255中取出想要去的楼层;led

moval,00000001b

movah,floorbeforeshow

movcl,ah

rolal,cl

movdx,p8255_c

outdx,al

;数码管

moval,ah

incal

movcl,01h

calldisp

movdx,p8255_b

inal,dx

cmpal,beforelouceng

jeloop1

cmpal,floorbeforeshow

jnagiveup1

movbeforelouceng,al

movup,1

subal,floorbeforeshow

movfloorinit,al

decal

movbh,250

mulbh

addax,125

movfloorinitdis,ax

jmpout1

giveup1:

movup,0

movbeforelouceng,al

movcl,floorbeforeshow

subcl,al

moval,cl

movfloorinit,al

decal

movbh,250

mulbh

addax,125movfloorinitdis,ax

jmpout1

finddownENDP

;**********数码管显示函数*******DISPPROC

pushdx

pushbx

pushax

pushcx

movsi,offsetledcode

movbx,si

movah,0

addbx,ax

moval,[bx]

movdx,led_cs

outdx,al

moval,cl

incdx

nop

nop

nop

outdx,al

popcx

popax

popbx

popdx

RET

DISPENDP

;****中断服务函数,控制速度***int_procprocfar

pushax

pushcx

incspnum

cmpspnum,150

jnacon

movspnum,150

con:

moval,20h

out20h,al

popcx

popax

iret

int_procendp

codeends

endmain

5碰到的问题

(1)程序语法方面

1)寄存器使用时,数据类型不匹配;

2)程序越来越大的时候,程序结构混乱;

3)基本操作的要求,比如乘法MUL指令在AX和AL计算中的区分;

4)对于中断服务程序以及中断STI指令的理解。

(2)运行规律方面

1)电梯加速减速在一楼到二楼的特别状况的考虑问题;

2)电梯运行方式确实定问题;

3)电梯延续运行时,各种参数的转换问题;

4)对于电梯实时运行显示的显示规律问题。

(3)软件使用方面

1)在使用软件的时候,对于软件设置断点,以及使用断点的问题;

2)在软件使用中,常常浮现的USB端口缺失,以及软件程序不能发送到试验板中的问题;

6何解决问题

(1)程序语法方面

1)寄存器使用时,数据类型不匹配:

复习课本学问,对于db和dw不同类型的变量和寄存器,举行不同的使用总结,比如ax可以表示65536个大小的数值,而al为8位,仅仅是可以传递256大小的数值,在使用的过程中,一方面确保在寄存器和存储器,寄存器与寄存器传递数值的时候注重必需是相同数据类型的数据才干传递,另一方面,在程序中,确保想要的数据的大小与此数据存的数据类型的匹配,否则会发生溢浮现象,程序不会稳定运行。

2)程序越来越大的时候,程序结构混乱:

在程序加入需要的功能的同时,程序也越来越大,读程序与继续增强功能的难度也越来越高,此时,本人将程序简化,重复使用的程序段举行整合,写成函数,举行多次的调用。这样不仅仅是简化了程序大小,同时也增强了程序的可读性以及可移植性。

3)基本操作的要求:

在程序中,使用到的除法和乘法指令,对于数据类型有分外的要求,比如:

next:incdistance;记录步进电机的步数,算浮现在所在的楼层数movax,distance

movch,250

divch

movfloor,al

程序中,div除法操作,divsrc:al<=ax/src,ah<=ax%src,按照程序可知,需要的是商,于是从al中取得所需要的数值。

4)对于中断服务程序、堆栈段以及中断STI指令的理解:

在课程学习的时候,每次在写程序时必需把堆栈段定义,不管是用到还是不会用到,必需先把堆栈段定义,经过试验,发觉不定义堆栈段也可以运行程序,缘由是编译器已经协助定义了堆栈段。

理论学习中,CPU响应中断后,普通会自动关闭中断,用户要主动打开,否则,囫囵中断过程中,不会再响应其他中断。但是在试验中,进入中断服务程序之后,将STI开中断指令屏蔽之后,仍然可以正常运行,也就说,试验室的CPU并没有在相应中断之后把中断标志位清零。但是这也带来一个问题,就是在进入中断服务程序之后,尤其是在修改定时器的初始值时,假如手动改把中断标志位清零,在定时器重新赋值之后,out端的转变可能会再次触发中断,会影响囫囵程序的运行。

(2)运行规律方面

1)电梯加速减速在一楼到二楼的特别状况的考虑问题:

由设计计划中可以看到,从一楼到二楼存在一个没有加到最大速度的状况,也就是在程序的设计上,需要考虑到这一点,于是对于目标楼层与现在楼层差一层的状况有如下的处理:

;假如目的是2楼

cmpfloorinit,1

jnznext1;不等于二,举行下一步的正常启动

cmpdistance,125

jnbshut_2

subspeed,1

cmpspeed,20jnbshut_2movspeed,20shut_2:cmpdistance,250jbshut

cli;到了二楼关中断shut:

cmpdistance,125jnagoaddspeed,1;提高数值减速cmpspeed,100jbgo

movspeed,100jmpgo

图形解释:

图5.1速度在相邻楼层运行时的变化曲线

这段程序中,首先确保目的地仅距离,设置一层楼步进电机需要发250个脉冲,于是在程序中,当检测到distance(脉冲数)小于125,,即没有到半层时加速,因为加到最大速度需要一层楼的距离,半层楼仅加速到小于最大速度,超过半层时以相同的加速度减速,同时对于速度的数值举行了一个限幅,防止飞转。2)电梯运行方式确实定问题:

在编程初期,对于电梯的运行以及试验目的要求不太清晰,开头仅仅实现了步进电机的加速,匀速以及减速的过程。后来经过思量和与试验参考书的查阅,终于确定完整实现一个电梯的运行过程,并且实现电梯运行的实时显示功能。

5010001234

速度与楼层关系

速度

3)电梯延续运行时,各种参数的转换问题:

通过对电梯运行状态的检测参数,以及必需的算法实现电梯的延续运行,详细参数如下:

按照表4.1可知下面参数:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论