OUT DX, MOV DX, AL 2800H MOV AL, 0A0H
OUT DX, AL STI
CALL CB
HTL
2>直线插补子程序
CB PROC
PUSH AX PUSH BX PUSH CX PUSH DX PUSHF
MOV AH, 0H
SAHF MOV AX, M MOV BX, M+2 SUB BX, AX
JGE B1
NEG BX B1: MOV AX, M+1 MOV DX, M+3 SUB DX, AX
JGE B2 NEG
DX
B2: ADD DX,
BX MOV CX, DX MOV
AX,
F
;定义8259A OCW2
;中断打开
;调用插补程序
;保护现场
;标志位清零
;取起点终点的X坐标
;取终点相对于起点横坐标的绝对值Xe
;取起点,终点的Z坐标
;取终点相对于起点的Z坐标的绝对值Ye
;计算总进给步数
;将偏差值送AX
XH: CMP AX,
00H JC B4
MOV 5, 0H
CMP M+2, M
JC B3 OR
5,
00H
B3: OR S,
00H CALL HF
SUB AX, DX CALL TIME
JME
B6
B4: MOV 5, 02H CMP M+3, M+1
JC B5 OR
S,
00H
B5: OR S,
01H CALL HF
ADD AX, BX CALL
TIME
B6: DEC CX
LOOP XH POPF POP DX POP CX POP BX POP AX
RET CB ENDP
3>三相六拍环分子程序 HF
PROC
;判断向哪个方向走
;跳向Z向
;写X电机状态字(X/Z 正/反)
;调用环分子程序,X电机走一步;计算偏差值 ;调用延时程序
;写Z电机状态字(X/Z,正/反)
;调用换分子程序,Z电机走一步 ;计算偏差值 ;调用延时子程序
;总步数减1
;出栈,恢复现场
PUSH PUSH PUSH
AX BX DX
PUSHF
MOV BL, S
AND BL, 01H
CMP BL, 0H JNZ FR MOV BL, S
AND BL, 02H CMP BL, 0H JNZ
ZPZ
XDZ:CMP C, 0H
JNZ L LEA
SI,
XT
L1: MOV C,
01H
MOV BX, XT+5 MOV DX, 2000H
MOV AL, [SI] OUT DX, AL CMP [SI], BX
JZ L2 INC SI JMP
L9
L2: LEA SI, XT
JMP
L9
ZDZ:CMP D, 0H LEA
DI,
ZT
L3: MOV D,
01H
MOV
BX, ZT+5
;压栈;保护现场 ;送电机操作字给BL ;判断正反转
;调转至反转 ;判断XZ电机
;调转至Z电机正转 ;判断是否为第一次跳动
;送通电代码首地址给SI
;通过8255A给电机送通电代码
;判断通电代码是否用完
;指针自增1
;判断是否为第一次转动 ;送通电代码首地址给DI
MOV DX, 2000H MOV AL, [DI] OUT DX, AL CMP [DI], BX
JZ L4 INC DI JMP
L9
L4: LEA DZ, ZT
JMP
L9
FR: AND BL,
02H CMP BL, 0H
JNE
ZDE
XDF:CMP C, 0H JNE L5 LEA
SI,
XT+5
L5: MOV C,
01H
MOV BX, XT
MOV DX, 2000H MOV AL, [SI] OUT DX, AL CMP [SI], BX
JZ L6 DEC SI JMP
L9
L6: LEA SI, XT+5
JMP
L9
ZDF:CMP D, 0H JNZ L7 LEA
DI,
ZT+5
L7: MOV D,
01H
;通过8255A送通电代码给电机
;判断通电代码是否用完
;指针自增1
;判断用哪个电机
;判断是否为第一次转动
;送通电代码末地址给SI
;通过8255A给电机送通电代码
;判断通电代码是否用完
;指针自减1
;判断是否为第一次转动
;送通电代码末地址给DI
相关推荐: