东南大学吴健雄学院微机专业课程设计电梯控制器_第1页
东南大学吴健雄学院微机专业课程设计电梯控制器_第2页
东南大学吴健雄学院微机专业课程设计电梯控制器_第3页
东南大学吴健雄学院微机专业课程设计电梯控制器_第4页
东南大学吴健雄学院微机专业课程设计电梯控制器_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

东南大学吴健雄学院《微机试验及课程设计》课程设计汇报FBIWarning:汇编代码是好几届之前一个学姐,我只是修改了一下.修改后完美运行汇报是我自己写转载不需要注明出处,就说是你写姓名:学号:专业:吴健雄学院实验室:计算机硬件试验室组别:同组人员:设计时间:年5月17日——年6月6日评定成绩:审阅老师:目录一.课程设计目标和要求……………………2二.方案论证和原理设计………………………3三.具体(机理)设计………………………3四.方案实现和测试(或调试)……………6五.分析和总结………………7一.课程设计目标和要求设计目标:微机课程综合设计用于检验和提升学生在原理和接口综合应用方面分析问题和处理问题能力,同时也给学生提供更多、愈加好训练机会,课程给出了10道微机硬件应用综合测试题。为完成每道测试题,最少需要选择TPC微机试验装置中三部分以上硬件电路(还需将它们有机组合起来)并编制对应应用。经过试验还能够让学生愈加好了解所学知识在实际控制中利用,增加对本专业认识和学习爱好。设计要求:1)设计基础要求用键盘、按钮、八段码和LED模拟电梯工作过程。楼层设为8层,键盘数字键1~8用来键入期望停楼层,8个LED显示期望停楼层,2位八段码指示电梯目前所在楼层,按钮用来启、停电梯。电梯正常运行时以每2秒1层速度上升或下降。要求“电梯”能按以下方法运行:(1)设目前电梯停在某层(2位八段码显示对应楼层,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)深入设计要求除运行按钮外,再设计多个按钮,模拟更多电梯运行功效,如:同时在8*8点阵显示器显示上升和下降箭头,当停止时显示目前所在楼层号.直达按钮。若按此按钮,电梯按直达方法运行,即对运行期间新键入停靠楼层(即使是同方向未到楼层)亦不停,直达终点楼层;急停按钮。电梯运行中,若按此按钮,则电梯立即停在下一抵达楼层;eq\o\ac(○,4)断电待修按钮。按下该钮电梯不能工作,再按一下才能重新工作;eq\o\ac(○,5)设置急停开关(K0-K7至一),引入中止处理,立即响应,就近停靠;分工情况:我跟XXX一组,我关键负责程序框架构建和大部分代码编写,XXX负责其它程序编写和硬件连接等工作。二.方案论证和原理设计我们在成熟考虑程序整体要求和框架后,决定把程序总共分为四个模块,分别为电梯运行模块,电梯接收请求判定模块,显示模块,计时模块。电梯运行模块是整个程序主模块,其关键功效就是判定电梯运行方向和停靠所要去楼层优先次序。电梯接收请求判定模块关键是应急停,直达,等候维修等命令。计时模块用于对系统每二秒停一楼层计数。显示模块则包含所要到楼层显示和运行过程中所到楼层实时显示。有8个楼层,需要用8个按键模拟电梯中请求按钮;当电梯静止状态时,不管外部哪一层有请求,电梯全部由静止状态转入向上或向下运行状态,直到抵达请求楼层;当电梯处于向上运行状态时,此时高于该楼层向上请求和内部请求等级最高,其次是全部楼层向下请求,再次是低于该楼层向上请求;当电梯处于向下运行状态时则情况相反;因为中止等级在伴随电梯所处楼层不一样而改变,而且中止源比较多。所以用每一个中止源直接和中止控制器相连,需要用到多个8259A级联,很不方便。为处理这个问题,首先定义三个单字节变量REQ_U、REQ_D和REQ_IN分别存放电梯每一层向上、向下和内部请求,每一位代表一层。比如,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值显示电梯内已经请求楼层。关键模块以下:1.可编程定时/计数器8253定时/计数器8253关键是用于定时20ms,触发中止进行键盘扫描。电路连线是CLOCK0接Q6,分频后频率为46875Hz,OUT0接中止IRQ2,每20ms中止一次,GATE0接5v。计数器初值应该是3A9H;2.8255并行接口单元 8255关键是用于数码管和发光二极管数据输出。所以用8255B口8接8个发光二极管,A口接数码管数据端。3LED点阵显示 因为提升要求需要显示上下箭头,所以使用8*8点阵显示箭头。4微机控制器 程序在微机上运行,经过总线控制试验箱上各部件运行。三.具体(机理)设计1)软件步骤图(总步骤图)本设计软件设计思绪:经过软件编程使8253输出定时信号申请中止,在中止服务程序中扫描键盘,假如有按键,修改对应变量位,并输出内部请求变量REQ_IN到发光二极管显示目前内部请求楼层。在主程序中,查询变量值,依据电梯调度算法运行电梯。图表SEQ图表\*ARABIC1电梯系统总步骤图2)电梯控制算法模块逻辑实现:当电梯向上运行时:

