微机原理实训报告_第1页
微机原理实训报告_第2页
微机原理实训报告_第3页
微机原理实训报告_第4页
微机原理实训报告_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE3实训报告书实训名称:微机原理及应用系(部):信息工程系专业班级:网络工程11-1班指导教师:张清菊许晋京完成日期:2013/12/山东科技大学泰山科技学院课题模拟电梯人员姓名(二组)王少强(1143020114)苏文斌(1143020112)任亚东(1143020109)商帅(1143020110)任务分工负责课题的软件设计及硬件连接设计:苏文斌(1143020112)负责课题流程图设计及课题代码编写:王少强(1143020114)负责课题的硬件连接及分析总结:任亚东(1143020109)商帅(1143020110)课题日期2013/12/9至201课题成绩指导教师评语

指导教师签名:_____________________年____月____日微机原理实训报告PAGE1目录……………装……订…………………线……………一、实训要求……………装……订…………………线……………1.1设计基本要求21.2进一步设计要求2二、实训内容21、电梯工作方式22、进一步设计要求2三、系统方案设计3四、系统硬件设计3五、系统软件设计4六、模块具体设计46.1键盘扫描程序46.2LED显示程序76.3电梯调度算法11七、电梯调度系统流程图12八、电梯调度程序代码13九、参考文献25模拟电梯实训要求1、设计基本要求用键盘、按钮、发光二极管和LED显示单元来模拟电梯工作过程。楼层设为8层,用键盘键入希望停的楼层,8个发光二极管显示希望停的楼层,LED指示电梯当前所在楼层,按钮用来启、停电梯。电梯正常运行时以每2秒1层的速度上升或下降。2、进一步设计要求 除运行按钮外,再设计几个按钮,模拟更多的电梯运行功能,如: (1)直达按钮。若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层; (2)急停按钮。电梯运行中,若按此按钮,则电梯立即停在下一到达的楼层; (3)断电待修按钮。按下该钮电梯不能工作,再按一下才能重新工作; (4)其它功能按钮(由设计者自由发挥)。二、实训内容1电梯工作按以下方式运行: (1)设当前电梯停在某层(八段码显示相应楼层,8个LED全灭)。键入1~8数字键,如键入的数字与当前电梯停层同,则什么亦不动作,若不同则相应楼层的LED亮;如再按运行键,则电梯自动判别上升或下降(在运行过程中八段码显示楼层变化)一直到达希望停的楼层(八段码显示该楼层,相应LED灭)。 (2)设当前电梯正在上升或下降运行(此时八段码显示楼层变化,LED指示希望抵达的楼层),若键入新的希望停的楼层数字(相应的LED亮),则对同方向(上升或下降)未到的楼层能停,对其它情况则先停原希望停的楼层,然后按运行键后继续运行)。如下几例: ①设电梯当前在2层,向上运行,LED指示希望在6层停,此时若键入4,则电梯将在4楼停,若再按运行键,则继续运行至6层停; ②同上情况,若键入的不是4而是8,则电梯将先停在6层,再按运行键,运行至8层停; ③同上情况,若键入的不是4(或8),而是1,则电梯先停在6层,再按运行键,运行至1层停。 2.进一步设计要求 除运行按钮外,再设计几个按钮,模拟更多的电梯运行功能,如: (1)直达按钮。若按此按钮,电梯按直达方式运行,即对运行期间新键入的停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层; (2)急停按钮。电梯运行中,若按此按钮,则电梯立即停在下一到达的楼层; (3)断电待修按钮。按下该钮电梯不能工作,再按一下才能重新工作; (4)其它功能按钮(由设计者自由发挥)。三、系统方案设计本设计主要是利用微机应用实验平台来模拟电梯的运行,用到了平台上的一个非编码键盘、LED显示器、八段数码管等模块。当电梯静止状态时,无论外部哪一层有请求,电梯都由静止状态转入向上或向下运行的状态,直到到达请求的楼层;当电梯处于向上运行的状态时,此时高于该楼层向上的请求和内部请求级别最高,其次是所有楼层向下的请求,再次是低于该楼层向上的请求;当电梯处于向下运行的状态时则情况相反。由于中断级别在随着电梯所处楼层的不同而变化,而且中断源比较多。所以用每一个中断源直接和中断控制器相连,需要用到多个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的值显示电梯内已经请求的楼层。四、系统硬件设计由于采用了PC机资源和微机实验平台,不需要其他的硬件电路。利用了微机平台上的8253定时/计数器、8255并行接口单元、8259可编程中断控制器、LED单元、非编码键盘、数码管显示单元等等。系统结构框图,如图1所示。Q6Q6IRQ25Vclk0GATE0OUT0A口8255B口C口LED显示模块CS0CS1CS2CS38个发光二极管非编码键盘片选图1系统结构框图五、系统软件设计本设计的软件设计的思路:通过软件编程使8253输出定时信号申请中断,在中断服务程序中扫描键盘,如果有按键,修改相应的变量位,并输出内部请求变量REQ_IN到发光二极管显示当前的内部请求楼层。在主程序中,查询变量的值,根据电梯调度算法运行电梯。程序主要包括以下主要模块:键盘扫描程序、LED显示程序、电梯调度算法。六、模块具体设计6.1键盘扫描程序1、8255并行接口单元利用8255可编程并行口做一个扫描键盘实验,把按键输入的键码,显示在由8279控制的8段数码管上。8255PA口做键盘输入线,PB口作扫描线。(1)8255实验原理图图28255实验原理图(2)8255芯片:8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。①与CPU连接部分:根据定义,8255能并行传送8位数据,所以其数据线为8根D0~D7。由于8255具有3个通道A、B、C,所以只要两根地址线就能寻址A、B、C口及控制寄存器,故地址线为两根A0~A1。此外CPU要对8255进行读、写与片选操作,所以控制线为片选、复位、读、写信号。各信号的引脚编号如下:数据总线DB:编号为D0~D7,用于8255与CPU传送8位数据。地址总线AB:编号为A0~A1,用于选择A、B、C口与控制寄存器。控制总线CB:片选信号、复位信号RST、写信号、读信号。当CPU要对8255进行读、写操作时,必须先向8255发片选信号选中8255芯片,然后发读信号或写信号对8255进行读或写数据的操作。②与外设接口部分:根据定义,8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。各通道的引脚编号如下:A口:编号为PA0~PA7,用于8255向外设输入输出8位并行数据。B口:编号为PB0~PB7,用于8255向外设输入输出8位并行数据。C口:编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。③控制器:8255将3个通道分为两组,即PA0~PA7与PC4~PC7组成A组,PB0~PB7与PC0~PC3组成B组。如图7.5所示,相应的控制器也分为A组控制器与B组控制器,各组控制器的作用如下:A组控制器:控制A口与上C口的输入与输出。B组控制器:控制B口与下C口的输入与输出。2.8279键盘扫描(1)实验原理图图38279实验原理图(2)8279是可编程的键盘、显示接口芯片。它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。该芯片能自动消抖并具有双键锁定保护功能。显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。3、8255与8279的程序流程图图48255与8279的程序流程图

6.2LED显示程序1.可编程定时/计数器8253(1)定时/计数器8253主要是用于定时每2秒1层,触发中断进行键盘扫描。电路连线是CLOCK0接Q6,分频后频率为46875Hz,OUT0接中断IRQ2,每2秒1层中断一次,GATE0接5v。计数器的初值应该是3A9H。编程将8253定时器0设定为方式3,定时器1设定在方式2,定时器2设定在方式2,定时器0输出作为定时器1的输入,定时器1的输出作为定时器2的输入,定时器2的输出接在一个LED上,运行后可观察到该LED在不停闪烁。(2)8253实验原理图图58253实验原理图(3)实验步骤1.根据实验原理图,连接实验箱上相关模块。①8253中GATE0、GATE1、GATE2接+5V。②CLK0接(12)模块的频率插孔(153.6KHZ),CLK1接OUT0,CLK2接OUT1。③8253的工作频率为0~2MHZ,所以输入的CLK频率必须在2MHZ以下。2.画出流程图图68253定时/计数器流程图3.8259中断系统与中断控制器(1)8259A只要向CPU发送了中断号就会将ISR中的相应位清零,也就是如果有中断来,芯片就会马上再向CPU发出中断请求,即使CPU正在处理IRQ0的中断,CPU并不知道谁的优先级高,它只会简单的响应8259A送来的中断(2)8259的实验原理图图78259实验原理图(3)8259中断服务程序框图图8中断服务程序框图4.LED显示系统虽然只用了1格LED显示器,但为了数字更新更方便,主程序更加简单,故此系统选用动态显示方式。由于系统的软件部分的运行时的核心程序是一直循环的,因此显示程序也是在循环过程中一直被调用,从而实时地被显示出来。(1)LED系统软件设计通过软件编程使8253输出定时信号申请中断,在中断服务程序中扫描键盘,如果有按键,修改相应的变量位,并输出内部请求变量REQ_IN到发光二极管显示当前的内部请求楼层。在主程序中,查询变量的值,根据电梯调度算法运行电梯。(2)LED显示程序只用到了一个LED,只要将floor转换为相应的段码。先输出位码,再输出段码,循环输出就可以动态显示。为了循环的显示,将LED显示程序放在中断服务程序中。6.3电梯调度算法1、主程序框图图9主程序框图2.、电梯算法其中,dir代表电梯的运行方向,0代表电梯向上运行,1代表向下运动。设REQ_U(n)代表第n层向上的请求,同样,REQ_D(n)代表第n层向下的请求,REQ_IN(n)代表第n层内部的请求。求next的方法为:电梯向上时,next为内部请求的最小值和向上请求的大于floor的最小值之间的小者。电梯向下时,next为内部请求的最大值和向下请求中小于floor的最大值之间的大者。没有满足要求的时返回0。 图10电梯算法流程图七.电梯调度系统流程图改变相应变量改变相应变量直达请求Floor变化Nowfloor=nextfloor?查询请求变量楼层请求运行请求急停请求到达下一楼层停止Floor变化Nowfloor=nextfloor?显示模块八、电梯调度程序代码dataSEGMENTioport EQU0c400h-0280hls273 EQUioport+2a8h;74ls273芯片地址io8255a EQUioport+288h;8255控制端以及a,c端口地址io8255b EQUioport+28bhio8255cEQUioport+28ahio8253aEQUioport+280h;8253控制端以及0,1计数端口地址io8253bEQUioport+281hio8253cEQUioport+283hled DB3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;八段码dataENDScodeSEGMENT ASSUMECS:code,DS:datastart: MOVAX,data MOVDS,AX MOVDX,io8255b;8255初始化,a口输出,c口输入 MOVAL,8bh OUTDX MOVCL,31h;cl代表当前电梯所在楼层,初始值设为1 main: MOVAL,0 CALLdisp;显示当前楼层 MOVBL,0;bl为第一次输入的要去的楼层 MOVCH,0;ch为在中途中再次输入的要去的楼层 CALLdisp8led MOVAH,01;键盘输入bl INT21h CMPAL,1bh;是esc则退出 JEexitexit: MOVAH,4ch INT21h CMPAL,31h;在1-8之间?如不是重新输入 JLmain CMPAL,38h JGmain MOVBL,AL CALLdisp8led;8led显示bl对应的楼层 CMPBL,CL;bl与cl比较 JEmain;相等则返回重新输入 JGup;大于则向上运行JLdown;小于则向下运行up: CALLstop;调用暂停子程序goup:ADDCL,1 CALLupdelay;调用向上运行延时子程序 CALLdisp;调用显示子程序,用于显示当前楼层cl CMPCL,BL;cl,bl不等则继续 JEmain;相等则返回 JMPgouptomain:JMPmainupgetch:MOVAH,1;在上升过程中如在有按键则跳转此处 INT21h CMPAL,73h;s键断电待修, JEuprepair CMPAL,70h;p键急停键 JEurgent CMPAL,31h;在1-8之间?如不是继续上行 JLgotoup CMPAL,38h JGgotoup MOVCH,AL CALLdisp8led;显示cl对应楼层led CALLdelay2;两秒计时时间到 CALLdisp;显示当前楼层 CALLblequcl;判断bl与cl是否相等 CMPCH,CL;比较ch与cl的区别 JEstopupbl;相等着在该层停,等待运行信号输入 JLupbldownch;ch小于cl则先上行至bl在下行至ch CMPCH,BL;ch大于cl则在判断ch与bl的大小关系 JEjmpupbl;相等则一直上行至bl JLupchupbl;ch大于cl小于bl则先上行到ch在上行到bl JGtoupblupch;ch大于bl则先上行到bl在上行到chgotoup:CALLdelay2 JMPgoup uprepair:MOVAL,0; MOVAH,1 INT21h CMPAL,73h JNEuprepair CALLdelay2 CALLdisp JMPgoupurgent: CALLdelay2;急停功能 CALLdisp JMPmainupdelayPROCNEAR;向上运行延时子程序 CALLdelay;用于初始化8253 PUSHDXud: MOVAH,1;键盘是否有输入 INT16h JNEupgetch;如有则跳转到输入处理 MOVDX,io8255c;8255c口输入 INAL,DX ANDAL,01;是否计时结束 JZud POPDX RETupdelayENDPtoupblupch:JMPupblupchdown: CALLstop;调用暂停子程序godown: SUBCL,1 CALLdowndelay;调用向下运行延时子程序 CALLdisp;调用显示子程序,用于显示当前楼层cl CMPCL,BL;cl,bl不等则继续 JEtomain;相等则返回 JMPgodownstopupbl:CALLdisp MOVCH,0 CALLdisp8led CALLstop2 CALLupbl JMPmainupbldownch:CALLdisp8led CALLupbl MOVBL,0 CALLdisp8led CALLstop2 CALLdownch JMPmainjmpupbl:MOVCH,0 CALLdisp8led CALLupbl JMPmainupchupbl:CALLdisp8led CALLupch MOVCH,0CALLdisp8ledCALLstop2 CALLupbl JMPmainupblupch:CALLdisp8led CALLupbl MOVBL,0 CALLdisp8led CALLstop2 CALLupch JMPmaindowndelayPROCNEAR;向下运行延时子程序,与向上运行延时子程序大体相同 CALLdelay PUSHDXff: MOVAH,1 INT16h JNEdowngetch MOVDX,io8255c INAL,DX ANDAL,01 JZff POPDX RETdowndelayENDPdowngetch:MOVAH,1;在下降过程中如在有按键则跳转此处 INT21h CMPAL,73h;s键断电待修 JEdownrepair CMPAL,70h;p键急停键 JEurgent2 CMPAL,31h;在1-8之间?如不是继续下降 JLgotodown CMPAL,38h JGgotodown MOVCH,AL CALLdisp8led;显示cl对应楼层led CALLdelay2;两秒计时时间到 CALLdisp;显示当前楼层 CALLblequcl;判断bl与cl是否相等 CMPCH,CL;比较ch与cl的区别 JEstopdownbl;相等着在该层停,等待运行信号输入JGdownblupch;ch大于cl则先下行至bl在上行至ch CMPCH,BL;ch小于cl则在判断ch与bl的大小关系 JEjmpdownbl;相等则一直下行至bl JLdownbldownch;ch小于cl小于bl则先下行到bl在下行到ch JGdownchdownbl;ch大于bl则先下行到ch在下行到blgotodown:CALLdelay2 JMPgodowndownrepair:MOVAL,0 MOVAH,1 INT21h CMPAL,73h JNEdownrepair CALLdelay2 CALLdisp JMPgodownstopdownbl:CALLdisp8led MOVCH,0 CALLdisp8led CALLstop2 CALLdownbl JMPmaindownblupch:CALLdisp8led CALLdownbl MOVBL,0 CALLdisp8led CALLstop2 CALLupch JMPmainurgent2:CALLdelay2;急停功能 CALLdisp JMPmainjmpdownbl:MOVCH,0 CALLdisp8led CALLdownbl JMPmaindownbldownch:CALLdisp8led CALLdownbl MOVBL,0 CALLdisp8led CALLstop2 CALLdownch JMPmaindownchdownbl:CALLdisp8led CALLdownchMOVCH,0 CALLdisp8led CALLstop2 CALLdownbl JMPmainvip: CMPBL,CL;直达功能 JLvipdown JGvipup JMPmainvipup: ADDCL,1 CALLvipdelay CALLdisp JMPvipvipdown:SUBCL,1 CALLvipdelay CALLdisp JMPvipvipgetch:MOVAH,1;直达过程中对急停以及断电待修的处理 INT21h CMPAL,73h JEviprepair CMPAL,70h JEurgent2 CALLdelay2 JMPvipviprepair:MOVAL,0 MOVAH,1 INT21h CMPAL,73h JNEviprepair CALLdelay2 CALLdisp JMPvipvipdelayPROCNEAR;直达的延时子程序 CALLdelay PUSHDXvd: MOVAH,1 INT16h JNEvipgetch MOVDX,io8255c INAL,DX ANDAL,01 JZvd POPDX RETvipdelayENDPstopPROCNEAR;暂停子程序,实现按回车继续和判断是否为直达键gostop: MOVAL,0 MOVAH,1 INT21h CMPAL,76h;是否为直达键 JEvip CMPAL,13;是否为运行键 JNEgostop MOVAL,0 RETstopENDPupblPROCNEAR;上行到bl的子程序upbl1: ADDCL,1 CALLdirdelay CALLdisp CMPCL,BL JLupbl1 RETupblENDPupchPROCNEAR;上行到ch的子程序upch1: ADDCL,1 CALLdirdelay CALLdisp CMPCL,CH JLupch1 RETupchENDPdownblPROCNEAR;下行到bl的子程序downbl1:SUBCL,1 CALLdirdelay CALLdisp CMPCL,BL JGdownbl1 RETdownblENDPdownchPROCNEAR;下行到ch的子程序downch1:SUBCL,1 CALLdirdelay CALLdisp CMPCL,CH JGdownch1 RETdownchENDPdelayPROCNEAR;初始化8253的子程序,两计数器连级 PUSHDXMOVDX,io8253c;8253的计数器0置方式3 MOVAL,36h OUTDX MOVDX,io8253a;计数器0初始值为10000 MOVAX,10000 OUTDX MOVAL,AH OUTDX MOVDX,io8253c;8253的计数器1置方式0 MOVAL,70h OUTDX MOVDX,io8253b;计数器1初始值为200 MOVAX,200 OUTDX MOVAL,AH OUTDX POPDX RETdelayENDPurgent3:CALLdelay2 CALLdisp JMPmainblequclPROCNEAR CMPBL,CL JNEback CMPBL,CH JEblequch MOVBL,0 CALLdisp CALLdisp8led CALLstop2 CMPCH,CL JGupchhere JLdownchhereupchhere:CALLupch JMPmaindownchhere:CALLdownch JMPmainblequch:MOVCH,0 CALLdisp8led CALLdelay2 JMPmainback: RETblequclENDPdirdelayPROCNEAR;直接上下行的延时子程序 CALLdelay PUSHDXdirback:MOVAH,1 INT16h JNEdirgetch MOVDX,io8255c INAL,DX ANDAL,01 JZdirback POPDX RETdirdelayENDPdirgetch:MOVAH,1;直接上下行对按键的处理 INT21h CMPAL,73h JEdirrepair CMPAL,70h JEurgent3 JMPdirbackdirrepair:MOVAL,0 MOVAH,1 INT21h CMPAL,73h JNEdirrepair CALLdelay2 CALLdisp JMPdirbackstop2PROCNEAR;没有直达键的暂停子程序gostop2:MOVAL,0 MOVAH,1 INT21h CMPAL,13 JNEgostop2 MOVAL,0 RETstop2ENDPdelay2PROCNEAR;判断延市时是否结束的子程序 PUSHDXdelay3: MOVDX,io8255c INAL,DX;查询8255的Pc0是否为高电平 ANDAL,01 JZdelay3POPDX RETdelay2ENDPdispPROCNEAR;显示当前楼层的子程序 MOVDL,CLMOVAH,2INT21h;用于在屏幕上显示 MOVDL,0dhMOVAH,2;回车符 INT21hMOVDL,0ahMOVAH,2;换行符 INT21h SUBCL,30h;八段码显示 MOVAL,CL PU

温馨提示

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

评论

0/150

提交评论