自已做的简易数控系统的控制软件

org 0000h
ljmp main
org 0030h
main:
zxc equ 25 ;z axis limited
zjj equ 70 ;word and word distance
mcs equ 184 ;setp by plus
mov r2,#6h
mov r2,#6h

mov r1,#8 ;data store clear
mov r0,#40h
clea: mov @r0,#00h
inc r0
djnz r1,clea
lcall display1
lcall delay2

mov r0,#40h
mov r1,#8 ;data store clear
mov r0,#40h
clear: mov @r0,#0ffh
inc r0
djnz r1,clear
mov r0,#40h


;scan func key
start:jnb p3.0, jogxz
jnb p3.1, jogxf
jnb p3.2, jogyz
jnb p3.3, jogyf
jnb p3.4, jogzz
jnb p3.5, jogzf
mov p2,#11111000b
lcall delay2
mov a,p2
cjne a,#11111000b,dacal1
ljmp start

dacal1:ljmp dacal ;3x4 keyboard cal jump
;x y z jog
jogxz: cpl p1.3
lcall delay
jb p3.0, start
setb p1.2
ljmp jogxz
ret
jogxf: cpl p1.3
lcall delay
jb p3.1, start
clr p1.2
ljmp jogxf
ret
jogyz: cpl p1.1
lcall delay
jb p3.2, start
setb p1.0
ljmp jogyz
ret
jogyf: cpl p1.1
lcall delay
jb p3.3, start
clr p1.0
ljmp jogyf
ret
jogzz: cpl p1.5
lcall delay1
jb p3.4, start
setb p1.4
ljmp jogzz
ret
jogzf: cpl p1.5
lcall delay1
jb p3.5, start
clr p1.4
ljmp jogzf
ret
;machine start
enter:
mov r0,#40h
jb p1.7,enter
;return uplimitpoint
mov r4,#20 ;z step number
setb p1.4 ;z+
rua2z1: mov r3,#mcs
rua1z1: setb p1.5
lcall delay
clr p1.5
lcall delay
djnz r3,rua1z1
djnz r4,rua2z1

;read data and run select
loop: mov a,@r0
lcall display
mov @r0,#0ffh
inc r0
cjne a,#0ffh,kz
;return zero
lcall displaye ;return zero display
mov a,r0
subb a,#41h
jz retu4
mov r5,a
clr p1.2
retu3: mov r4,#zjj
retu2: mov r3,#mcs
retu1: setb p1.3
lcall delay
clr p1.3
lcall delay
djnz r3,retu1
djnz r4,retu2
djnz r5,retu3
retu4:
ljmp main
ljmp main
;kz select
kz:cjne a,#0,k1
ljmp kz0
k1:cjne a,#1,k2
ljmp kz1
k2:cjne a,#2,k3
ljmp kz2
k3:cjne a,#3,k4
ljmp kz3
k4:cjne a,#4,k5
ljmp kz4
k5:cjne a,#5,k6
ljmp kz5
k6:cjne a,#6,k7
ljmp kz6
k7:cjne a,#7,k8
ljmp kz7
k8:cjne a,#8,k9
ljmp kz8
k9:cjne a,#9,k10
ljmp kz9
k10:cjne a,#0ah,k11
ljmp

kz0a
k11:inc r0
ljmp loop
kout: ljmp main
ret
;word machine program
kz0:
;go to startpoint

;go to point x-
mov r4,#25 ;x step number
clr p1.2 ;x-
ru02x0: mov r3,#mcs
ru01x0: setb p1.3
lcall delay
clr p1.3
lcall delay
djnz r3,ru01x0
djnz r4,ru02x0

; tools down
;go to point z-
mov r4,#zxc ;z step number
clr p1.4 ;z-
ru02z0: mov r3,#mcs
ru01z0: setb p1.5
lcall delay1
clr p1.5
lcall delay1
djnz r3,ru01z0
djnz r4,ru02z0
;machine "0"
mov dptr,#dat0
mov r1,#00h
mov a,#00h
check0: movc a,@a+dptr
jz kzend0
mov r6,#0
cjne r6,#0,chang0
ljmp pro0
chang0: movc a,@a+dptr
swap a
pro0: mov c,acc.0
mov p1.0,c
mov c,acc.2
mov p1.2,c
clr acc.0
clr acc.2
clr acc.4
clr acc.5
clr acc.6
clr acc.7
inc r6
mov r2,a
cjne r2,#1000b,run10
ljmp x0
run10: cjne r2,#0010b,run20
ljmp y0
run20: ljmp xy0

rover0: cjne r6,#2,repea0
inc r1
mov a,r1
ljmp check0
repea0: mov a,r1
ljmp chang0

x0: mov r3,#mcs
x10: setb p1.3
lcall delay1
clr p1.3
lcall delay1
djnz r3,x10
ljmp rover0
ret
y0: mov r4,#mcs
y10: setb p1.1
lcall delay1
clr p1.1
lcall delay1
djnz r4,y10
ljmp rover0
ret
xy0: mov r5,#mcs
xy10: setb p1.1
setb p1.3
lcall delay1
clr p1.1
clr p1.3
lcall delay1
djnz r5,xy10
ljmp rover0
ret
kzend0:
;tool up
mov r4,#zxc ;z step number
setb p1.4 ;z+
ru02z1: mov r3,#mcs
ru01z1: setb p1.5
lcall delay
clr p1.5
lcall delay
djnz r3,ru01z1
djnz r4,ru02z1
;go to endpoint
mov r4,#25 ;x step number
setb p1.2 ;x+
ru02x1: mov r3,#mcs
ru01x1: setb p1.3
lcall delay
clr

p1.3
lcall delay
djnz r3,ru01x1
djnz r4,ru02x1
;go to nextpoint
mov r4,#zjj ;x step number
setb p1.2 ;x+
ru02x2: mov r3,#mcs
ru01x2: setb p1.3
lcall delay
clr p1.3
lcall delay
djnz r3,ru01x2
djnz r4,ru02x2
;"0" over
ljmp loop

dat0: db 01110111b,01110111b,01110111b,01110111b,01110111b
db 11110111b,01110111b,01110111b,01110111b,01110111b
db 01111111b,01110111b,01111111b,11110111b,11110111b
db 11110111b,11110111b,01111111b,11111111b,11111111b
db 11011111b,11011111b,11111101b,11011101b,11111101b
db 11011101b,11011101b,11101100b,11001100b,11101100b
db 11001110b,11001110b,11101110b,11101110b,01101110b
db 11100110b,11100110b,11100110b,11100110b,01101110b
db 01100110b,01101110b,01100110b,01100110b,01100110b
db 01100110b,11100110b,01100110b,01100110b,01100110b
db 01100110b,01100110b,00100010b,00100010b,00100010b
db 00100010b,00100010b,10100010b,00100010b,00100010b
db 00100010b,00100010b,00101010b,00100010b,00101010b
db 10100010b,10100010b,10100010b,10100010b,00101010b
db 10101010b,10101010b,10001010b,10001010b,10101000b
db 10001000b,10101000b,10001000b,10011001b,10111001b
db 10011001b,10111001b,10011011b,10011011b,10111011b
db 10111011b,00111011b,10110011b,10110011b,10110011b
db 10110011b,00111011b,00110011b,00111011b,00110011b
db 00110011b,00110011b,00110011b,10110011b,00110011b
db 00110011b,00110011b,00110011b,00110011b,00000000b


;tool up
mov r4,#zxc ;z step number
setb p1.4 ;z+
ru0a2z1: mov r3,#mcs
ru0a1z1: setb p1.5
lcall delay
clr p1.5
lcall delay
djnz r3,ru0a1z1
djnz r4,ru0a2z1

;go to endpoint
mov r4,#25 ;x step number
clr p1.2 ;x-
ru0a2x1: mov r3,#mcs
ru0a1x1: setb p1.3
lcall delay
clr p1.3
lcall delay
djnz r3,ru0a1x1
djnz r4,ru0a2x1
;go to nextpoint
mov r4,#zjj ;x step number
setb p1.2 ;x+
ru0a2x2: mov r3,#mcs
ru0a1x2: setb p1.3
lcall delay
clr p1.3
lcall delay
djnz r3,ru0a1x2
djnz r4,ru0a2x2
;"-" over
ljmp loop

;keyboard caluate
dacal:
mov p2,#11111110b
lcall delay2
jnb p2.3,key2
jnb p2.4,key1
jnb

p2.5,key0
jnb p2.6,keye

mov p2,#11111101b
lcall delay2
jnb p2.3,key6
jnb p2.4,key5
jnb p2.5,key4
jnb p2.6,key3

mov p2,#11111011b
lcall delay2
jnb p2.3,keya
jnb p2.4,key9
jnb p2.5,key8
jnb p2.6,key7
ljmp start

key0:mov a,#00h
ljmp input
key1:mov a,#01h
ljmp input
key2:mov a,#02h
ljmp input
key3:mov a,#03h
ljmp input
key4:mov a,#04h
ljmp input
key5:mov a,#05h
ljmp input
key6:mov a,#06h
ljmp input
key7:mov a,#07h
ljmp input
key8:mov a,#08h
ljmp input
key9:mov a,#09h
ljmp input
keya:mov a,#0ah
ljmp input
keye: lcall display1 ;input display
lcall delay2
lcall delay2
lcall delay2
lcall delay2
lcall display
ljmp enter
ret
;data input program
input: cjne r2,#0,con
ljmp start
con:mov @r0,a
inc r0
dec r2
lcall display
keyrel:
mov p2,#11111000b
mov a,p2
cjne a,#11111000b,keyrel
ljmp start
ret
; move ripad timeout
delay:
mov 20h,r6
mov r7,#5
t1: mov r6,#5
djnz r6,$
djnz r7,t1
mov r6,20h
ret
;feed timeout
delay1:
mov 20h,r6
mov r7,#10
t2: mov r6,#5
djnz r6,$
djnz r7,t2
mov r6,20h
ret
delay2:
mov 20h,r6
mov r7,#100
t3: mov r6,#100
djnz r6,$
djnz r7,t3
mov r6,20h
ret

DISPLAY:
push acc
push psw
SETB P3.7
MOV A,#90H
MOVX @DPTR,A
CLR P3.7
MOV A,40H
MOVX @DPTR,A
MOV A,41H
MOVX @DPTR,A
MOV A,42H
MOVX @DPTR,A
MOV A,43H
MOVX @DPTR,A
MOV A,44H
MOVX @DPTR,A
MOV A,45H
MOVX @DPTR,A
MOV A,46H
MOVX @DPTR,A
MOV A,47H
MOVX @DPTR,A
pop psw
pop acc
RET
DISPLAY1:
push acc
push psw
SETB P3.7
MOV A,#90H
MOVX @DPTR,A
CLR P3.7
MOV A,#08h
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
MOV A,#08H
MOVX @DPTR,A
pop psw
pop acc
RET

DISPLAYE:
push acc
push psw
SETB P3.7
MOV A,#90H
MOVX @DPTR,A
CLR P3.7
MOV A,#0ah
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
MOV A,#0aH
MOVX @DPTR,A
pop psw
pop acc

RET
end


相关文档
最新文档