版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
千里之行,始于足下让知识带有温度。第第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度企业知识产权质押贷款合同-@-2
- 课题申报参考:能源转型下居民亲环境行为的变迁趋势及提升路径研究
- 课题申报参考:面向韧性发展的城市群医疗资源供需适配研究
- 2025年个人无息借款合同样本:无息借款协议:扶持文化艺术项目2篇
- 二零二五版民政局批准离婚协议书范本8篇
- 2025年度绿色能源项目内部股东权益转让合同4篇
- 二零二五年度南京市房产局制定的房屋抵押权登记合同模板4篇
- 2025年度恋爱期间共同理财规划与投资合同4篇
- 2025年度个人信用借款担保合同范本3篇
- 2025版车辆抵押借款合同(含贷款利率调整)4篇
- 护理饮食指导整改措施及方案
- 项目工地春节放假安排及安全措施
- 印染厂安全培训课件
- 红色主题研学课程设计
- 胸外科手术围手术期处理
- 装置自动控制的先进性说明
- 《企业管理课件:团队管理知识点详解PPT》
- 移动商务内容运营(吴洪贵)任务二 软文的写作
- 英语词汇教学中落实英语学科核心素养
- 《插画设计》课程标准
- 高中英语名词性从句讲解
评论
0/150
提交评论