📄 电梯终结者.asm
字号:
;///////////定义一些常用的符号常量,会便于修改咱们的程序////////////////////////
porta equ 0ff7ch
portb equ 0ff7dh
portc equ 0ff7eh
f01 equ p1^0
f02 equ p1^1
f03 equ p1^2
f04 equ p1^3
bi equ p1^4
ci equ p1^5
di equ p1^6
ai equ p1^7
upmin equ 34h
downmax equ 30h
downlight equ p3^5
uplight equ p3^4
up equ p3^1
down equ p3^0
help1 equ 41h
help2 equ 42h
help3 equ 38h
help4 equ 39h
help5 equ 40h
help6 equ 41h
help7 equ 42h
;//////////////////设置开始位置及其中断程序//////////////////////
org 0000h
jmp start
org 0003h
jmp interrupt1 ;外部中断
org 000bh
jmp interrupt2 ;定时器中断
;/////////////////////程序初始化,设定中断方式以及8255的模式////////////////////////////////////////
start:
;///////////定时器用到的寄存器赋初值///////
mov r5,#2
mov r0,#30h
mov r1,#34h
;//////////对与显示灯有关的两个地址设置初值/////////
mov a,#0
mov help6,a
mov help7,a
;//////////设定中断////////////////
setb ea ;允许中断
setb ex0 ;允许外部中断
clr ie1 ;清除中断标志位
setb it1 ; 下降沿有效
setb et0 ;允许计时器0中断
clr tf0 ;清除中断标志位
;/////////设定定时器//////////
mov a,#01h
mov tmod,a
mov a,#0f0h
mov tl0,a
mov a,#0d8h
mov th0,a
;///////设定P1口
mov a,#0fh
mov p1,a
;//////////设定8255/////////////
mov dptr, #0ff7fh
mov a,#82h
movx @dptr,a ;初始化8255
;//////让电梯回到一楼////////////
setb up
clr down
start_1_1: jnb f01,start_1_1 ;判断到没到一层 ,不到就一直下降
setb down
;///////////////////////////以下为主函数///////////////////////////////////////////
main:
setb tr0 ;定时器0 开始运行
;////////////////////////////////////上行 子程序/////////////////////////////////
runup: mov a,upmin
cjne a,#5,out9 ;有上行请求就跳转
jmp runup1 ;无上行请求就到RUNUP1,使电梯到达下降呼叫的最高处
out9:jmp runup2
runup1: ;///相应下行呼叫的上行程序
mov a,downmax
cjne a,#0,out4 ;若也没有下行请求,就转到下行子程序
setb down
clr up ;向上运行
setb uplight
clr tr0 ;临时让计时器不工作
jmp runup1_1
out4:jmp rundown
runup1_1:
cjne a,#1,runup1_2 ;
setb tr0 ;让计时器从新工作
jnb f01,runup
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^0
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^0
mov help7,a
pop acc
setb tr0
;//////////////
mov downmax,#0 ;消除这一层的请求
clr uplight
setb up
call delay3s
jmp rundown
runup1_2:
cjne a,#2,runup1_3 ;
setb tr0
jnb f02,runup
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^1
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^1
mov help7,a
pop acc
setb tr0
;//////////////
mov downmax,#0 ;消除这一层的请求
clr uplight
setb up
call delay3s
jmp rundown
runup1_3:
cjne a,#3,runup1_4 ;
setb tr0
jnb f03,out10
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^2
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^3
mov help7,a
pop acc
setb tr0
;//////////////
mov downmax,#0 ;消除这一层的请求
clr uplight
setb up
call delay3s
jmp rundown
out10: jmp runup
runup1_4:
setb tr0
jnb f04,out8
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^3
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^5
mov help7,a
pop acc
setb tr0
;//////////////
mov downmax,#0 ;消除这一层的请求
clr uplight
setb up
call delay3s
jmp rundown
out8: jmp runup
runup2:
setb uplight
setb down
clr up
clr tr0
runup2_1:
cjne a,#1,runup2_2 ;
setb tr0
jnb f01,out11
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^0
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^0
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin,#5 ;消除这一层的请求
clr uplight
setb up
call delay3s
out11: jmp runup
runup2_2:
cjne a,#2,runup2_3 ;
setb tr0
jnb f02,out6
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^1
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^1
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin,#5 ;消除这一层的请求
clr uplight
setb up
call delay3s
out6: jmp runup
runup2_3:
cjne a,#3,runup2_4 ;
setb tr0
jnb f03,out
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^2
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^3
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin,#5 ;消除这一层的请求
clr uplight
setb up
call delay3s
out: jmp runup
runup2_4:
setb tr0
jnb f04,out1
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^3
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^5
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin,#5 ;消除这一层的请求
clr uplight
setb up
call delay3s
out1: jmp runup
;///////////////////////下行子程序/////////////////////////////////////
rundown:
mov a,downmax
cjne a,#0,out13
jmp rundown1
out13:jmp rundown2
rundown1:
mov a,upmin
cjne a,#5,out5
setb downlight
setb up
clr down
clr tr0
jmp rundown1_1
out5:jmp runup
rundown1_1:
cjne a,#1,rundown1_2
setb tr0
jnb f01,rundown
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^0
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^0
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin,#5 ;消除这一层的请求
clr downlight
setb down
call delay3s
jmp runup
rundown1_2:
cjne a,#2,rundown1_3
setb tr0
jnb f02,rundown
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^1
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^2
mov help7,a
pop acc
setb tr0
;//////////////
clr downlight
mov upmin,#5 ;消除这一层的请求
setb down
call delay3s
jmp runup
rundown1_3:
cjne a,#3,rundown1_4
setb tr0
jnb f03,out14
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^2
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^4
mov help7,a
pop acc
setb tr0
;//////////////
clr downlight
mov upmin,#5 ;消除这一层的请求
setb down
call delay3s
jmp runup
out14: jmp rundown
rundown1_4:
setb tr0
jnb f04,out12
;//////////////
clr tr0
push acc
mov dptr,#portc
mov a,help6
clr acc^3
movx @dptr,a
mov help6,a
mov dptr,#portb
mov a,help7
clr acc^5
mov help7,a
pop acc
setb tr0
;//////////////
mov upmin, #5 ;消除这一层的请求
clr downlight
setb down
call delay3s
jmp runup
out12: jmp rundown
rundown2:
setb downlight
setb up
clr down
clr tr0
rundown2_1:
cjne a,#1,rundown2_2
setb tr0
jnb f01,out15
;//////////////
clr tr0
push acc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -