模拟电梯的设计与实现实验报告(微机原理)_第1页
模拟电梯的设计与实现实验报告(微机原理)_第2页
模拟电梯的设计与实现实验报告(微机原理)_第3页
模拟电梯的设计与实现实验报告(微机原理)_第4页
模拟电梯的设计与实现实验报告(微机原理)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2011年9月目录\l"_Toc234206563#_Toc234206563"一理论局部2\l"_Toc234206564#_Toc234206564"1课题要求与内容2\l"_Toc234206565#_Toc234206565"2系统方案设计3\l"_Toc234206566#_Toc234206566"3系统硬件设计3\l"_Toc234206567#_Toc234206567"4系统软件设计5\l"_Toc234206568#_Toc234206568"二实践局部5\l"_Toc234206569#_Toc234206569"1系统硬件原理简介6\l"_Toc234206570#_Toc234206570"2系统硬件调试中出现的问题及解决措施6\l"_Toc234206571#_Toc234206571"3系统软件6\l"_Toc234206572#_Toc234206572"3.1软件设计6\l"_Toc234206573#_Toc234206573"3.2软件调试中出现的问题及解决措施6\l"_Toc234206574#_Toc234206574"三附录10一、理论局部理论设计课题名称:模拟电梯的设计与实现1课题要求与内容1.1设计根本要求用键盘、按钮、发光二极管和LED显示单元来模拟电梯工作过程。楼层设为8层,用键盘键入希望停的楼层,8个发光二极管显示希望停的楼层,LED指示电梯当前所在楼层,按钮用来启、停电梯。电梯正常运行时以每2秒1层的速度上升或下降。并在到达相关楼层时发错声音提示。1.2提高要求设计几个按钮,模拟更多的电梯运行功能,如:直达按钮。假设按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层〔即使是同方向未到楼层〕亦不停,直达终点楼层;急停按钮。电梯运行中,假设按此按钮,那么电梯立即停在下一到达的楼层。2.实验内容电梯工作按以下方式运行:2.1假设当前电梯停在某层〔LED显示相应楼层,8个发光二极管全灭〕。键入数字键,如键入的数字与当前电梯停靠层相同,那么什么也不做,假设不同那么相应楼层的发光二极管亮;电梯自动判别上升或下降〔在运行过程中用八段码来显示楼层变化〕一直到达希望停的楼层〔八段码显示该楼层,相应LED灭〕。2.2假设当前电梯正在上升或下降运行〔此时八段码显示楼层变化,LED指示希望抵达的楼层〕,假设键入新的希望停靠的楼层数字〔相应的LED亮〕,那么对同方向〔上升或下降〕未到的楼层能停靠,对其它情况那么先停靠原先希望停的楼层,然后继续运行〕。如下几例:设电梯当前在2层,向上运行,LED指示希望在4层停,此时假设键入3,那么电梯将在3楼停,然后继续运行至4层停;同上情况,假设键入的不是3而是5,那么电梯将先停在4层,然后运行至5层停;同上情况,假设键入的不是3〔或5〕,而是1,那么电梯先停在4层,然后运行至1层停。2系统方案设计本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、LED显示器、八段数码管等模块。有8个楼层,需要用8个按键模拟电梯中的请求按钮,用5个按键模拟8个楼层每层向上请求的按钮,再用8个模拟8个楼层每层向下请求的按钮。非编码键盘有16个键,可以用1-8号键模拟电梯内的按钮,用8-0号键模拟每层向上请求的按纽,A-H模拟每层向下请求的按纽。当电梯静止状态时,无论外部哪一层有请求,电梯都由静止状态转入向上或向下运行的状态,直到到达请求的楼层;当电梯处于向上运行的状态时,此时高于该楼层向上的请求和内部请求级别最高,其次是所有楼层向下的请求,再次是低于该楼层向上的请求;当电梯处于向下运行的状态时那么情况相反。由于中断级别在随着电梯所处楼层的不同而变化,而且中断源比拟多。所以用每一个中断源直接和中断控制器相连,需要用到多个8259A级联,很不方便。为解决这个问题,首先定义三个单字节变量REQ_U、REQ_D和REQ_IN分别存储电梯每一层向上、向下和内部的请求,每一个变量用低8位,每一位代表一层。例如,REQ_U为00000110B,这代表在2层和3层有向上的请求。8253定时器每隔20ms产生一次中断,中断程序便去执行扫描键盘,当扫描到有电梯内部或者外部按键时,将请求存储到变量中。每到一个状态时再检查请求变量REQ_U、REQ_D和REQ_IN的值,根据电梯的运行方向和变量中的请求,来决定电梯下一步的运行。设电梯的当前楼层为floor〔floor=1~8〕,运行方向为dir〔dir=0,向上;dir=1,向下〕,在电梯运行的工程中,用数码管输出floor值显示当前的楼层。LED输出REQ_IN的值显示电梯内已经请求的楼层。3系统硬件的设计由于采用了PC机资源和微机实验平台,不需要其他的硬件电路。利用了微机平台上的8254定时/计数器、8255并行接口单元、LED单元、非编码键盘、数码管显示单元等等。系统结构框图,如图1所示。图1系统结构框图主要的模块如下:1.可编程定时/计数器8254定时/计数器8254主要是用于定时20ms,触发中断进行键盘扫描。电路连线是CLOCK0接Q6,分频后频率为46875Hz,OUT0接中断IRQ2,每20ms中断一次,GATE0接5v。计数器的初值应该是3A9H。2.8255并行接口单元 8255主要是用于键盘的扫描和发光二极管的数据输出。所以用8255A口的低8位接8个发光二极管,B口低4位接非编码键盘的列线,高4位接键盘的行线。3.LED显示系统虽然只用了1格LED显示器,但为了数字更新更方便,主程序更加简单,故此系统选用动态显示方式。由于系统的软件局部的运行时的核心程序是一直循环的,因此显示程序也是在循环过程中一直被调用,从而实时地被显示出来。4.非编码键盘本系统采用的是行反转法来扫描键盘的,调用键盘扫描的程序TESTKEY后,程序中的变量KEY的值就是按下的键的值,如果KEY为0FFH那么表示无键盘输入,为0~15那么按照上往下从左往右的顺序分别代表每一个按键按下的信息。不过此扫描程序没有考虑到多个按键同时按下的情况。又因为模拟电梯的按键一般不会有两个按键同时按下的情况,所以,多个按键的情况可以不予考虑。4系统软件设计本设计的软件设计的思路:通过软件编程使8254输出定时信号申请中断,在中断效劳程序中扫描键盘,如果有按键,修改相应的变量位,并输出内部请求变量REQ_IN到发光二极管显示当前的内部请求楼层。在主程序中,查询变量的值,根据电梯调度算法运行电梯。1.主要设计模块程序主要包括以下主要模块:键盘扫描程序、LED显示程序、电梯调度算法。键盘扫描程序:采用的是行反转法来扫描键盘的,相应的程序设计请参考实验指导书上实验3中的相关介绍。LED显示程序:本设计只用到了一个LED,只要将floor转换为相应的段码。先输出位码,再输出段码,循环输出就可以动态显示。为了循环的显示,将LED显示程序放在中断效劳程序中。电梯调度算法:在设计时将电梯一次从下到上视为一次运行〔注意不一定从底层到顶层〕,同理,电梯一次从上到下也视为一次运行〔注意不一定从顶层到底层〕。当电梯向上运行时:位于当前层以下的向上请求都被忽略留到下次向上运行时处理。位于当前层以上的向上请求都被记录留到此次运行处理。无论哪层的向下请求都被忽略留到下次向下运行时处理。当电梯向下运行时:位于当前层以上的向下请求都被忽略留到下次向下运行时处理。位于当前层以下的向下请求都被记录留到此次运行处理。无论哪层的向上请求都被忽略留到下次向上运行时处理。二实践局部1系统硬件原理简介8255可编程外围接口芯片8255有3个8为并行I/O口,8255有三通道3种工作方式的可编程并行接口芯片,其可以作为单片机与多种外围接口设备连接时的中间接口电路。8255作为主机与外围设备的芯片连接,必须提供与主机相连的3个总线接口:数据线、地址线、控制线接口。同时必须具有与外设连接的接口A\B\C口。其必须具有逻辑可控局部,8255内部的结构分为3个局部:与CPU连接局部、与外设连接局部、可口局部。(1)8254定时/计数器的性能:有3个独立的16位计数器;(2)每个计数器可二进制或十六进制计数;(3)每个可编程计数器有6种不同的工作方式(4)8254允许的最高的频率是10MHz,计数脉冲可以是有规律的时钟信号,也可是随机信号。2系统硬件调试中出现的问题及解决措施线路连接错误,无法实现预期功能,解决措施:仔细检查电路,查找错误并改正。在接线的时候8254的GATE0没有接5V电源,导致相关芯片无法工作,经细心排查,将错误找错并改正。有一次调试时试验箱的电源没开就运行软件关联进行调试,结果认为是某个芯片坏了,后来才发现时低级错误。解决措施:重启电脑,翻开试验箱电源,重新运行。另一次,8255的A口语8个发光二极管连接时端口的连接顺序不小心连反了,结果实现不了预期功能,经同学帮助排查才最终找到错误并将其改正过来。3系统软件西安唐都TD-CMA计算机组成原理与系统结构教学实验系统3.1软件设计程序流程图1〕主程序框图如图21〕主程序框图如图2图2主程序框图2〕中断效劳程序框图如图3图3中断效劳程序框图3〕电梯算法流程图如图4其中,dir代表电梯的运行方向,0代表电梯向上运行,1代表向下运动。设REQ_U(n)代表第n层向上的请求,同样,REQ_D(n)代表第n层向下的请求,REQ_IN(n)代表第n层内部的请求。求next的方法为:电梯向上时,next为内部请求的最小值和向上请求的大于floor的最小值之间的小者。电梯向下时,next为内部请求的最大值和向下请求中小于floor的最大值之间的大者。没有满足要求的时返回0。图4电梯算法流程图3.2软件调试中出现的问题及解决措施程序编写的时候,指令写错,导致软件调试出现问题,解决措施:认真阅读程序,把错误找出并改正。实验仪器的电源没翻开就开始运行程序,结果造成死机,解决措施:重新正确运行。相关参数设计错误导致流水灯与声音无法同时满足实验要求。解决措施:经过老师指出,发现是相关的指令与参数错误所致,经同学帮助,将其改正。三附录:参考程序清单INTR_IVADDEQU01C8H;INTR对应的中断矢量地址INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址INTR_IMEQU0FBH;INTR对应的中断屏蔽字IOY1EQU3040H;片选IOY0对应的端口始地址MY8254_COUNT0EQUIOY1+00H*4;8254计数器0端口地址MY8254_COUNT1EQUIOY1+01H*4;8254计数器1端口地址MY8254_COUNT2EQUIOY1+02H*4;8254计数器2端口地址MY8254_MODEEQUIOY1+03H*4;8254控制存放器端口地址IOY2EQU3080H;片选IOY0对应的端口始地址IOY0EQU3000H;片选IOY0对应的端口始地址MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制存放器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENT;DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDTABLEDB06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HNOW_FLOORDB01H-01H;定义数据变量DIRDB1TARGET_FLOORDB01H-01H;02H为初始层,出事情况当前层和目标层一样F_FLOORDB1;按键有效,空闲CS_BAKDW?;保存INTR原中断处理程序入口段地址的变量IP_BAKDW?;保存INTR原中断处理程序入口偏移地址的变量IM_BAKDB?;保存INTR原中断屏蔽字的变量STR1DB'COUNT:$';显示的字符串FREQ_LISTDW371,495,495,495,624,556,495,556,624;频率表DW495,495,624,742,833,833,833,742,624 DW624,495,556,495,556,624,495,416,416,371 DW495,833,742,624,624,495,556,495,556,833 DW742,624,624,742,833,990,742,624,624,495DW556,495,556,624,495,416,416,371,495,0TIME_LISTDB4,6,2,4,4,6,2,4,4;时间表 DB6,2,4,4,12,1,3,6,2 DB4,4,6,2,4,4,6,2,4,4 DB12,4,6,2,4,4,6,2,4,4DB6,2,4,4,12,4,6,2,4,4 DB6,2,4,4,6,2,4,4,12DATAENDS;键值表,0~F对应的7段数码管的段位值CODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX ;初始化中断处理 CLIMOVAX,0000H;替换INTR的中断矢量MOVES,AXMOVDI,INTR_IVADDMOVAX,ES:[DI]MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址MOVAX,OFFSETMYISRMOVES:[DI],AX;设置当前中断处理程序入口偏移地址ADDDI,2MOVAX,ES:[DI]MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址MOVAX,SEGMYISRMOVES:[DI],AX;设置当前中断处理程序入口段地址MOVDX,INTR_OCW1;设置中断屏蔽存放器,翻开INTR的屏蔽位INAL,DXMOVIM_BAK,AL;保存INTR原中断屏蔽字ANDAL,INTR_IMOUTDXSTI;初始化8254MOVDX,MY8254_MODE;初始化8254工作方式MOVAL,0B6H;计数器2,方式3OUTDXMOVDX,MY8254_COUNT2;装入计数初值MOVAL,00H;18432分频OUTDXMOVAL,48HOUTDXMOVDX,MY8254_MODE;初始化8254工作方式MOVAL,76H;计数器1,方式3OUTDXMOVDX,MY8254_COUNT1;装入计数初值MOVAL,0C8H;100分频OUTDXMOVAL,00HOUTDX;初始化8255MOVDX,MY8255_MODE;初始化8255工作方式MOVAL,81H;方式0,A口、B口输出,C口低4位输入 OUTDX MOVDX,IOY2;用IO-32输出控制8个LED,刚开始默认为全灭 MOVAL,0OUTDXMOVDX,MY8255_MODEMOVAL,00001110B;PC7=0OUTDXMOVAL,NOW_FLOORMOVBX,OFFSETDTABLE ANDAX,00FFH ADDBX,AX MOVAL,[BX];将键值作为偏移和键值基地址相加得到相应的键值MOVDX,MY8255_B OUTDXBEGIN: CALLCCSCAN;扫描按键 JNZPLAY;有键按下那么跳置GETKEY1MOVAH,1;判断PC键盘是否有按键按下INT16HJZBEGIN;无按键那么跳回继续循环,有那么退出 ;退出程序前的一个"太子换狸猫"QUIT:CLIMOVAX,0000H;恢复INTR原中断矢量MOVES,AXMOVDI,INTR_IVADDMOVAX,IP_BAK;恢复INTR原中断处理程序入口偏移地址MOVES:[DI],AXADDDI,2MOVAX,CS_BAK;恢复INTR原中断处理程序入口段地址MOVES:[DI],AXMOVDX,INTR_OCW1;恢复INTR原中断屏蔽存放器的屏蔽字MOVAL,IM_BAKOUTDXSTIMOVAX,4C00H;返回到DOSINT21HGETKEY1:CALLDALLYCALLDALLY CALLCCSCAN;再次扫描按键 JNZGETKEY2;有键按下那么跳置GETKEY2 JMPBEGIN;否那么跳回开始继续循环PLAY:MOVDX,MY8254_MODE;初始化8254工作方式MOVAL,36H;定时器0、方式3OUTDXMOVSI,OFFSETFREQ_LIST;装入频率表起始地址MOVDI,OFFSETTIME_LIST;装入时间表起始地址MOVDX,0FH;输入时钟为1.0416667MHz,1.0416667M=0FE502HMOVAX,0E502HDIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率MOVDX,MY8254_COUNT0OUTDX,AL;装入计数初值MOVAL,AHOUTDXMOVDL,[DI];取出演奏相对时间,调用延时子程序CALLDALLYADDSI,2INCDI;判断是否到曲末?JEGETKEY1GETKEY2:CALLDALLY1MOVDX,MY8254_MODE;退出时设置8254为方式2,OUT0置0MOVAL,10HOUTDXMOVCH,0FEH MOVCL,00H;设置当前检测的是第几列COLUM:MOVAL,CH;选取一列,将X1~X4中一个置0MOVDX,MY8255_A OUTDXMOVDX,MY8255_C;读Y1~Y4,用于判断是哪一行按键闭合 INAL,DXL1:TESTAL,01H;是否为第1行JNZL2;不是那么继续判断MOVAL,00H;设置第1行第1列的对应的键值 JMPKCODEL2:TESTAL,02H;是否为第2行JNZL3;不是那么继续判断MOVAL,04H;设置第2行第1列的对应的键值JMPKCODEL3:TESTAL,04H;是否为第3行JNZL4;不是那么继续判断MOVAL,08H;设置第3行第1列的对应的键值 JMPKCODEL4:TESTAL,08H;是否为第4行JNZNEXT;不是那么继续判断MOVAL,0CH;设置第4行第1列的对应的键值KCODE:ADDAL,CL;将第1列的值加上当前列数,确定按键值 CMPF_FLOOR,1 JNZKON2 CALLPUTBUF;保存按键值KON2: PUSHAXKON: CALLCCSCAN;扫描按键,判断按键是否弹起 JNZKON;未弹起那么继续循环等待弹起 POPAXNEXT:INCCL;当前检测的列数递增 MOVAL,CH TESTAL,08H;检测是否扫描到第4列JZKERR;是那么跳回到开始处ROLAL,1;没检测到第4列那么准备检测下一列 MOVCH,AL JMPCOLUMKERR:JMPBEGINMYISRPROCNEAR;中断处理程序MYISRPUSHAXMOVAL,DIRCMPAL,0JZDOWNCMPAL,2JZUPJMPOVERDOWN: MOVAL,NOW_FLOOR DECAL MOVNOW_FLOOR,ALMOVBX,OFFSETDTABLE ANDAX,00FFH ADDBX,AX MOVAL,[BX]MOVDX,MY8255_B OUTDX JMPBIJIAOUP: MOVAL,NOW_FLOOR INCAL MOVNOW_FLOOR,ALMOVBX,OFFSETDTABLE ANDAX,00FFH ADDBX,AX MOVAL,[BX]MOVDX,MY8255_B OUTDXBIJIAO:MOVAL,NOW_FLOORMOVAH,TARGET_FLOORCMPAH,ALJZGUANBIJMPOVERGUANBI: MOVDX,MY8255_MODEMOVAL,00001110B;PC7=0OUTDXMOVDIR,1HMOVAL,0MOVDX,IOY2;用IO-32输出控制8个LED,显示目标楼层OUTDXMOVF_FLOOR,1;置1,恢复按键有效MOVDX,MY8254_MODE;初始化8254工作方式MOVAL,36H;定时器0、方式3OUTDXMOVSI,OFFSETFREQ_LIST;装入频率表起始地址MOVDI,OFFSETTIME_LIST;装入时间表起始地址MOVDX,0FH;输入时钟为1.0416667MHz,1.0416667M=0FE502HMOVAX,0E502HDIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率MOVDX,MY8254_COUNT0OUTDX,AL;装入计数初值MOVAL,AHOUTDXMOVDL,[DI];取出演奏相对时间,调用延时子程序CALLDALLYADDSI,2INCDICALLDALLY1MOVDX,MY8254_MODE;退出时设置8254为方式2,OUT0置0MOVAL,10H

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论