微机原理课程设计电梯.docx
《微机原理课程设计电梯.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电梯.docx(25页珍藏版)》请在冰点文库上搜索。
微机原理课程设计电梯
微机原理课程设计(电梯)
计算机原理课程设计
实验报告
学院:
专业:
班级:
姓名:
学号:
成绩:
1.实验题目------------------------------------------3
2.题目分析------------------------------------------3
3.原理分析------------------------------------------3
4.实验模块------------------------------------------4
5.电路图设计----------------------------------------5
6.程序框图------------------------------------------5
7.程序清单------------------------------------------7
8.实验现象------------------------------------------13
一、实验题目
垂直电梯运行曲线控制
(一)
模拟题:
在实际中,电梯是我们的交通工具,电梯从静止开始,慢慢加速,当到达某个值时,转入匀速运动,根据电梯运行的速度,电梯快要到达停止层时,开始减速,直到平层停止,打开轿厢门,客人安全走下电梯,无人上下电梯,电梯关门,向另一个目的层运动,火灾时,电梯自动归位到首层。
二、题目分析
从题目要求来看,需要实现的功能有:
1.电机的正转和反转
2.电梯的加速-匀速-减速
3.电梯所在楼层的显示
三、原理分析
本课程设计以步进电机为驱动电机,通过8086处理器、8259A中断控制器、8255可编程接口为核心芯片,并辅以开关、LED,构成一个控制系统,用以模拟电梯正常运行过程。
其中的实验器材原理分别为:
步进电机:
作为被控制的电机,电机每走一步转过7.5度,转一圈需要48步才能转一圈。
电梯的控制方法为:
A-AB-B-BC-C-CD-D-DA-A,一个周期内有八步,按照这个规律不断循环就能实现电机的连续运转。
8086:
作为CPU,控制步进电机、8259A可编程中断控制器、8255可编程接口以及LED,使用汇编语言编程。
8259A:
作为中断控制器,数据总线、地址总线和控制总线与8086相连,使用主片上的MIR5和从片上的SIRO作为触发脉冲PLUS1和PLUS2输入口。
当来一个PLUS1或PLUS2时,传递给CPU一个中断,让CPU处理子程序。
8255:
作为可编程接口,A口的PA0、PA1、PA2和PA3分别与步进电机的BJ-IN1、BJ-IN2、BJ-IN3和BJ-IN4相连,控制步进电机的旋转。
B口为数据输入,PB0-PB7分别与开关K0-K7相连,作为输入目的楼层接口。
C口为LED驱动输出口,分别与八个LED相连,可以显示电梯所在的楼层。
四、实验模块
控制模块
电梯的速度控制:
电机速度的控制是通过步与步之间的延时来控制的,延时越短,速度越快。
通过分析,我以FFFF个主频脉冲为一个延时基本单位T,当电梯加速时,第一个循环的第一步与第二步之间用8T,第二步与第三步之间用7T……第八步与下一个循环之间用T,这样就实现了由慢到快的过渡;当电梯匀速时,所有的延时均用T;当电梯减速时,最后一个循环第一步与第二步之间用2T,第二步与第三步之间用3T……第七步与第八步之间用8T,这样就实现了由快到慢得过渡,这三个过程就实现了电梯运行时加速-匀速-减速基本过程。
楼层间电机行进控制:
我以电梯转一圈作为电梯行进一层楼的标准。
具体思想为,首先电梯所在楼层设为1层,输入人所在楼层后,电梯经过一个加速-匀速-减速过程到达人所在楼层,然后输入目的楼层,电梯又经过一个加速-匀速-减速到达目的楼层,然后把目的楼层赋值给电梯当前所在楼层,一个基本过程就完成了。
基本过程的步数控制:
假设电梯从M层运行到N层(N>M),以电机转一圈为行进一层,那么电机需要运行的圈数为N-M,对应于6(N-M)个循环。
首先,电梯加速需要用一个循环,然后电梯匀速运行需要6(N-M)-2个循环,最后是减速用一个循环。
按照这个规则设计,就能实现转多少圈就代表行进多少层,且速度的变换很平滑。
延时模块
本实验中,延时模块以FFFF个主频周期为基本单位时间T,包含延时分别为T-8T的八个Delay。
当电机执行加速过程时,电机一个循环之间的延时分别为8T-2T,当电机匀速运行时,电机的步与步之间的延时为T,当电机减速时,电机最后一个循环的步与步之间的延时分别为2T-8T,这样通过延时就能控制电机运行的速度。
中断模块
中断模块为8259A,分为使用主片的MIR5和从片的SIRO,当给一个PLUS的时,送给CPU一个中断,让其执行子程序,接受开关的到达楼层数据然后驱动电机行进。
显示模块
显示模块为3个LED,通过CPU控制,使其在到达每一层楼后显示相对应的楼层数。
五、电路图设计
六、程序框图
子程序RISE子程序DOWN
开始
输入8255控制字
开放MIR5和SIR0中断
写中断程序入口
输入目的楼层N
N>M?
给电梯当前楼层赋初值M
调用RISE
调用DOWN
电梯所在楼层赋给M
Y
N
中断程序开始
保护寄存器
调用子程序
中断结束命令
恢复寄存器
开中断
中断返回
开中断
延时程序开始
PUSH:
AX,BX.CX
DH←SPEED
CX←0FFFF
LOOPX2
DH←DH-1
POP:
AX,BX,CX
DH=0?
Y
N
七、程序清单
datasegment
i8255_aequ200h
i8255_bequ201h
i8255_cequ202h
i8255_kequ203h
speeddb2
countdb01h
xdb01h
firedb00h
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moves,ax
movdx,i8255_k
moval,89h
outdx,al
inal,21h
andal,11011011b
out21h,al
inal,0a1h
andal,0feh
out0a1h,al
sti
pushds
movax,0
movds,ax
leaax,cs:
mint_proc
movbx,5
movsi,30H
addsi,bx
addsi,si
addsi,si
movds:
[si],ax
pushcs
popax
movds:
[si+2],ax
leaax,cs:
sint_proc
movbx,0
movsi,70H
addsi,bx
addsi,si
addsi,si
movds:
[si],ax
pushcs
popax
movds:
[si+2],ax
popds
lll:
movdx,i8255_b
moval,x
outdx,al
jmplll
mint_procprocfar
sti
pushax
callmint
moval,20h
out20h,al
popax
iret
mint_procendp
mintproc
movdx,i8255_c
inal,dx
movcount,al
cmpal,x
jarise
jbdown
jmprr
rise:
callspeed1
callspeed2
callspeed3
jmprr
down:
callspeed4
callspeed5
callspeed6
jmprr
rr:
moval,count
movx,al
ret
mintendp
sint_procprocfar
pushax
pushdx
callsint
moval,20h
out0a0h,al
nop
out20h,al
popax
popdx
iret
sint_procendp
sintproc
movdx,i8255_c
inal,dx
andal,0fh
movcount,al
cmpal,x
jarise1
jbdown1
jmprr1
rise1:
callspeed1
callspeed2
callspeed3
jmprr1
down1:
callspeed4
callspeed5
callspeed6
jmprr1
rr1:
ret
sintendp
speed1proc
movdx,i8255_a
moval,01h
outdx,al
calldelay8
movdx,i8255_a
moval,03h
outdx,al
calldelay7
movdx,i8255_a
moval,02h
outdx,al
calldelay6
movdx,i8255_a
moval,06h
outdx,al
calldelay5
movdx,i8255_a
moval,04h
outdx,al
calldelay4
movdx,i8255_a
moval,0ch
outdx,al
calldelay3
movdx,i8255_a
moval,08h
outdx,al
calldelay2
movdx,i8255_a
moval,09h
outdx,al
calldelay1
ret
speed1endp
speed2proc
moval,count
subal,x
movah,al
addal,al
addal,ah
addal,al
subal,02h
xorah,ah
decax
movcx,ax
a2:
pushcx
movdx,i8255_a
moval,01h
outdx,al
calldelay1
movdx,i8255_a
moval,03h
outdx,al
calldelay1
movdx,i8255_a
moval,02h
outdx,al
calldelay1
movdx,i8255_a
moval,06h
outdx,al
calldelay1
movdx,i8255_a
moval,04h
outdx,al
calldelay1
movdx,i8255_a
moval,0ch
outdx,al
calldelay1
movdx,i8255_a
moval,08h
outdx,al
calldelay1
movdx,i8255_a
moval,09h
outdx,al
calldelay1
popcx
loopa2
ret
speed2endp
speed3proc
movdx,i8255_a
moval,01h
outdx,al
calldelay1
movdx,i8255_a
moval,03h
outdx,al
calldelay2
movdx,i8255_a
moval,02h
outdx,al
calldelay3
movdx,i8255_a
moval,06h
outdx,al
calldelay4
movdx,i8255_a
moval,04h
outdx,al
calldelay5
movdx,i8255_a
moval,0ch
outdx,al
calldelay6
movdx,i8255_a
moval,08h
outdx,al
calldelay7
movdx,i8255_a
moval,09h
outdx,al
calldelay8
ret
speed3endp
speed4proc
movdx,i8255_a
moval,09h
outdx,al
calldelay8
movdx,i8255_a
moval,08h
outdx,al
calldelay7
movdx,i8255_a
moval,0ch
outdx,al
calldelay6
movdx,i8255_a
moval,04h
outdx,al
calldelay5
movdx,i8255_a
moval,06h
outdx,al
calldelay4
movdx,i8255_a
moval,02h
outdx,al
calldelay3
movdx,i8255_a
moval,03h
outdx,al
calldelay2
movdx,i8255_a
moval,01h
outdx,al
calldelay1
ret
speed4endp
speed5proc
moval,x
subal,count
movah,al
addal,al
addal,ah
addal,al
subal,02h
xorah,ah
decax
movcx,ax
a1:
pushcx
movdx,i8255_a
moval,09h
outdx,al
calldelay1
movdx,i8255_a
moval,08h
outdx,al
calldelay1
movdx,i8255_a
moval,0ch
outdx,al
calldelay1
movdx,i8255_a
moval,04h
outdx,al
calldelay1
movdx,i8255_a
moval,06h
outdx,al
calldelay1
movdx,i8255_a
moval,02h
outdx,al
calldelay1
movdx,i8255_a
moval,03h
outdx,al
calldelay1
movdx,i8255_a
moval,01h
outdx,al
calldelay1
popcx
loopa1
ret
speed5endp
speed6proc
movdx,i8255_a
moval,09h
outdx,al
calldelay1
movdx,i8255_a
moval,08h
outdx,al
calldelay2
movdx,i8255_a
moval,0ch
outdx,al
calldelay3
movdx,i8255_a
moval,04h
outdx,al
calldelay4
movdx,i8255_a
moval,06h
outdx,al
calldelay5
movdx,i8255_a
moval,02h
outdx,al
calldelay6
movdx,i8255_a
moval,03h
outdx,al
calldelay7
movdx,i8255_a
moval,01h
outdx,al
calldelay8
ret
speed6endp
delay1proc
pushax
pushbx
pushcx
movdh,01h
x1:
movcx,0ffffh
x2:
loopx2
decdh
jnzx1
popdx
popcx
popax
ret
delay1endp
delay2proc
pushax
pushbx
pushcx
movdh,02h
x3:
movcx,0ffffh
x4:
loopx4
decdh
jnzx3
popdx
popcx
popax
ret
delay2endp
delay3proc
pushax
pushbx
pushcx
movdh,03h
x5:
movcx,0ffffh
x6:
loopx6
decdh
jnzx5
popdx
popcx
popax
ret
delay3endp
delay4proc
pushax
pushbx
pushcx
movdh,04h
x7:
movcx,0ffffh
x8:
loopx8
decdh
jnzx7
popdx
popcx
popax
ret
delay4endp
delay5proc
pushax
pushbx
pushcx
movdh,05h
x9:
movcx,0ffffh
x10:
loopx10
decdh
jnzx9
popdx
popcx
popax
ret
delay5endp
delay6proc
pushax
pushbx
pushcx
movdh,06h
x11:
movcx,0ffffh
x12:
loopx12
decdh
jnzx11
popdx
popcx
popax
ret
delay6endp
delay7proc
pushax
pushbx
pushcx
movdh,07h
x13:
movcx,0ffffh
x14:
loopx14
decdh
jnzx13
popdx
popcx
popax
ret
delay7endp
delay8proc
pushax
pushbx
pushcx
movdh,08h
x15:
movcx,0ffffh
x16:
loopx16
decdh
jnzx15
popdx
popcx
popax
ret
delay8endp
codeends
endstart
八、实验现象
电梯的初始位置在第1层,将开关的值设为N(8>N>1),按下PLUS时,电机将正转,以加速-匀速-减速的变化规律旋转N-1圈到达第N层,然后LED显示为N层;将开关设为M(8>N>1),当MN时,电梯将正转到达M层,然后LED显示为第M层。