资源描述
微机原理课程设计电梯
22
2020年4月19日
文档仅供参考,不当之处,请联系改正。
计算机原理课程设计
实验报告
学院:
专业:
班级:
姓名:
学号:
成绩:
目录
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控制,使其在到达每一层楼后显示相对应的楼层数。
五、电路图设计
8259A
MIR5
SIR0
PA0-PA3
8255
PC0-PC7
PB0-PB7
/CS
PLUS1
PLUS2
步进电机
IN1-IN4
开关K0-K7
LED
L0-L7
200H-2FFH
六、程序框图
子程序RISE 子程序DOWN
调用SPEED1
调用SPEED2
调用SPEED3
RET
开始
调用SPEED4
调用SPEED5
调用SPEED6
RET
开始
开始
输入8255控制字
开放MIR5和SIR0中断
写中断程序入口
输入目的楼层N
N>M?
给电梯当前楼层赋初值M
调用RISE
调用DOWN
电梯所在楼层赋给M
Y
N
中断程序开始
保护寄存器
调用子程序
中断结束命令
恢复寄存器
开中断
中断返回
开中断
延时程序开始
PUSH:AX,BX.CX
DHßSPEED
CXß0FFFF
LOOP X2
DHßDH-1
POP:AX,BX,CX
DH=0?
Y
N
七、程序清单
data segment
i8255_a equ 200h
i8255_b equ 201h
i8255_c equ 202h
i8255_k equ 203h
speed db 2
count db 01h
x db 01h
fire db 00h
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov es,ax
mov dx,i8255_k
mov al,89h
out dx,al
in al,21h
and al,11011011b
out 21h,al
in al, 0a1h
and al,0feh
out 0a1h,al
sti
push ds
mov ax,0
mov ds,ax
lea ax,cs:mint_proc
mov bx,5
mov si,30H
add si,bx
add si,si
add si,si
mov ds:[si],ax
push cs
pop ax
mov ds:[si+2],ax
lea ax,cs:sint_proc
mov bx,0
mov si,70H
add si,bx
add si,si
add si,si
mov ds:[si],ax
push cs
pop ax
mov ds:[si+2],ax
pop ds
lll: mov dx,i8255_b
mov al,x
out dx,al
jmp lll
mint_proc proc far
sti
push ax
call mint
mov al,20h
out 20h,al
pop ax
iret
mint_proc endp
mint proc
mov dx,i8255_c
in al,dx
mov count,al
cmp al,x
ja rise
jb down
jmp rr
rise: call speed1
call speed2
call speed3
jmp rr
down: call speed4
call speed5
call speed6
jmp rr
rr: mov al,count
mov x,al
ret
mint endp
sint_proc proc far
push ax
push dx
call sint
mov al,20h
out 0a0h,al
nop
out 20h,al
pop ax
pop dx
iret
sint_proc endp
sint proc
mov dx,i8255_c
in al,dx
and al,0fh
mov count,al
cmp al,x
ja rise1
jb down1
jmp rr1
rise1: call speed1
call speed2
call speed3
jmp rr1
down1: call speed4
call speed5
call speed6
jmp rr1
rr1: ret
sint endp
speed1 proc
mov dx,i8255_a
mov al,01h
out dx,al
call delay8
mov dx,i8255_a
mov al,03h
out dx,al
call delay7
mov dx,i8255_a
mov al,02h
out dx,al
call delay6
mov dx,i8255_a
mov al,06h
out dx,al
call delay5
mov dx,i8255_a
mov al,04h
out dx,al
call delay4
mov dx,i8255_a
mov al,0ch
out dx,al
call delay3
mov dx,i8255_a
mov al,08h
out dx,al
call delay2
mov dx,i8255_a
mov al,09h
out dx,al
call delay1
ret
speed1 endp
speed2 proc
mov al,count
sub al,x
mov ah,al
add al,al
add al,ah
add al,al
sub al,02h
xor ah,ah
dec ax
mov cx,ax
a2: push cx
mov dx,i8255_a
mov al,01h
out dx,al
call delay1
mov dx,i8255_a
mov al,03h
out dx,al
call delay1
mov dx,i8255_a
mov al,02h
out dx,al
call delay1
mov dx,i8255_a
mov al,06h
out dx,al
call delay1
mov dx,i8255_a
mov al,04h
out dx,al
call delay1
mov dx,i8255_a
mov al,0ch
out dx,al
call delay1
mov dx,i8255_a
mov al,08h
out dx,al
call delay1
mov dx,i8255_a
mov al,09h
out dx,al
call delay1
pop cx
loop a2
ret
speed2 endp
speed3 proc
mov dx,i8255_a
mov al,01h
out dx,al
call delay1
mov dx,i8255_a
mov al,03h
out dx,al
call delay2
mov dx,i8255_a
mov al,02h
out dx,al
call delay3
mov dx,i8255_a
mov al,06h
out dx,al
call delay4
mov dx,i8255_a
mov al,04h
out dx,al
call delay5
mov dx,i8255_a
mov al,0ch
out dx,al
call delay6
mov dx,i8255_a
mov al,08h
out dx,al
call delay7
mov dx,i8255_a
mov al,09h
out dx,al
call delay8
ret
speed3 endp
speed4 proc
mov dx,i8255_a
mov al,09h
out dx,al
call delay8
mov dx,i8255_a
mov al,08h
out dx,al
call delay7
mov dx,i8255_a
mov al,0ch
out dx,al
call delay6
mov dx,i8255_a
mov al,04h
out dx,al
call delay5
mov dx,i8255_a
mov al,06h
out dx,al
call delay4
mov dx,i8255_a
mov al,02h
out dx,al
call delay3
mov dx,i8255_a
mov al,03h
out dx,al
call delay2
mov dx,i8255_a
mov al,01h
out dx,al
call delay1
ret
speed4 endp
speed5 proc
mov al,x
sub al,count
mov ah,al
add al,al
add al,ah
add al,al
sub al,02h
xor ah,ah
dec ax
mov cx,ax
a1: push cx
mov dx,i8255_a
mov al,09h
out dx,al
call delay1
mov dx,i8255_a
mov al,08h
out dx,al
call delay1
mov dx,i8255_a
mov al,0ch
out dx,al
call delay1
mov dx,i8255_a
mov al,04h
out dx,al
call delay1
mov dx,i8255_a
mov al,06h
out dx,al
call delay1
mov dx,i8255_a
mov al,02h
out dx,al
call delay1
mov dx,i8255_a
mov al,03h
out dx,al
call delay1
mov dx,i8255_a
mov al,01h
out dx,al
call delay1
pop cx
loop a1
ret
speed5 endp
speed6 proc
mov dx,i8255_a
mov al,09h
out dx,al
call delay1
mov dx,i8255_a
mov al,08h
out dx,al
call delay2
mov dx,i8255_a
mov al,0ch
out dx,al
call delay3
mov dx,i8255_a
mov al,04h
out dx,al
call delay4
mov dx,i8255_a
mov al,06h
out dx,al
call delay5
mov dx,i8255_a
mov al,02h
out dx,al
call delay6
mov dx,i8255_a
mov al,03h
out dx,al
call delay7
mov dx,i8255_a
mov al,01h
out dx,al
call delay8
ret
speed6 endp
delay1 proc
push ax
push bx
push cx
mov dh,01h
x1: mov cx,0ffffh
x2: loop x2
dec dh
jnz x1
pop dx
pop cx
pop ax
ret
delay1 endp
delay2 proc
push ax
push bx
push cx
mov dh,02h
x3: mov cx,0ffffh
x4: loop x4
dec dh
jnz x3
展开阅读全文