当前位置:文档之家› 微机原理课程设计--电梯控制

微机原理课程设计--电梯控制

目录一、课设目的 (1)二、课设内容与要求 (1)三、电梯设计的具体实现 (1)(一)电梯的工作方式 (1)(二)总体设计思路 (2)(三)系统硬件电路设计 (3)1、设计结构 (3)2、模块分析 (3)3、画出响应的电路图 (4)(四)软件设计 (4)1.主要设计模块要求 (5)2.程序流程图 (5)(1)主程序框图. (5)(2)中断服务程序框图 (6)(3)电梯算法流程图 (7)四、实现程序 (11)五、设计体会 (19)六、附录 (20)七、参考资料 (21)一、课设目的1.学会用微机原理;2.掌握计算机对输入信号检测和输出控制的基本方法;3.掌握常用按钮、发光二极管的使用方法。

4.提高学生的动手能力,达到理论和实践紧密结合。

二、课设内容与要求1. 课设内容首先了解电梯运行规律,我们结合实际假设电梯的几种运行情况:(1)若当前电梯停在某层(七段码显示相应楼层,7个LED 全灭)。

键入1~9数字键,如键入的数字与当前电梯停层同,则不产生动作;若不同则相应楼层的LED亮;如再按运行键,则电梯自动判别上升或下降(在运行过程中七段码显示楼层变化)一直到达希望停的楼层(七段码显示该楼层,相应LED亮);(2)若当前电梯正在上升或下降运行中(此时七段码显示楼层变化,LED指示希望抵达的楼层);若键入新的希望停的楼层数字(相应的LED亮),则对同方向(上升或下降)未到的楼层能停,对其它情况则先停原来按下的楼层,然后按运行键后继续运行)。

有如下几种情况:电梯当前在3层,向上运行,LED 指示希望在5层停,此时若键入3,则电梯将在5楼停(同方向),若再按运行键,则继续运行至7层停;键入的不是5而是7,则电梯将先停在7层,再按运行键,运行至7层停;键入的不是7(或5),而是1,则电梯先停在7层(先达同方向楼层)。

再按运行键,运行至1层停。

2.连接线路并行接口电路选择8255芯片,七段数码管、LED 指示灯连接线路由学生自己设计,可参考实验指导书的相关内容。

楼层数字键和运行按钮都可由PC机键盘代替3.编写程序4.调试程序。

汇编、连接后执行程序,观察电梯运行情况。

三、电梯设计的具体实现(一)电梯的工作方式电梯工作按以下方式运行:1.假设当前电梯停在某层(LED显示相应楼层,5个发光二极管全灭)。

键入数字键,如键入的数字与当前电梯停靠层相同,则什么也不做,若不同则相应楼层的发光二极管亮;电梯自动判别上升或下降(在运行过程中用八段码来显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应LED 灭)。

2.假设当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED 指示希望抵达的楼层),若键入新的希望停靠的楼层数字(相应的LED 亮),则对同方向(上升或下降)未到的楼层能停靠,对其它情况则先停靠原先希望停的楼层,然后继续运行)。

如下几例:1)设电梯当前在2层,向上运行,LED指示希望在4层停,此时若键入3,则电梯将在3楼停,然后继续运行至4层停;2)同上情况,若键入的不是3而是5,则电梯将先停在4层,然后运行至5层停;3)同上情况,若键入的不是3(或5),而是1,则电梯先停在4层,然后运行至1层停。

(二)、总体设计思路本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、LED显示器、八段数码管等模块。

有5个楼层,需要用5个按键模拟电梯中的请求按钮,用5个按键模拟5个楼层每层向上请求的按钮,再用5个模拟5个楼层每层向下请求的按钮。

非编码键盘有16个键,可以用1-5号键模拟电梯内的按钮,用6-0号键模拟每层向上请求的按纽,A-E 模拟每层向下请求的按纽。

当电梯静止状态时,无论外部哪一层有请求,电梯都由静止状态转入向上或向下运行的状态,直到到达请求的楼层;当电梯处于向上运行的状态时,此时高于该楼层向上的请求和内部请求级别最高,其次是所有楼层向下的请求,再次是低于该楼层向上的请求;当电梯处于向下运行的状态时则情况相反。

由于中断级别在随着电梯所处楼层的不同而变化,而且中断源比较多。

所以用每一个中断源直接和中断控制器相连,需要用到多个8259A级联,很不方便。

为解决这个问题,首先定义三个单字节变量REQ_U、REQ_D和REQ_IN分别存储电梯每一层向上、向下和内部的请求,每一个变量用低5位,每一位代表一层。

例如,REQ_U为00000110B,这代表在2层和3层有向上的请求。

8253定时器每隔20ms产生一次中断,中断程序便去执行扫描键盘,当扫描到有电梯内部或者外部按键时,将请求存储到变量中。

每到一个状态时再检查请求变量REQ_U、REQ_D和REQ_IN的值,根据电梯的运行方向和变量中的请求,来决定电梯下一步的运行。

设电梯的当前楼层为floor(floor=1~7),运行方向为dir (dir=0,向上;dir=1,向下),在电梯运行的工程中,用数码管输出floor值显示当前的楼层。

LED输出REQ_IN的值显示电梯内已经请求的楼层。

(三)、系统硬件电路设计由于采用了PC机资源和微机实验平台,不需要其他的硬件电路。

利用了微机平台上的8253定时/计数器、8255并行接口单元、LED单元、非编码键盘、数码管显示单元等等。

系统结构框图,如图1所示。

1、设计结构:2、图1 系统结构框图2、模块分析:(1)可编程定时/计数器8253定时/计数器8253主要是用于定时20ms ,触发中断进行键盘扫描。

电路连线是CLOCK0接Q6,分频后频率为46875Hz ,OUT0接中断IRQ2,每20ms 中断一次,GATE0接5v 。

计数器的初值应该是3A9H 。

(2)8255并行接口单元8255主要是用于键盘的扫描和发光二极管的数据输出。

所以用8255A 口的低7位接7个发光二极管,B 口低4位接非编码键盘的列线,高4位接键盘的行线。

(3) LED 显示系统虽然只用了1格LED 显示器,但为了数字更新更方便,主程序更加简单,故此系统选用动态显示方式。

由于系统的软件部分Q6 IRQ2 5V clk0 8253 GA TE0 OUT0 A 口 8255 B 口 C 口 LED 显示 模块 CS0 CS1 CS2 CS37个发光二极管 非编码键盘 片选的运行时的核心程序是一直循环的,因此显示程序也是在循环过程中一直被调用,从而实时地被显示出来。

(4)非编码键盘本系统采用的是行反转法来扫描键盘的,调用键盘扫描的程序TESTKEY后,程序中的变量KEY的值就是按下的键的值,如果KEY为0FFH则表示无键盘输入,为0~15 则按照上往下从左往右的顺序分别代表每一个按键按下的信息。

不过此扫描程序没有考虑到多个按键同时按下的情况。

又因为模拟电梯的按键一般不会有两个按键同时按下的情况,所以,多个按键的情况可以不予考虑。

3、画出相应的电路图:图2 电路原理图(四)、软件设计本设计的软件设计的思路:通过软件编程使8253输出定时信号申请中断,在中断服务程序中扫描键盘,如果有按键,修改相应的变量位,并输出内部请求变量REQ_IN到发光二极管显示当前的内部请求楼层。

在主程序中,查询变量的值,根据电梯调度算法运行电梯。

1.主要设计模块要求程序主要包括以下主要模块:键盘扫描程序、LED显示程序、电梯调度算法。

1)键盘扫描程序:采用的是行反转法来扫描键盘的,相应的程序设计请参考实验指导书上实验3中的相关介绍。

2)LED显示程序:本设计只用到了一个LED,只要将floor转换为相应的段码。

先输出位码,再输出段码,循环输出就可以动态显示。

为了循环的显示,将LED显示程序放在中断服务程序中。

相应的程序设计请参考实验指导书上实验3中的相关介绍。

3)电梯调度算法:在设计时将电梯一次从下到上视为一次运行(注意不一定从底层到顶层),同理,电梯一次从上到下也视为一次运行(注意不一定从顶层到底层)。

当电梯向上运行时:a)位于当前层以下的向上请求都被忽略留到下次向上运行时处理。

b)位于当前层以上的向上请求都被记录留到此次运行处理。

c)无论哪层的向下请求都被忽略留到下次向下运行时处理。

当电梯向下运行时:a)位于当前层以上的向下请求都被忽略留到下次向下运行时处理。

b)位于当前层以下的向下请求都被记录留到此次运行处理。

c)无论哪层的向上请求都被忽略留到下次向上运行时处理。

2.程序流程图1)主程序框图:图3 主程序框图2)中断服务程序框图:图4 中断服务程序框图3)电梯算法流程图:其中,dir代表电梯的运行方向,0代表电梯向上运行,1代表向下运动。

设REQ_U(n)代表第n层向上的请求,同样,REQ_D(n) 代表第n层向下的请求,REQ_IN(n) 代表第n层内部的请求。

求next 的方法为:电梯向上时,next为内部请求的最小值和向上请求的大于floor的最小值之间的小者。

电梯向下时,next为内部请求的最大值和向下请求中小于floor的最大值之间的大者。

没有满足要求的时返回0。

电梯算法流程图:图5 电梯算法流程图四、实现程序FNUM MACROLOCAL ML1PUSH CXPUSH AXPUSH DXPUSH SIMOV CH,13HMOV CL,31HMOV SI,9ML1: MOV AH,02H ;MOV DH,CHMOV DL,1FHINT 10HMOV AH,02HMOV DL,CLINT 21HDEC CHINC CLDEC SIJNZ ML1POP SIPOP DXPOP AXPOP CXENDMSITUATION MACRO NOWFLOCAL L1,L2,L3,L4,L5,L6,L7,L8,PASS1 MOV AH,03HINT 10HFNUMMOV AH,02HINT 10HMOV SI,101HL0: MOV AH,0CHMOV DX,LASTF MOV CX,SIMOV AL,0INT 10HINC SICMP SI,120H JNE L0MOV BH,1HMOV SI,100H L1: MOV AH,0CH MOV DX,20H MOV CX,SIMOV AL,BHINT 10HADD SI,1HINC BHCMP SI,120H JNE L1MOV SI,20H MOV BH,1HL2: MOV AH,0CH MOV DX,SIMOV CX,100H MOV AL,BHINT 10HADD SI,1HINC BHCMP SI,9BH JNE L2MOV SI,100H MOV BH,1HL3: MOV AH,0CH MOV DX,9BH MOV CX,SIMOV AL,BHINT 10HINC BHINC SICMP SI,120HJNE L3MOV SI,20HMOV BH,1HL4: MOV AH,0CHMOV DX,SIMOV CX,120HMOV AL,BHINT 10HADD SI,1HINC BHCMP SI,9BHJNE L4MOV FLAG1,1MOV DI,NOWF ;NOWFLOORMOV SI,101HL5: MOV AH,0CHMOV DX,DIMOV CX,SIMOV AL,1INT 10HINC SICMP SI,120HJNE L5ENDMMOVEF MACRO NOWF,LASTFLOCAL L1,L2,L3,L4,L5,L6,L7,PASS1 MOV BH,1HMOV SI,100HL1: MOV AH,0CHMOV DX,20HMOV CX,SIMOV AL,BHINT 10HADD SI,1HINC BHCMP SI,120HJNE L1MOV SI,20HMOV BH,1HL2: MOV AH,0CHMOV DX,SIMOV CX,100HMOV AL,BHINT 10HADD SI,1HINC BHCMP SI,9BHJNE L2MOV SI,100HMOV BH,1HL3: MOV AH,0CHMOV DX,9BHMOV CX,SIMOV AL,BHINT 10HINC BHINC SICMP SI,120HJNE L3MOV SI,20HMOV BH,1HL4: MOV AH,0CHMOV DX,SIMOV CX,120HMOV AL,BHINT 10HADD SI,1HINC BHCMP SI,9BHJNE L4MOV FLAG1,1MOV DI,NOWF ;NOWFLOORL6: MOV SI,101HL5: MOV AH,0CHMOV DX,DIMOV CX,SIMOV AL,1INT 10HINC SICMP SI,120HJNE L5MOV AX,FLAG1CMP AX,1JNE PASS1XOR AX,AXMOV FLAG1,AXMOV AH,09HMOV DX,OFFSET MSGEN INT 21HMOV DX,OFFSET MSG3 INT 21HMOV AH,01HINT 21HPASS1:MOV BX,06FFHMOV CX,0FFFFH TIME: LOOP TIMEDEC BXCMP BX,0JNE TIMEMOV SI,101HL7: MOV AH,0CHMOV DX,DIMOV CX,SIMOV AL,0INT 10HINC SICMP SI,120HJNE L7MOV AX,NOWFCMP AX,LASTFJA PASS2INC DIJMP PASS3PASS2: CMP AX,LASTFJNE PASS4JMP PASS3PASS4: DEC DIPASS3:CMP DI,LASTF ;LASTFLOORJNE L6MOV SI,101HENDMDATA SEGMENTMSG1 DB 'FLOOR YOU SIT NOW(JUST 1-9F):$' MSG2 DB 'FLOOR YOU WANT GO(JUST 1-9F):$' MSG3 DB 'INPUT ANY KEY TO START...$'MSG4 DB 'WANT EXPERIENCE AGAIN (Y/N)..$' MSGEN DB 0AH,0DH,'$'NOWF DW ?LASTF DW ?FLAG1 DW 1DATA ENDSSTACK SEGMENTBUFS DB 100 DUP(?)TOPS LABEL WORDSTACK ENDSCODE1 SEGMENTASSUME CS:CODE1, DS:DATA, SS:STACKMAIN PROCDSEG SEGMENTTABLE DB 40H,06H,5BH,4FH,66H,6DH,7DH,07H DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEGMOV DS,AXMOV AL,82HMOV DX,9003HLEA BX,TABLEOUT DX,ALMOV DX,8004HMOV AX,0000HMOV SI,AXMOV AL,[BX+SI]OUT DX,ALMOV AL,02HMOV DX,8002HOUT DX,ALMOV AL,0FFHMOV DX,9003HOUT DX,ALMOV AL,00HMOV DX,9003HOUT DX,AL;---------------------------- MOV CX, 500L1: MOV DX,8004HMOV AX,0005HMOV SI,AXMOV AL,[BX+SI]OUT DX,ALMOV AL,01HMOV DX,8002HOUT DX,ALCALL DELAYMOV DX,8004HMOV AX,0000HMOV SI,AXMOV AL,[BX+SI]OUT DX,ALMOV AL,02HMOV DX,8002HOUT DX,ALCALL DELAYLOOP L1MOV DX,8004H MOV AL,00HOUT DX,ALMOV AL,00HMOV DX,8002H OUT DX,AL DELAY PROCPUSH BXPUSH CXMOV BL,1 NEXT: MOV CX,1167 W10MS: LOOP W10MSDEC BLJNZ NEXTMOV DX,8004H MOV AL,00HOUT DX,ALMOV AL,00HMOV DX,8002H OUT DX,ALPOP CXPOP BX RETDELAY ENDPCSEG ENDSEND START五、设计体会在以前没有这方面锻炼的我,当知道要做课程设计的时候心里面感觉有些害怕和担心,担心自己不会或者做不好。

相关主题