逐点比较法第一象限直线插补汇编语言源程序(本程序指令系统采用MCS8031,仅供参考):
LP:MOV SP,#60H 定义堆栈指针
MOV 4AH,#00H 偏差单元清零
MOV 49H,#00H
MOV 48H,#01H 初始化XY电动机
MOV 47H,#02H
MOV A,4EH 计算终点判别,Xe+Ye之低位
ADD A,4CH
MOV 50H,A
MOV A,4DH Xe+Ye之高位
ADDC A,4BH 低位相加,可能产生进位
MOV 4FH,A
MOV A,#03H XY电动机上电
MOV DPTR,#0030H
MOVX @DPTR,A
LP2:ACALL DL0 延时子程序
MOV A,49H 取偏差F的高8位
JB ACC.7,LP4 偏差F< 0,去LP4
ACALL XMP F>=0,调X电动机正转子程序
CLR C 计算新偏差F值,F=F-Ye
MOV A,4AH
SUBB A,4CH 可向高位字节借位
MOV 4AH,A
MOV A,49H
SUBB A,4BH
MOV 49H,A
LP3:CLR C 终判值减1
MOV A,50H
SUBB A,#01H 可向高位字节借位
MOV 50H,A
MOV A,4FH
SUBB A,#00H 考虑低位字节借位
MOV 4FH,A 终判值判零
ORL A,50H
JNZ LP2 终判值不为零,去LP2,否则插补结束
LJMP 0000H
LP4:ACALL YMP 调Y电动机正转子程序
MOV A,4AH 计算新偏差F值,F=F+Xe
ADD A,4EH
MOV 4AH,A
MOV A,49H
ADDC A,4DH
MOV 49H,A
SJMP LP3
XMP:MOV A,48H 取X电动机当前状态字
CLR C 移位法
RRC A
RRC A
RRC A
XMP2:CPL A
ANL A,#49H 屏蔽无关位
MOV 48H,A 保存X电动机状态字,作为下次转动的基准
ORL A,47H 保存Y电动机原状态不变
XMP4:MOV DPTR,#0030H
MOVX @DPTR,A
RET
XMM:MOV A,48H
CLR
RLC A
RLC A
RLC A
SJMP XMP2
YMP:MOV A,47H
CLR C
RRC A
RRC A
RRC A
YMP2:CPL A
ANL A,#92H
MOV 47H,A
ORL A,48H
SJMP XMP4
YMM:MOV A,47H
CLR C
RLC A
RLC A
RLC A
SJMP YMP2
说明:1)黑体字模块为软件环形分配器;
2)各变量地址分配如下:4FH50H-终判值,4DH4EH-Xe,4BH4CH-Ye,49H4AH-偏差值F,47H-Y电动机状态字,48H-X电动机状态字;以大地址格式(最低字节地址单元存放最高位数据)存放各种数据;
3)口地址0030H与XY三相步进电动机相线关系如下:
YO P7
XO P6
P5
YB P4
XB P3
P2
YX P1
XA P2