📄 电梯终结者.asm
字号:
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
;//////////////
clr downlight
mov downmax,#0 ;消除这一层的请求
setb down
call delay3s
out15: jmp rundown
rundown2_2:
cjne a,#2,rundown2_3
setb tr0
jnb f02,out7
;//////////////
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
;//////////////
mov downmax,#0 ;消除这一层的请求
clr downlight
setb down
call delay3s
out7: jmp rundown
rundown2_3:
cjne a,#3,rundown2_4
setb tr0
jnb f03,out3
;//////////////
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
;//////////////
mov downmax,#0 ;消除这一层的请求
clr downlight
setb down
call delay3s
out3: jmp rundown
rundown2_4:
setb tr0
jnb f04,out2
;//////////////
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 downlight
setb down
call delay3s
out2: jmp rundown
interrupt1:
;////////////判断楼层/////////////
jb p1^0,interrupt1_1
jb p1^1,interrupt1_2
jb p1^2,interrupt1_3
jb p1^3,interrupt1_4
;////////给予相应楼层的显示码,并且用help5把这一层数记录下来///////////
interrupt1_1:
push acc
setb ai
clr bi
clr ci
clr di
MOV HELP5,#1
pop acc
jmp interrupt1back
interrupt1_2:
MOV HELP5,#2
clr ai
setb bi
clr ci
clr di
jmp interrupt1back
interrupt1_3:
MOV HELP5,#3
setb ai
setb bi
clr ci
clr di
jmp interrupt1back
interrupt1_4:
MOV HELP5,#4
clr ai
clr bi
setb ci
clr di
jmp interrupt1back
interrupt1back: ;中断返回
reti
interrupt2: ;延时程序的中断
cjne r0,#34h,testkey ;r0是下降数组
cjne r1,#38h,testkey ;r1是上升数组
jmp loop ;若都记录满了就不记录了,直接对数组进行排序
testkey : mov dptr,#portc ;把c的第四位给单片机
MOVX A,@DPTR
mov r7,a ;把A的数据给r7
mov dptr,#porta ;把porta的数据给指针
movx a,@dptr ;再把指针的数据给a
mov r6,a ;把A的数据给R6
CJNE R7,#0,TESTKEY1 ;若r7不是零的话就跳到testkey1
CJNE R6,#0,TESTKEY2 ;若r6不是零就跳到testkey2
jmp loop ;若都为零就跳到排序程序
testkey1:
cjne r7, #8,j01 ;若不是一楼呼叫——跳转
; ///////;若是一楼的话就点亮N1的灯 /////////////////
push acc
mov dptr,#portc
mov a,#1
orl a,help6
movx @dptr,a
mov help6,a
pop acc
;//////////////////////
mov @r0,#1
jmp loop ;跳到排序
j01:cjne r7,#4,j02 ;若不是在二楼跳转
; ///////;若是二楼的话就点亮N2的灯 /////////////////
push acc
mov dptr,#portc
mov a,#2
orl a,help6
movx @dptr,a
mov help6,a
pop acc
;/////////////////
mov a,help5
subb a,#2
jc j01_1
mov @r0,#2 ;若在二楼上面,则把2放到下降数组里
jmp loop ;跳到排序
j01_1:
mov @r1,#2 ;若在二楼下面,则把它放到上升数组里
jmp loop
j02:cjne r7,#2,j03
; ///////;若是三楼的话就点亮N3的灯 /////////////////
push acc
mov dptr,#portc
mov a,#4h
orl a,help6
movx @dptr,a
mov help6,a
pop acc
;////////////////////
mov a,help5
subb a,#3
jc j02_1
mov @r0,#3
jmp loop ;跳到排序
j02_1:
mov @r1,#3
jmp loop ;跳到排序
j03:
; ///////;若是4楼的话就点亮N4的灯 /////////////////
push acc
mov dptr,#portc
mov a,#8h
movx @dptr,a
mov help6,a
pop acc
;///////////////////////////////////
mov @r1, #4
jmp loop ;跳到排序
;/////////////////外部请求检测程序///////////////////
testkey2: ;检测外部请求
cjne r6,#01h,j1
; ///////;若是一楼的话就点亮w2的灯 /////////////////
push acc
mov dptr,#portb
mov a,#1h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;/////////
mov @r1,#1
jmp loop ;跳到排序
j1:
cjne r6,#02h,j2
; ///////;若是2楼up的话就点亮w2up的灯 /////////////////
push acc
mov dptr,#portb
mov a,#2h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;//////////////////////////
mov @r1,#2
jmp loop ;跳到排序
j2:
cjne r6,#04h,j3
; ///////;若是2楼down的话就点亮w2down的灯 /////////////////
push acc
mov dptr,#portb
mov a,#4h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;////////////////////
mov @r0,#2
jmp loop
j3:
cjne r6,#08h,j4
; ///////;若是3楼up的话就点亮w3up的灯 /////////////////
push acc
mov dptr,#portb
mov a,#8h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;/////////////////
mov @r1,#3
jmp loop
j4:
cjne r6,#10h,j5
; ///////;若是3楼down的话就点亮w3down的灯 /////////////////
push acc
mov dptr,#portb
mov a,#10h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;/////////
mov @r0,#3
jmp loop
j5:
; ///////;若是4楼的话就点亮w4的灯 /////////////////
push acc
mov dptr,#portb
mov a,#20h
orl a,help7
movx @dptr,a
mov help7,a
pop acc
;///////
mov @r0,#4
jmp loop
loop: mov r0,#30h
mov r1,#34h
loop1:
mov a,@r1
inc r1
clr c
mov help1,a
subb a,@r1
jc loop1_1 ;若是a 比@r1小的话,就跳转
mov help2,@r1
mov @r1,help2
dec r1
mov @r1,help2
inc r1
djnz help3,loop1
jmp loop1back
loop1_1:
djnz help3,loop1
loop1back:
mov help3,#3
mov r1,#34h
djnz help4,loop1
mov help4,#3
bijiao0: ;去掉重复
mov a,34h
cjne a,35h,bijiao01
mov 34h,#5
bijiao01:
mov a,35h
cjne a,36h,bijiao02
mov 35h,#5
bijiao02:
mov a,36h
cjne a,37h,bijiao03
mov 36h,#5
bijiao03:
djnz r5,loop1
mov r5,#2
dingwei0: ;定位上行数组的位置
mov a,37h
cjne a,#5,dingwei01
mov r1,#37h
dingwei01:
mov a,36h
cjne a,#5,dingwei02
mov r1,#36h
dingwei02:
mov a,35h
cjne a,#5,dingwei03
mov r1,#35h
dingwei03: mov a,34h
cjne a,#5,loop2
mov r1,#34h
loop2:
mov a,@r0
inc r0
clr c
mov help1,a
subb a,@r0
jnc loop2_1 ;若不是a 比@r1小的话,就跳转
mov help2,@r0
mov @r0,help2
dec r0
mov @r0,help2
inc r0
djnz help3,loop2
jmp loop2back
loop2_1:
djnz help3,loop2
loop2back:
mov help3,#3
mov r0,#30h
djnz help4,loop2
mov help4,#3
bijiao1: ;去掉重复
mov a,30h
cjne a,31h,bijiao11
mov 30h,#0
bijiao11:
mov a,31h
cjne a,32h,bijiao12
mov 31h,#0
bijiao12:
mov a,32h
cjne a,33h,bijiao13
mov 32h,#0
bijiao13:
djnz r5,loop2
mov r5,#2
dingwei1: ;定位下降数组的位置
mov a,33h
cjne a,#0,dingwei10
mov r0,#33h
dingwei10:
mov a,32h
cjne a,#0,dingwei11
mov r0,#32h
dingwei11:
mov a,31h
cjne a,#0,dingwei12
mov r0,#31h
dingwei12:mov a,30h
cjne a,#0,dingwei13
mov r0,#30h
dingwei13:jmp interrupt2back
interrupt2back:
mov a,#0f0h ;再次为定时器赋初值
mov tl0,a
mov a,#0d8h
mov th0,a
clr tf0 ;清除中断溢出标志
reti
delay3s:mov r2,#30
dd:mov r4,#200
dd1:mov r3,#250
djnz r3, $
djnz r4,dd1
djnz r2,dd
ret
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -