📄 电机节电器.asm
字号:
org 0000h
ljmp main
org 0003h
ljmp inti0
org 000bh
ljmp intt0
org 001bh
ljmp intt1
runflag equ f0
keyhold equ 20h.1
realvalue equ 62h
keyvalue equ 60h
key3s equ 20h.3
over equ 20h.8
tlcs equ p2.0
tlclk equ p2.1
tldo equ p2.2
x25cs equ p2.7
x25so equ p2.6
x25sck equ p2.4
x25si equ p2.5
org 0030h
main: mov sp,#100
mov p1,#00h
mov p0,#00h
mov 25h,#40
clr p3.7
clr p3.6
clr p3.5
mov keyvalue,#00
setb p3.2
lcall readset
clr ea
mov tmod,#01h
mov th0,#0c5h
mov tl0,#068h
setb it0
setb ex0
setb tr0
setb et0
setb ea
mov a,3ah
jz sleep
lcall run
sleep: jnb tf0,sleep
ljmp sleep
inti0:push acc
push psw
setb rs0
clr rs1
lcall delay12
jb p3.2,return0
mov p1,#0ffh
clr ex0
clr p3.2
jb p1.0,l1
stop: clr et1
clr f0
mov 2ah,#00
mov 2bh,#00
mov 2eh,#00
lcall return
anl p3,#1fh
reti
return0:clr keyhold
clr key3s
mov 28h,#00
lcall return
reti
l1: jb p1.1,l2
runky:lcall run
lcall return
reti
l2: jb p1.2,l3
mon: mov 3dh,realvalue
mov 3eh,#00h
mov keyvalue,#00h
mov 54h,#00
mov 5ah,#00
lcall return
reti
l3: jb p1.3,l4
up: mov a,keyvalue
jz return0
setb keyhold
lcall dpt
mov 3dh,@r0
inc r0
mov 3eh,@r0
mov r6,3dh
mov r7,3eh
inch: lcall add16
mov a,keyvalue
cjne a,#1,incj1
sjmp lowp
incj1: cjne a,#2,incj2
sjmp lowp
incj2: cjne a,#5,incj3
sjmp lowp
incj3: cjne a,#3,incj4
sjmp highp
incj4: cjne a,#4,par5
sjmp highp
lowp: mov a,r6
subb a,#200
jnc trans1
mov r6,#200
mov r7,#00
trans1:mov 3eh,r7
mov 3dh,r6
jb p1.3,incha
jnb 20h.3,$
lcall delay100
ljmp inch
highp:mov a,r7
subb a,#03h
jnc trans1
mov a,r6
subb a,#0e8h
jnc trans1
par5:mov r6,#01
mov r7,#00
mov keyvalue,#06
mov 54h,keyvalue
ljmp trans1
incha:clr keyhold
clr key3s
mov 28h,#00
lcall return
reti
return1:ljmp return0
l4: jb p1.4,l5
down: mov a,keyvalue
jz return1
setb keyhold
lcall dpt
mov 3dh,@r0
inc r0
mov 3eh,@r0
mov r6,3dh
mov r7,3eh
sinch:lcall sub16
mov a,keyvalue
cjne a,#1,decj1
sjmp slowp
decj1:cjne a,#2,decj2
sjmp slowp
decj2:cjne a,#5,decj3
sjmp slowp
decj3:cjne a,#3,decj4
sjmp shighp
decj4:cjne a,#4,spar5
sjmp shighp
slowp:cjne r6,#00,trans4
mov r6,#00
mov r7,#00
trans4:mov 3eh,r7
mov 3dh,r6
jb p1.3,sincha
jnb 20h.3,$
lcall delay100
ljmp sinch
shighp:cjne r7,#03h,trans4
cjne r6,#0e8h,trans4
mov r7,#03h
mov r6,#0e8h
ljmp trans4
spar5:mov r6,#00
mov r7,#00
mov 54h,keyvalue
ljmp trans4
sincha:clr keyhold
clr key3s
mov 28h,#00
lcall return
reti
l5: jb p1.5,l6
setkey:mov a,keyvalue
jz return1
lcall dpt
mov @r0,3dh
inc r0
mov @r0,3eh
lcall writset
lcall return
reti
l6:jb p1.6,keyerr
prog: inc keyvalue
mov a,keyvalue
xrl a,#07
jnz inc1
mov keyvalue,#01
inc1: lcall dpt
mov 3dh,@r0
inc r0
mov 3eh,@r0
mov 5ah,#2fh
mov 54h,keyvalue
lcall return
reti
keyerr:mov keyvalue,#00
return:push psw
push acc
setb p3.2
setb ex0
mov p1,#00h
ret
intt0:push acc
push psw
setb rs1
clr rs0
clr x25cs
setb x25cs
inc 29h
mov a,29h
cjne a,#80,t0enter
mov 29h,#00
lcall disp
t0enter: jnb keyhold,filt10
inc 28h
clr c
mov a,28h
subb a,#150
jnc filt
setb key3s
sjmp filt
filt10:clr key3s
filt:lcall inputa
mov r0,25h
mov @r0,a
inc r0
mov a,r0
anl a,#4fh
mov r0,a
mov 25h,r0
mov r1,#40h
mov r2,#0
mov r3,#0
loop: mov a,@r1
add a,r3
mov r3,a
clr a
addc a,r2
mov r2,a
inc r1
cjne r1,#50h,loop
mov r1,#00
clr c
filt2:mov a,r2
rrc a
mov r2,a
mov a,r3
rrc a
mov r3,a
clr c
inc r1
cjne r1,#4,filt2
mov realvalue,r3
mov a,keyvalue
jnz mdisp
mov 3dh,realvalue
mov 3eh,#00
mdisp:jnb f0,back
mov a,30h
subb a,realvalue
jnc loop1
mov a,32h
subb a,realvalue
jnc loop2
mov a,2eh
cjne a,#0feh,loop3
ljmp back
nop
nop
nop
loop1:mov a,2eh
cjne a,#55h,loop4
ljmp back
loop2:mov a,2eh
cjne a,#18h,loop5
ljmp back
loop3:mov 2eh,#0feh
lcall opent1
ljmp back
loop4:mov 2eh,#55h
lcall opent1
ljmp back
loop5:mov 2eh,#18h
lcall opent1
nop
nop
nop
nop
nop
back:push psw
push acc
clr et0
clr ea
mov th0,#0c5h
mov tl0,#068h
setb et0
setb tr0
setb ea
reti
opent1:clr ea
clr et1
mov th1,#3ch
mov tl1,#0b0h
setb et1
setb tr1
setb ea
mov 2ah,#00
mov 2bh,#00
ret
intt1:push psw
push acc
setb rs0
setb rs1
clr ea
inc r5
second:cjne r5,#20,sec1
add a,2ah
mov a,#1
mov 2ah,a
mov a,2bh
addc a,#0
mov 2bh,a
start:mov a,2eh
cjne a,#66h,xschang
mov r7,2bh
mov r6,2ah
mov r5,35h
mov r4,34h
lcall cmp16
jnb 20h.8,sec1
setb f0
lcall reintt1
anl p3,#0bfh
reti
sec1: clr ea
pop acc
pop psw
clr et1
mov th1,#3ch
mov tl1,#0b0h
setb et1
setb tr1
setb ea
reti
xschang:mov a,2eh
cjne a,#55h,next1
mov r7,2bh
mov r6,2ah
mov r5,37h
mov r4,36h
lcall cmp16
jnb 20h.8,sec1
clr et1
lcall reintt1
anl p3,#7fh
reti
next1: mov a,2eh
cjne a,#18h,next2
mov r7,2bh
mov r6,2ah
mov r5,37h
mov r4,36h
lcall cmp16
jnb 20h.8,sec1
lcall reintt1
anl p3,#0bfh
reti
next2: mov a,2eh
cjne a,#0feh,err5
mov a,2ah
cjne a,38h,sec1
err5: lcall reintt1
clr f0
anl p3,#1fh
reti
reintt1:pop acc
pop psw
clr et1
mov 2eh,#00
mov 2ah,#00
mov 2bh,#00
setb ea
ret
dpt: clr c
mov a,60h
dec a
rl a
add a,#30h
mov r0,a
ret
delay12: mov r4,#20
d1: mov r3,#300
d2: djnz r3,d2
djnz r4,d1
ret
run: clr ea
clr et1
mov 2eh,#66h
orl tmod,#10h
mov th1,#3ch
mov tl1,#0b0h
setb et1
setb tr1
anl p3,#7fh
setb ea
ret
delay100:mov r4,#200
d3:mov r3,#250
d4:djnz r3,d4
djnz r4,d3
ret
add16:mov a,r6
add a,#01
mov r6,a
mov a,r7
addc a,#0
mov r7,a
ret
sub16: mov a,r6
clr c
subb a,#01
mov r6,a
mov a,r7
subb a,#0
mov r7,a
ret
cmp16:clr c
mov a,r7
subb a,r5
jc cmpnext
mov a,r6
subb a,r4
jc cmpnext
setb over
ret
cmpnext:clr over
ret
disp:mov 50h,#00
mov 51h,#00
mov 52h,#00
mov 53h,#00
disp10:mov a,3eh
jz disp13
clr c
mov a,3dh
subb a,#200
jc disp12
mov 3dh,a
disp11: mov a,52h
add a,#2
mov 52h,a
mov a,53
addc a,#00
mov 53h,a
disp12:dec 3eh
mov a,3dh
add a,#56
mov 3dh,a
clr c
mov a,52h
add a,#2
mov 52h,a
mov a,53h
addc a,#00
mov 53h,a
sjmp disp10
disp13:mov b,#100
mov a,3dh
div ab
add a,52h
mov 52h,a
mov a,53h
addc a,#00
mov 53h,a
mov a,#10
xch a,b
div ab
mov 51h,a
mov 50h,b
mov b,#10
mov a,52h
div ab
mov 53h,a
mov 52h,b
mov r0,#50h
mov r1,#55h
cod:mov a,@r0
mov dptr,#tab
movc a,@a+dptr
mov @r1,a
inc r0
inc r1
cjne r0,#55h,cod
sout:mov scon,#00h
mov r0,#55h
output:mov a,@r0
mov sbuf,a
jnb ti,$
clr ti
inc r0
cjne r0,#5bh,output
ret
inputa:setb tldo
clr tlclk
setb tlcs
clr tlcs
mov r4,#50
mov r3,#08
setb tlclk
nop
clr tlclk
nop
setb tlclk
nop
inputa1:clr tlclk
mov c,tldo
rlc a
setb tlclk
djnz r3,inputa1
inputa2:djnz r4,inputa2
setb tlcs
ret
readset:mov r0,#00h
mov r1,#30h
read:mov a,#03h
mov r7,#08h
clr x25sck
clr x25cs
acall transfe
mov a,@r0
mov r7,#08h
acall transfe
mov r7,#08h
rece1:nop
mov c,x25so
rlc a
setb x25sck
clr x25sck
nop
djnz r7,rece1
rr a
mov @r1,a
inc r0
inc r1
cjne r1,#3bh,read
ret
writset:mov r0,#00h
mov r1,#30h
write: clr x25sck
clr x25si
setb x25cs
setb x25so
mov a,#06h
mov r7,#08h
clr x25sck
clr x25cs
acall transfe
setb x25cs
delay1:mov r4,#10
del1:mov r3,#50
del2:djnz r3,del2
djnz r4,del1
mov a,#02h
mov a,#08h
clr x25sck
clr x25cs
acall transfe
mov a,@r0
mov r7,#08h
acall transfe
mov a,@r1
mov r7,#08h
acall transfe
setb x25cs
delay3:mov r4,#20
del3:mov r3,#150
del4:djnz r3,del4
djnz r4,del3
inc r0
inc r1
cjne r1,#3bh,write
ret
transfe:nop
mov c,acc.7
mov x25si,c
setb x25sck
rl a
clr x25sck
djnz r7,transfe
clr x25si
ret
tab:db 7eh,24h,3bh,5bh,4dh,57h,77h,4ah,7fh,4fh
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -