




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理课程设计报告题 目: 模拟电梯 学生姓名: 骑蚂蚁去流浪 学 号: 2009170102XX 专业班级: 计算机科学与技术09102班 同组姓名: 指导教师: 杨红杰 设计时间: 2012年上学期第19周 指导老师意见:评定成绩: 签名: 日期: 年 月 日15目 录一、设计目的.1二、设计内容与要求. 1三、电梯的工作方式.1四、总体设计思路.2五、系统硬件电路设计.2六、软件设计.3七、出现问题及解决方案.5八、课程设计小结.6九、源程序.7一、设计目的1了解电梯调度算法及EL实验箱的使用。2利用微机实验系统来模拟电梯。3进一步掌握微机接口的设计方法。二、设计内容与要求1设计基本要求 用键盘、发光二极管和 LED显示单元来模拟电梯工作过程。楼层设为 8 层,用键盘键入希望停的楼层, 5 个 发光二极管显示希望停的楼层,LED指示电梯当前所在楼层,回车键用来启、停电梯。电梯正常运行时以每 2 秒层的速度上升或下降。 三、电梯的工作方式电梯工作按以下方式运行: 1假设当前电梯停在某层(LED显示相应楼层, 8个发光二极管全灭)。键入数字键,如键入的数字与当前电梯停靠层相同,则什么也不做,若不同则相应楼层的发光二极管亮;电梯自动判别上升或下降(在运行过程中用八段码来显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应 LED 灭)。 2假设当前电梯正在上升或下降运行(此时八段码显示楼层变化, LED 指示希望抵达的楼层),若键入新的希望停靠的楼层数字(相应的 LED 亮),则对同方向(上升或下降)未到的楼层能停靠,对其它情况则先停靠原先希望停的楼层,然后继续运行)。如下几例: 1) 设电梯当前在 2层,向上运行,LED指示希望在4层停,此时若键入3,则电梯将在3楼停,然后继续运行至4层停; 2) 同上情况,若键入的不是 3而是5,则电梯将先停在4层,然后运行至5层停; 3) 同上情况,若键入的不是 3(或5),而是1,则电梯先停在4层,然后运行至层停。 四、总体设计思路本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、LED显示器、八段数码管等模块。有8个楼层,需要用8个按键模拟电梯中的请求按钮,85个按键模拟8个楼层每层向上请求的按钮,再用8个模拟8个楼层每层向下请求的按钮。使用键盘数字键18表示电梯内部请求,非编码键盘中上面8个表示每个楼层向上的请求,下面的8个表示每个楼层向下的请求。当电梯静止状态时,无论外部哪一层有请求,电梯都由静止状态转入向上或向下运行的状态,直到到达请求的楼层;当电梯处于向上运行的状态时,此时高于该楼层向上的请求和内部请求级别最高,其次是所有楼层向下的请求,再次是低于该楼层向上的请求;当电梯处于向下运行的状态时则情况相反。由于中断级别在随着电梯所处楼层的不同而变化,而且中断源比较多。所以用每一个中断源直接和中断控制器相连,需要用到多个8259A级联,很不方便。为解决这个问题,首先定义三个单字节变量UPCALL、DOWNCALL和FLOORCALL分别存储电梯每一层向上、向下和内部的请求,每一个变量用8位,每一位代表一层。例如,UPCALL为 00000110B,这代表在2层和3层有向上的请求。8255定时器每隔20ms产生一次中断,中断程序便去执行扫描键盘,当扫描到有电梯内部或者外部按键时,将请求存储到变量中。每到一个状态时再检查请求变量UPCALL,DOWNCALL和FLOORCALL的值,根据电梯的运行方向和变量中的请求,来决定电梯下一步的运行。设电梯的当前楼层为CURRENT,运行方向为DIR(DIR=0,向上;DIR=1,向下),在电梯运行的工程中,用数码管输出CURRENT值显示当前的楼层。LED输出的值显示电梯内已经请求的楼层。五、系统硬件电路设计系统利用了微机平台上的8254定时/计数器、8255并行接口单元、LED单元、非编码键盘、数码管显示单元以及PC机内部的8259等等。系统结构框图,如图1所示。CLKINTR5V clk08254 GATE0OUT0 A口8255 B口 C口LED显示模块CS0CS1非编码键盘8个发光二极管片选图1 系统结构框图主要的模块如下:1可编程定时/计数器8254定时/计数器8254主要是用于定时20ms,触发中断进行键盘扫描。28255并行接口单元8255主要是用于键盘的扫描和发光二极管的数据输出。A口、B口输出,C口输入,方式0,A口8位接8段数码管数据线上,A口低四位接数码管位选线上(也是键盘列选线),B口8位接发光二极管,C口低四位接键盘行选线上3非编码键盘本系统采用的是行反转法来扫描键盘的,调用键盘扫描的程序TESTKEY后,程序中的变量KEY的值就是按下的键的值,如果KEY为0FFH则表示无键盘输入,为015 则按照上往下从左往右的顺序分别代表每一个按键按下的信息。不过此扫描程序没有考虑到多个按键同时按下的情况。又因为模拟电梯的按键一般不会有两个按键同时按下的情况,所以,多个按键的情况可以不予考虑。六、软件设计本设计的软件设计的思路:通过软件编程使8254输出定时信号申请中断,在中断服务程序中扫描键盘,如果有按键,修改相应的变量位,并输出内部请求变量FLOORCALL到发光二极管显示当前的内部请求楼层。在主程序中,查询变量的值,根据电梯调度算法运行电梯。1主要设计模块程序主要包括以下主要模块:键盘扫描程序、LED显示程序、电梯调度算法。1) 键盘扫描程序:采用的是行反转法来扫描键盘的2) LED显示程序:本设计只用到了一个LED,只要将floor转换为相应的段码。先输出位码,再输出段码,循环输出就可以动态显示。为了循环的显示,将LED显示程序放在中断服务程序中。相应的程序设计请参考实验指导书上实验3中的相关介绍。3) 电梯调度算法:在设计时将电梯一次从下到上视为一次运行(注意不一定从底层到顶层),同理,电梯一次从上到下也视为一次运行(注意不一定从顶层到底层)。 当电梯向上运行时: a) 位于当前层以下的向上请求都被忽略留到下次向上运行时处理。 b) 位于当前层以上的向上请求都被记录留到此次运行处理。 c) 无论哪层的向下请求都被忽略留到下次向下运行时处理。 当电梯向下运行时: a) 位于当前层以上的向下请求都被忽略留到下次向下运行时处理。 b) 位于当前层以下的向下请求都被记录留到此次运行处理。 c) 无论哪层的向上请求都被忽略留到下次向上运行时处理。2程序流程图 1)主程序框图如图2图2 主程序框图2)中断服务程序框图如图3 图3 中断服务程序框图3)电梯算法流程图如图4图4 电梯算法流程图七、出现问题及解决方案在本次课程设计中,出现了一系列的问题,首先,不能使四个数码管同时显示数字,这是因为数码管的位选线接在了8255的A口低四位,而这四位又用来显示数字,这样,在显示的时候是不能改变A口的数值,只能出现四个数码管不同时显示。另外,在中断扫描键盘的时候,数码管是不亮的,这是因为键盘识别时,首先要将键盘列选线也是用的8255的A口,扫描键盘的时候也就破坏了数码管的位选线,数码管没有选中,就不会显示。还有,在实现按下非编码键盘某个键则二极管相应灯亮时,应该出现的是只有一个灯亮,但结果出现了两个灯亮的情况,根据分析发现,我们使用了RCL指令来实现的,在左移时将CF也移了过去,而CF此时为1,就出现了这种状况,解决方法就是在这条指令前面加了一条CLC指令。最后,在使用8254计数器来产生中断时,clk接的是总线上的CLK,由于中断时数码管的灯不亮,所以很难观察电梯运行时的状态,我们觉得将CLK接到KK+上更容易观察。八 课程设计小结本次计算机微机原理课程设计维持了一周的时间,通过这次的课程设计,使通过编程模拟电梯的工作原理,并设计和实现它的模拟态,这也是对我这一学期的汇编语言的学习的检验,至此我对汇编的认识有了更深理解,切实的提高了我的编程能力通过这次课程设计,我对学过的知识有了更深层次的运用,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握了各个指令的功能,特别是转向指令,掌握了子程序的定义及调用。本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、LED显示器、八段数码管等模块。有8个楼层,需要用8个按键模拟电梯中的请求按钮,85个按键模拟8个楼层每层向上请求的按钮,再用8个模拟8个楼层每层向下请求的按钮。使用键盘数字键18表示电梯内部请求,非编码键盘中上面8个表示每个楼层向上的请求,下面的8个表示每个楼层向下的请求。当电梯静止状态时,无论外部哪一层有请求,电梯都由静止状态转入向上或向下运行的状态,直到到达请求的楼层;当电梯处于向上运行的状态时,此时高于该楼层向上的请求和内部请求级别最高,其次是所有楼层向下的请求,再次是低于该楼层向上的请求;当电梯处于向下运行的状态时则情况相反。 一周的课程设计使我的沟通能力有了提高,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识。同时,让我知道课程设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次课程设计使我明白了自己原来知识还比较欠缺。我才明白学习是一个长期积累和反复温习的过程,在以后的工作、生活中都应该不断的学习、温习,不要学了就忘。努力提高自己知识和综合素质。 我明白知识的重要性,以前学的知识总认为已经了解了,可真正用起来,才发现我是眼高手低。在设计中我动手能力得到了锻炼,以前的知识也得到了巩固,也培养了我独立学习工作的能力,树立了对自己学习工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。 九、源程序DATA SEGMENT INTR_IVADD EQU 01CCH ;INTR对应的中断矢量地址 INTR_OCW1 EQU 0A1H ;INTR对应PC机内部8259的OCW1地址 INTR_OCW2 EQU 0A0H ;INTR对应PC机内部8259的OCW2地址 INTR_IM EQU 0F7H ;INTR对应的中断屏蔽字 PCI_INTCSR EQU 9438H ;PCI卡中断控制寄存器地址 IOY0 EQU 9C00H ;片选IOY0对应的端口始地址 IOY1 EQU 9C40H MY8255_A EQU IOY0+00H*4 ;8255的A口地址 MY8255_B EQU IOY0+01H*4 ;8255的B口地址 MY8255_C EQU IOY0+02H*4 ;8255的C口地址 MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址 CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量 IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量 IM_BAK DB ? ;保存INTR原中断屏蔽字的变量 MY8254_COUNT0 EQU IOY1+00H*4 ;8254计数器0端口地址 MY8254_COUNT1 EQU IOY1+01H*4 ;8254计数器1端口地址 MY8254_COUNT2 EQU IOY1+02H*4 ;8254计数器2端口地址 MY8254_MODE EQU IOY1+03H*4 ;8254控制寄存器端口地址 LED DB 3FH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH;LED段码 UPCALL DB 0 DOWNCALL DB 0 FLOORCALL DB 0;用1字节8位数表示8个楼层的停靠请求状况,1代表有停靠请求,0代表无停靠请求 CURRENT DB 0;电梯当前所停的楼层 DIR DB 0;电梯当前的运行方向,0 = 上升,1 = 下降 COUNT DB 2 LEDCALL DB 0DH,0AH,# DISPLAYLED CALLED ,0DH,0AH,$ CURRENTCALL DB 0DH,0AH,# DISPLAYCURRENT CALLED ,0DH,0AH,$ OVERCALL DB 0DH,0AH,MYISR OVER CALLED,0DH,0AH,$ MYISRSTART DB 0DH,0AH,MYISR START CALLED,0DH,0AH,$ REACHEDCALL DB 0DH,0AH,ELEVATOR HAS REACHED,0DH,0AH,$DATA ENDSSTACK1 SEGMENT STACK DW 500 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA;段寄存器初始化 MOV DS,AX MOV DX,MY8255_MODE;初始化8255A a口,b口输出c口低4位输入方式0 MOV AL,10000001B OUT DX,AL CLI MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器 MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00H OUT DX,AX ADD DX,2 MOV AX,003FH OUT DX,AX MOV AX,0000H ;替换INTR的中断矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:DI MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址 MOV AX,OFFSET MYISR MOV ES:DI,AX ;设置当前中断处理程序入口偏移地址 ADD DI,2 MOV AX,ES:DI MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址 MOV AX,SEG MYISR MOV ES:DI,AX ;设置当前中断处理程序入口段地址 MOV DX,INTR_OCW1 ;设置中断屏蔽寄存器,打开INTR的屏蔽位 IN AL,DX MOV IM_BAK,AL ;保存INTR原中断屏蔽字 AND AL,INTR_IM OUT DX,AL STI MOV AL,10H ;初始化8254 MOV DX,MY8254_MODE OUT DX,AL MOV AL,01H MOV DX,MY8254_COUNT0 OUT DX,AL MOV CURRENT,31H;初始楼层为1层 CALL DISPLAYCURRENT;显示当前楼层 WAITFORGO:;停靠状态下等待输入 MOV AH,1 INT 16H JZ WAITFORGO;无按键则继续等待 CMP AL,CURRENT ;与当前停靠楼层相等的请求不必处理 JE WAITFORGOMOV AH,1 INT 21H CMP AL,1BH;是ESC则退出 JE EXIT CMP AL,13;是回车则启动电梯 JE JUDGEDIR JE WAITFORGO MOV CL,AL;处理当前请求,修改楼层请求变量 SUB CL,31H MOV BL,1 SHL BL,CL XOR FLOORCALL,BL CALL DISPLAYLED;LED显示当前呼叫状态 JMP WAITFORGO;返回继续输入 EXIT:;退出程序,返回DOS CLI MOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器 MOV AX,0000H OUT DX,AX MOV AX,0000H ;恢复INTR原中断矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址 MOV ES:DI,AX ADD DI,2 MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址 MOV ES:DI,AX MOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字 MOV AL,IM_BAK OUT DX,AL STIMOV AH,4CH;返回DOS INT 21H JUDGEDIR: ;根据当前楼层、当前运行方向与当前呼叫状态,判断电梯行进方向,具体参见实验报告 CMP FLOORCALL,0 JE NOINPUT MOV CL,CURRENT SUB CL,31H MOV BL,1 SHL BL,CL TEST FLOORCALL,BL JNZ REACH CMP CURRENT,31H JE CHANGEDIR0 CMP CURRENT,38H JE CHANGEDIR1 CMP DIR,0 JE TESTFLOORUP JMP TESTFLOORDOWN NOINPUT:;没有有效呼叫请求 JMP WAITFORGO;返回重新输入 REACH:;电梯到站 MOV DX,OFFSET REACHEDCALL MOV AH,9 INT 21HNOT BL AND FLOORCALL,BL;当前楼层请求置0 CALL DISPLAYLED;显示新的呼叫状态 JMP WAITFORGO;返回等待输入 CHANGEDIR0:;运行方向改为上行 MOV DIR,0 CALL PUTUPJMP GOUP CHANGEDIR1:;运行方向改为下行 MOV DIR,1 CALL PUTDOWN1JMP GODOWN TESTFLOORUP:;上行时的呼叫状态检查(具体见实验报告) ; MOV AL,UPCALL ; OR FLOORCALL,ALMOV AL,0 MOV BL,1 MOV CL,CURRENT SUB CL,30H LLL: ADD AL,BL SHL BL,1 LOOP LLL CMP FLOORCALL,AL JA GOUP MOV DIR,1 JMP GODOWN TESTFLOORDOWN:;下行时的呼叫状态检查(具体见实验报告) ; MOV AL,DOWNCALL ; OR FLOORCALL,ALMOV CL,8 MOV BL,CURRENT SUB BL,31H SUB CL,BL MOV AL,FLOORCALL SHL AL,CL CMP AL,0 JNE GODOWN MOV DIR,0 JMP GOUP GOUP:;上行过程 CALL DELAY;延时并接受输入 INC CURRENT;当前楼层+1 CALL DISPLAYCURRENT;显示当前楼层 JMP JUDGEDIR;返回判断方向 GODOWN:;下行过程(与上行类似) CALL DELAY DEC CURRENT CALL DISPLAYCURRENT JMP JUDGEDIR MYISR PROC NEAR ;中断处理程序MYISR MOV DX,OFFSET MYISRSTART MOV AH,9 INT 21H MOV DX,MY8254_COUNT0 ;重装计数初值 MOV AL,01H OUT DX,AL MOV BX,10HBEGIN: CALL CCSCAN JNZ GETKEY2 DEC BX CMP BX,00H JNZ BEGIN ;否则跳回开始继续循环 JZ OVERGETKEY2: MOV CH,0FEHMOV CL,00H ;设置当前检测的是第几列COLUM: MOV AL,CH ;选取一列,将X1X4中一个置0 MOV DX,MY8255_A OUT DX,AL MOV DX,MY8255_C ;读Y1Y4,用于判断是哪一行按键闭合 IN AL,DXL1:TEST AL,01H ;是否为第1行 JNZ L2 ;不是则继续判断 MOV AL,00H ;设置第1行第1列的对应的键值JMP KCODEL2:TEST AL,02H ;是否为第2行 JNZ L3 ;不是则继续判断 MOV AL,04H ;设置第2行第1列的对应的键值 JMP KCODEL3:TEST AL,04H ;是否为第3行 JNZ L4 ;不是则继续判断 MOV AL,08H ;设置第3行第1列的对应的键值JMP KCODEL4:TEST AL,08H ;是否为第4行 JNZ NEXT ;不是则继续判断 MOV AL,0CH ;设置第4行第1列的对应的键值KCODE: ADD AL,CL ;将第1列的值加上当前列数,确定按键值CALL PUTBUF ;保存按键值PUSH AXKON:;CALL DISPLAYLED ;显示刷新CALL CCSCAN ;扫描按键,判断按键是否弹起JNZ KON ;未弹起则继续循环等待弹起POP AXNEXT: INC CL ;当前检测的列数递增 MOV AL,CHTEST AL,08H ;检测是否扫描到第4列JZ OVER ;是则跳回到开始处 ROL AL,1 ;没检测到第4列则准备检测下一列MOV CH,ALJMP COLUM OVER: MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ;清PCI卡中断控制寄存器标志位 ADD DX,2 MOV AX,003FH OUT DX,AX MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL MOV DX,OFFSET OVERCALL MOV AH,9 INT 21H IRETMYISR ENDPDELAY PROC ;延时子程序,n送至DL MOV AL,10H ;初始化8254 MOV DX,MY8254_MODE OUT DX,AL MOV AL,01H MOV DX,MY8254_COUNT0 OUT DX,ALCOUNTING: MOV AH,1 INT 16H JZ ONEXT;无按键则检测计时是否完毕 MOV AH,1 INT 21H CMP AL,31H;屏蔽无效输入 JB ONEXT CMP AL,38H JA ONEXT MOV CL,AL;更新楼层呼叫状态 SUB CL,31H MOV BL,1 SHL BL,CL XOR FLOORCALL,BL CALL DISPLAYLED ONEXT: CALL DELAY1 DEC COUNTJZ COUNTING RET DELAY ENDPDELAY1 PROC ;延时子程序,n送至DL MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年凹凸世界考试试卷及答案
- 2025年安全生产考核考试及答案
- 2025汽车买卖定金合同范本
- 2025年学校线上考试试题及答案
- 木纹背景墙卧室施工方案
- 深水井施工方案及图纸
- 朔州智能景观灯施工方案
- 宝山区无机磨石施工方案
- 中国铁建重工集团股份有限公司招聘考试真题2024
- 沉浸式影院展厅施工方案
- 2025年高考真题-化学(湖南卷) 含答案
- 学堂在线 唐宋词鉴赏 期末考试答案
- 果树认领活动方案
- 第9课《天上有颗“南仁东星”》教学设计 2025-2026学年统编版八年级语文上册
- 2025年全球肿瘤发病率排名分析
- 心脑血管健康知识讲座
- 麻醉复苏室病人的护理查房
- 小学python竞赛试题及答案
- 下浮率合同协议
- 2025年自考《艺术概论》考试复习题库(含答案)
- 人工智能深度学习概念与应用测试卷
评论
0/150
提交评论