在目前层以下向上请求全部被忽略留到下次向上运行时处理。

在目前层以上向上请求全部被统计留到此次运行处理。不管哪层向下请求全部被忽略留到下次向下运行时处理。

当电梯向下运行时:

在目前层以上向下请求全部被忽略留到下次向下运行时处理。

在目前层以下向下请求全部被统计留到此次运行处理。

不管哪层向上请求全部被忽略留到下次向上运行时处理。算法实现:dir代表电梯运行方向,0代表电梯向上运行,1代表向下运动。设REQ_U(n)代表第n层向上请求,一样,REQ_D(n)代表第n层向下请求,REQ_IN(n)代表第n层内部请求。求next方法为:电梯向上时,next为内部请求最小值和向上请求大于floor最小值之间小者。电梯向下时,next为内部请求最大值和向下请求中小于floor最大值之间大者。没有满足要求时返回0。图表SEQ图表\*ARABIC2电梯控制算法步骤图3)LED显示程序:本设计只用到了一个LED,只要将floor转换为对应段码。先输出位码,再输出段码,循环输出就能够动态显示。为了循环显示,将LED显示程序放在中止服务程序中。(将“楼层”作偏移码,利用XLAT,很简单就能够实现译码)图表SEQ图表\*ARABIC3电梯按键、显示中止步骤图 VCC4)硬件连接图VCC280H28bH1MHz/CS PA0-7 PB0-7PC0 8255/CSCLK0280H28bH1MHz/CS PA0-7 PB0-7PC0 8255/CSCLK0GATE0 OUT0 CLK1GATE1 OUT1 8253八段码数码管八段码数码管LEDLED小灯急停开关急停开关四.方案实现和测试(或调试)首先依据设计思绪,选择采取8253和8255芯片,规避了使用较为复杂中止。然后调试硬件,确定位选、芯片等工作正常。这能够经过手动输入控制字,进行简单输入输出实现。然后确定8253、8255芯片地址,开始软件编程。 软件编程首先完成整体逻辑框架,然后具体编写子程序。刚开始时采取软件延时,优先调试8255。采取8255A、B口0方法,A、B口改变将反应在八段码和LED灯上。子程序编写立即设计好算法转换为程序流,用程序流方向实现选择,用调用子程序实现具体操作。然后加入8253硬件延时,将OUT1连至PC0,经过不停查询PC0口状态进行延时。因为前面8255已经调好,所以8253调试比较顺利。 最终将全部硬件连线接好,进行整机联调。当中发觉很多问题,首先利用示波器排除硬件故障,再回过头来对软件进行单步,这时因为有现象,进行软件调试时候也更有针对性。经过设置断点,逐步跟踪寄存器值,经过几次修改以后,成功实现了预定方案。因为数码管和LED灯显示全部是采取查表法,依据输入字符ASCII码查表得到输出,有时出现LED不正常亮灭现象,是在查表时犯错,比如没有减去31H,就会使灯显示杂乱无章。实物连接图:五.分析和总结1)设计要求每次电梯开关时间为2秒,而一开始我们无法确保正确时间。以后经过讨论后发觉能够用8253计数器达成此功效,我们翻阅书籍后分别用方法3和方法0实现了正确2秒要求。2)编程中碰到大多是逻辑问题.另一个常常碰到问题就是跳转语句超出范围错误,这个错误处理是经过改变语句次序,如实在无法经过改变次序来消除错误,则经过二次跳转,即跳过中间过程再跳至目标。3)我们写电梯程序,d意义为目前楼层,当输入要去楼层bl时,判定bl和cl大小关系,假设bl>cl,则程序先把cl加1,再延时两秒,再比较bl和cl大小是否相等,假如相等则跳出,不等则把cl加1,再延时,再判定。4)当在上行过程中再输入另一个想去楼层ch时,则跳转至ch处理过程。因为是在延时前就把cl加1了,所以在这上行两秒内,cl已经上了一层了。所以就必需判定ch和bl是否和此时cl相等,如相等则在立即抵达这一层停。因为一开始我们来判定bl和cl是否相等,造成假如在立即到bl层时候按下ch则会使cl不停增大,即ASCII码不停增大,又返回至0,又增大至bl才停止。5)另外一个问题就是8个LED显示要去哪个楼层问题。我们是用数据DD0—DD7接到74LS273输出。bl,ch同时要被显示。我们于是就把bl,ch0,1,2,3,…..8分别对应于0B,1B,10B,………10000000B,然后把二者相加就能显示了。假如抵达bl则把bl赋为0,则对应灯灭。假如抵达ch,则把ch赋为0,则ch对应楼层灯灭。现在假如输入ch等于bl,按要求是对应灯亮,到该层停,而实际上变成上一层灯亮,因为ch和bl对应二进制相加,产生进位。处理方法是,假如bl,ch相等,则先把cl复位为0,然后再调用LED显示。6)电梯这个题目标特点就是状态多,多种大小循环相互嵌套,极难写代码。不过,因为每一层代码全部是相同,在调试出某一层以后,其它七层代码也很好写。在设计过程中我们碰到了很多问题,而汇编语言本身不是像高级语言一样直观和简练,刚开始走了不少弯路,但不停调试和查资料以后感觉好多了,程序编写速度也大大加紧了。试验过程中,我不停翻书,巩固了上课没听懂知识,加深了对各个芯片直观印象,也培养了细心试验能力。参考书目:杨素行等,《微型计算机系统原理及应用》,北京,清华大学出版社,东南大学微机系统和接口课程组,《微机试验及课程设计教程试用版3.0》,南京,东南大学出版社,附录.代码程序datasegmentioport equ0ec00h-0280hio8253a equioport+280h;0计数端口计数为10000,方法3io8253b equioport+281h;1计数端口计数为200,方法0io8253c equioport+283h;8253控制端;shangmianshi8253io8255a equioport+288h;8255控制端和a,b,c端口地址io8255b equioport+289hio8255c equioport+28ahio8255 equioport+28bhproth equioport+290h;点阵灯显示,行阵protlr equioport+298h;点阵灯显示,列阵number db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;七段码min db00h,01h,02h,03h,04h,05h,06h,07h;点阵行;buff1 db10h,30h,7fh,0ffh,0ffh,7fh,30h,10h;向上箭头buff1 db10h,20h,40h,0ffh,0ffh,40h,20h,10h;buff2 db08h,0ch,0feh,0ffh,0ffh,0feh,0ch,08h;向下箭头buff2 db08h,04h,02h,0ffh,0ffh,02h,04h,08hbuff3 db00h,00h,00h,00h,00h,00h,00h,00hmenu db'************************************************',0DH,0AH db'*DianTiKongZhiQi---elevator*',0Dh,0Ah db'*61010207JiaXiawen *',0DH,0AH db'*61010317YuHailei*',0Dh,0Ah db'************************************************',0Dh,0Ah db'inputanumbertogotothecorrespondinglevel',0DH,0AH db'esc----------exit',0DH,0AH db'enter--------go',0DH,0AH db'z------------godirectly',0Dh,0Ah db'x------------quickstop',0Dh,0Ah db'c------------waitingforfixing',0Dh,0Ah db '280H----8253CS',0Dh,0Ah db'1MHz----8253_clk0',0Dh,0Ah db'VCC----8253_gate0',0Dh,0Ah db '8253_clk1----8253_out0',0Dh,0Ah db '8253_gate1----K0',0Dh,0Ah db '8253_out1----8255_PC0',0Dh,0Ah db '28bH----8255_cs',0Dh,0Ah db 'PA0~7----SHUMAGUAN',0Dh,0Ah db 'PB0~7----led0~7',0Dh,0Ah db'MOVE!',0Dh,0Ah,'$'dataendsstackssegmentstack db100dup(?)stacksendscodesegmentassume cs:code,ds:data,ss:stacksstart: movax,data;初始化movds,ax movdx,offsetmenu;打印菜单,说明硬件电路连接等 movah,09 int21hmovdx,io8255;8255初始化,a、b输出,c口输入moval,89houtdx,almovbl,31h;bl代表目前电梯所在楼层,初始值设为1main:moval,0callshownumber;显示目前楼层movcl,0;cl为第一次输入要去楼层movch,0;ch为在中途中再次输入要去楼层callshowledmovah,01;经过键盘输入第一次要去得楼层clint21hcmpal,1bh;是esc则退出jeexitcmpal,31h;键入数字是否在1-8之间,如不是重新输入jlmaincmpal,38h;跟8比较,假如比8大,则循环输入jgmainmovcl,alcallshowled;8个led灯显示cl对应楼层cmpcl,bl;cl和bl比较jemain;相等则返回重新输入jgup;大于则向上运行 jltodown;小于则向下运行exit:movah,4chint21h;---------------------------------------------------------------------------------电梯上行up: calljudge;电梯上行情况up1:addbl,1callupdelay;调用向上运行延时子程序,出现向上箭头callshownumber;调用显示子程序,经过数码管显示目前楼层blcmpbl,cl;bl,cl不等则继续jemain;相等则返回 jmpup1upgetch:movah,1;在上升过程中假如有其它键按下时int21h cmpal,78h;判定是否为急停键x jejit cmpal,63h;判定是否为断电待修键c jeduandiancmpal,31h;数字是否在1-8之间如不是继续上行jlgotoupcmpal,38hjggotoupmovch,al callshowledcalldelayupcallshownumbercalljudgeequ;判定目前楼层和第一次要去楼层是否相同cmpch,bl;比较ch和bl区分jeloucengxiangdeng;相等则在该层停,等候运行信号输入jlxianshanghouxia;ch小于bl则先上行至cl在下行至chcmpch,cl;ch大于bl则在判定ch和cl大小关系jexiangdengup;相等则一直上行至cljlsameup;ch大于bl小于cl则先上行到ch在上行到cljgtosameup2;ch大于cl则先上行到cl在上行到chgotoup:calldelayupjmpup1duandian: moval,0;上升时碰到了断电情况,则等候键入,除非再次键入为c才继续运行 movah,7 int21h cmpal,63h jneduandian calldelayup callshownumber jmpup1jit: calldelayup;上升时碰到了急停情况,则停在下一层,然后回到main callshownumber jmpmaintodown:jmpdownupdelayprocnear;向上运行延时子程序calldelayfirst;用于初始化8253pushdx callcleardots;调用使其能够清零updelay1:calldotsup;循环调用向上箭头显示 movah,1;键盘是否有输入int16hjneupgetch;如有则跳转到输入处理movdx,io8255c;8255c口输入,看2s延时是否结束inal,dxandal,01;是否计时结束jzupdelay1popdxretupdelayendptomain:jmpmaintosameup2:jmpsameup2;---------------------------------------------------------------------------------上行中碰到多种情况列举loucengxiangdeng:callshownumber;第二次要去得楼层和目前楼层相同,直接停在该层movch,0callshowledcallstop2callupcljmpmainxianshanghouxia:callshowled;先上行到cl再下行到chcallupclmovcl,0callshowledcallstop2 calldownchjmpmainxiangdengup:movch,0;二次要去楼层和第一次要去相同,直接上行到第一次要取得楼层 callshowled callupcl jmpmainsameup:callshowled;同方向楼层,先上行到ch再上行到clcallupchmovch,0callshowledcallstop2 callupcljmpmainsameup2:callshowled;同方向楼层,先上行到cl再上行到ch;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;------------------------callupclmovcl,0callshowled callstop2 callupchjmpmainjittt: jmpjit;----------------------------------------------------------电梯下行,和电梯上行情况基础类似,稍作修改即可down: calljudgedown1: subbl,1calldowndelaycallshownumber cmpbl,cl jetomainjmpdown1downgetch:movah,1 int21h cmpal,78h jejit1 cmpal,63h jeduandian1 cmpal,31h jlgotodown cmpal,38h jggotodown movch,al callshowled calldelaydown callshownumber calljudgeequ cmpch,bl jestopdowncl jgdownclupch;ch大于bl则先下行至cl在上行至ch cmpch,cl;ch小于bl则在判定ch和cl大小关系 jejmpdowncl;相等则一直下行至cl jldowncldownch;ch小于bl小于cl则先下行到cl在下行到ch jgtodownchdowncl;ch大于cl则先下行到ch在下行到clgotodown:calldelaydown jmpdown1duandian1: moval,0;下降碰到了断电情况,则等候键入,除非再次键入为c才继续运行 movah,7 int21h cmpal,63h jneduandian1 calldelaydown callshownumber jmpdown1jit1: calldelaydown;下降时碰到了急停情况,则停在下一层,然后回到main callshownumber jmpmaindowndelayprocnear;向下运行延时子程序,和向上运行延时子程序大致相同calldelayfirst pushdx callcleardots;调用使其能够清零ddy: calldotsdown;循环调用向下箭头显示 movah,1 int16h jnedowngetchmovdx,io8255cinal,dx andal,01 jzddy popdx retdowndelayendptodownchdowncl:jmpdownchdowncl;---------------------------------------------------------------------------------下行中碰到多种情况列举stopdowncl:callshowled movch,0 callshowled callstop2 calldowncl jmpmaindownclupch:callshowled calldowncl movcl,0 callshowled callstop2 callupch jmpmainjmpdowncl:movch,0 callshowled calldowncl jmpmaindowncldownch:callshowled calldowncl movcl,0 callshowled callstop2 calldownch jmpmaindownchdowncl:callshowled calldownch movch,0 callshowled callstop2 calldowncl jmpmain;--------------------------------------------------------------------电梯上、下行中碰到多种情况处理方法jitt: jmpjitttjudgeequprocnear;判定目前楼层和第一次要去楼层关系cmpcl,bljnebackcmpcl,ch jeclequch movcl,0 callshownumbercallshowledcallstop2 cmpch,bljgupchhere jldownchhereupchhere:callupchjmpmaindownchhere:calldownchjmpmainclequch:movch,0 callshowledcallonlydelay;jmpmainback:retjudgeequendpupclprocnear;上行到cl子程序upcl1:incbl calldirdelay1 callshownumber cmpbl,cl jlupcl1 retupclendpjitt1: jmpjit1upchprocnear;上行到ch子程序upch1:addbl,1 calldirdelay1 callshownumbercmpbl,ch jlupch1 retupchendpdownclprocnear;下行到cl子程序downcl1:subbl,1 calldirdelay2callshownumbercmpbl,cl jgdowncl1retdownclendpdownchprocnear;下行到ch子程序downch1:subbl,1calldirdelay2callshownumber cmpbl,chjgdownch1 retdownchendp;----------------------------------------------------------------------直接上下行时对按键情况处理stop2procnear;没有直达键暂停子程序gostop2:moval,0movah,1 int21h cmpal,13 jnegostop2 moval,0retstop2endpdirgetch1:movah,1;直接上行对按键处理int21h cmpal,63h jedirduandian1 cmpal,78h jejit21 jmpdirback1dirgetch2:movah,1;直接下行对按键处理int21h cmpal,63h jedirduandian2 cmpal,78h jejit22 jmpdirback2jit21: calldelayup; callshownumber jmpmainjit22: calldelaydown; callshownumber jmpmaindirduandian1:moval,0;直接上行时碰到了断电待修情况 movah,1 int21h cmpal,63h jnedirduandian1 calldelayup; callshownumberjmpdirback1dirduandian2:moval,0;直接下行时碰到了断电待修情况 movah,1 int21h cmpal,63h jnedirduandian2 calldelaydown; callshownumberjmpdirback2tojit: jmpjittdirdelay1procnear;直接上行延时子程序calldelayfirstpushdx callcleardotsdirback1:calldotsup; movah,1 int16h jnedirgetch1movdx,io8255cinal,dxandal,01jzdirback1popdxretdirdelay1endptojit1: jmpjitt1dirdelay2procnear;直接下行延时子程序calldelayfirstpushdx callcleardotsdirback2:calldotsdown; movah,1 int16h jnedirgetch2movdx,io8255cinal,dxandal,01jzdirback2popdxretdirdelay2endp;----------------------------------------------------------------------直达情况处理judgeprocnear;判定是否为直达键,假如是就直接抵达,假如为enter正常实施next1: moval,0 movah,1 int21h cmpal,7ah;是否为直达键 jezhida cmpal,13 jnenext1 moval,0 retjudgeendpzhida: cmpcl,bl jlzhidadown jgzhidaup jmpmainzhidadown:calldelaydown subbl,1 callzhidadelay2 callshownumber jmpzhidazhidaup:calldelayup addbl,1 callzhidadelay1 callshownumber jmpzhidazhidabutton1:movah,1;直达对按键情况处理,在上升时跳到此处 int21h cmpal,63h jezhidaduandian1 cmpal,78h jetojit jmpzhidazhidabutton2:movah,1;直达对按键情况处理,在下降时跳到此处 int21h cmpal,63h jezhidaduandian2 cmpal,78h jetojit1 jmpzhidazhidaduandian1:moval,0;上升时碰到断电待修时 movah,1 int21h cmpal,63h;;;;;;;;;;;;c jnezhidaduandian1 calldelayup; callshownumber jmpzhidazhidaduandian2:moval,0;下降时碰到断电待修时 movah,1 int21h cmpal,63h jnezhidaduandian2 calldelaydown; callshownumber jmpzhidazhidadelay1procnear;直达延时程序 calldelayfirst pushdx callcleardotsnext21: calldotsup; movah,1 int16h jnezhidabutton1 movdx,io8255c inal,dx andal,01 jznext21 popdx retzhidadelay1endpzhidadelay2procnear;直达延时程序 calldelayfirst pushdx callcleardotsnext22: calldotsdown; movah,1 int16h jnezhidabutton2 movdx,io8255c inal,dx andal,01 jznext22 popdx retzhidadelay2endp;------------------------------------------------------------------------------判定延时是否结束和8253初始化delayfirstprocnear;初始化8253子程序,两计数器连级,接入1MHZ脉冲,2s每次第二个out接pc0pushdx movdx,io8253c;8253计数器0置方法3moval,36houtdx,almovdx,io8253a;计数器0初始值为10000movax,10000outdx,almoval,ahoutdx,al movdx,io8253c;8253计数器1置方法0 moval,70h outdx,almovdx,io8253b;计数器1初始值为200 movax,200 outdx,al moval,ahoutdx,al popdx retdelayfirstendponlydelayprocnear;判定延时时是否结束子程序,注意因为点阵灯显示要写进循环中,所以分类,该延时仅用于延时 pushdxdelayx:movdx,io8255c inal,dx;查询8255Pc0是否为高电平 andal,01 jzdelayx popdx retonlydelayendpdelayupprocnear;判定上升延时是否结束子程序,包含了显示向上箭头部分 pushdx callcleardotsdelayy: calldotsup movdx,io8255c inal,dx;查询8255Pc0是否为高电平 andal,01 jzdelayy popdx retdelayupendpdelaydownprocnear;判定下降延时是否结束子程序,包含了显示向下箭头部分 pushdx callcleardotsdelayz: calldotsdown movdx,io8255c inal,dx;查询8255Pc0是否为高电平 andal,01 jzdelayz popdx retdelaydownendp;----------------------------------------------------------------------------------------------显示子程序cleardotsprocnear;用于对点阵显示清零,在第一次要循环前使用 pushdx pushax moval,00 movdx,protlr outdx,al popaxpopdxcleardotsendpdotsupprocnear;点阵箭头显示,向上箭头显示子程序 pushcx pushaxpushbx movcx,0008hmovsi,offsetminmovah,01movex:moval,[si] movbx,offsetbuff1 xlat;得到第一行码 movdx,proth outdx,al moval,ah movdx,protlroutdx,al;显示第一行红 shlah,01 incsi pushcx movcx,0ffffhdelayp:loopdelayp;延时 popcx loopmovex popbx popax popcx retdotsupendpdotsdownprocnear;点阵箭头显示,向下箭头显示子程序 pushcx pushaxpushbx movcx,0008h movsi,offsetminmovah,01movey: moval,[si] movbx,offsetbuff2 xlat;得到第一行码 movdx,proth outdx,al moval,ah movdx,protlr outdx,al;显示第一行红 shlah,01 incsi pushcx movcx,0ffffhdelayq:loo

温馨提示

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

评论

0/150

提交评论