(汇编语言)电梯程序完整版

  • 格式:doc
  • 大小:106.50 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ioport equ 0cc00h-0280h

ls273a equ ioport+2a8h;74ls273芯片地址

ls273b equ ioport+2b0h

;ls273c equ ioport+2b8h

io8255a equ ioport+288h;8255控制端以及a,c端口地址

io8255b equ ioport+289h

io8255c equ ioport+28ah

io8255 equ ioport+28bh

io8253a equ ioport+280h;8253控制端以及0,1计数端口地址

io8253b equ ioport+281h

io8253c equ ioport+283h

led db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;七段码

MENU DB '

************************************************',0DH,0AH

DB ' * 电梯

*',0DH,0AH

db ' * 8255b--pb6~pb0--led6~led0 *',0Dh,0Ah

db ' * *',0Dh,0Ah

db ' * pa0~pa7-----a~g *',0Dh,0Ah

db ' * 8255CS~288H 8253cs~280h

ls273~2a8,2b0 *',0Dh,0Ah

db ' * 08006127 凌学梦

*',0Dh,0Ah

db '

************************************************',0Dh,0Ah

DB '1~8------1 ~ 8FLOOR!',0DH,0AH

DB 'P----------STOP!',0DH,0AH

DB 'V----------DIRECT ARRIVE!',0DH,0AH

DB 'ESC----------EXIT!',0DH,0AH

DB 'ENTER----------RUN!',0DH,0AH,'$'

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,offset menu

mov ah,09

int 21h

mov dx,io8255;8255初始化,a口输出,c口输入

mov al,89h

out dx,al

mov cl,31h;cl代表当前电梯所在楼层,初始值设为1

main: mov al,0

call disp;显示当前楼层

mov bl,0;bl为第一次输入的要去的楼层

mov ch,0;ch为在中途中再次输入的要去的楼层

call disp8led

mov ah,01;键盘输入bl

int 21h

cmp al,1bh;是esc则退出

je exit1

cmp al,31h;在1-8之间?如不是重新输入

jl main

cmp al,38h

jg main

mov bl,al

call disp8led;8led显示bl对应的楼层

cmp bl,cl;bl与cl比较

je main;相等则返回重新输入

jg up;大于则向上运行

jl down;小于则向下运行

up: call stop;调用暂停子程序

goup: add cl,1

call updelay;调用向上运行延时子程序

call disp;调用显示子程序,用于显示当前楼层cl

cmp cl,bl;cl,bl不等则继续

je main;相等则返回

jmp goup

exit1: jmp exit

tomain:jmp main

upgetch:mov ah,1;在上升过程中如在有按键则跳转此处

int 21h

cmp al,73h;s键断电待修,验收时改用开关改变8253门控信号实现该功能

je uprepair

cmp al,70h;p键急停键

je urgent

cmp al,31h;在1-8之间?如不是继续上行

jl gotoup

cmp al,38h

jg gotoup

mov ch,al

call disp8led;显示cl对应楼层led

call delay2;两秒计时时间到

call disp;显示当前楼层

call blequcl;判断bl与cl是否相等

cmp ch,cl;比较ch与cl的区别

je stopupbl;相等着在该层停,等待运行信号输入

jl upbldownch;ch小于cl则先上行至bl在下行至ch

cmp ch,bl;ch大于cl则在判断ch与bl的大小关系

je jmpupbl;相等则一直上行至bl

jl upchupbl;ch大于cl小于bl则先上行到ch在上行到bl jg toupblupch;ch大于bl则先上行到bl在上行到ch gotoup:call delay2

jmp goup

uprepair:mov al,0;验收时未用

mov ah,1

int 21h

cmp al,73h

jne uprepair

call delay2

call disp

jmp goup

urgent: call delay2;急停功能

call disp

jmp main

updelay proc near;向上运行延时子程序

call delay;用于初始化8253

push dx

ud: mov ah,1;键盘是否有输入

int 16h

jne upgetch;如有则跳转到输入处理

mov dx,io8255c;8255c口输入

in al,dx

and al,01;是否计时结束

jz ud

pop dx

ret

updelay endp

toupblupch:jmp upblupch

down: call stop;调用暂停子程序

godown: sub cl,1

call downdelay;调用向下运行延时子程序

call disp;调用显示子程序,用于显示当前楼层cl

cmp cl,bl;cl,bl不等则继续

je tomain;相等则返回

jmp godown

stopupbl:call disp

mov ch,0