(汇编语言)电梯程序完整版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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