⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 运动控制系统.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
字号:


;***********************************
SIGN_P_A  EQU 20H.0 ;拉伸的标志位(1)表拉
SIGN_P_B  EQU  20H.1;拉伸的标志位
SIGN_P_C  EQU  20H.2;拉伸的标志位
SIGN_P    EQU 20H.3;拉伸的标志位
SIGN_ZERO EQU 20H.4 ;零标志

START_X EQU 40H  ;开始输入的X轴对应的坐标
START_Y EQU 41H  ;开始输入的Y轴对应的坐标
END_X  EQU  42H  ;结束输入的X轴对应的坐标
END_Y  EQU  43H  ;结束输入的Y轴对应的坐标
IN_X  EQU  30H ;X轴对应的坐标
IN_Y  EQU  31H ;Y轴对应的坐标
MUL2_H EQU  32H ;平方高位
MUL2_L EQU  33H ;平方低位
KAFANG_H EQU 34H ;开方高位
KAFANG_L  EQU 35H ;开方低位
OUT_A  EQU 36H  ;一边的长度
OUT_A_DATE EQU 37H ;小数
OUT_B  EQU 38H  ;一边的长度
OUT_B_DATE EQU 39H  ;小数
OUT_C  EQU 3AH  ;一边的长度
OUT_C_DATE EQU 3BH  ;小数
FACT_X  EQU  3CH    ;实际输入的X轴对应的坐标
FACT_Y  EQU  3DH    ;实际输入的Y轴对应的坐标

OUT_1_A      EQU 44H  ;一边的长度
OUT_1_A_DATE EQU 45H ;小数
OUT_1_B      EQU 46H  ;一边的长度
OUT_1_B_DATE EQU 47H  ;小数
OUT_1_C      EQU 48H  ;一边的长度
OUT_1_C_DATE EQU 49H  ;小数
CASE_1       EQU 4AH  ;缓存


LINE_A      EQU   4BH ;计算后输出一边的长度
LINE_A_DATE EQU   4CH ;计算后输出小数
LINE_B      EQU   4DH
LINE_B_DATE EQU   4EH
LINE_C      EQU   4FH
LINE_C_DATE EQU   50H
CASE_2      EQU   56H  ;缓存(NO)
CASE_A      EQU   57H  ;判断
CASE_B      EQU   58H  ;判断
CASE_C      EQU   59H  ;判断
                   5AH
                   5BH
                   5CH
CRAM       EQU     5DH


;********************************
 ORG 00H
 LJMP MAIN
 ORG 50H
 MAIN:


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;判断长段和缩放,协调步进电机



START:CLR SIGN_P_A
      CLR SIGN_P_B
      CLR SIGN_P_C 
      MOV CASE_A,#02H
      MOV CASE_B,#02H
      MOV CASE_C,#02H
      


   MOV FACT_X,START_X
   MOV FACT_Y,START_Y
   ACALL CHANGE_XY
   MOV OUT_1_A,OUT_A
   MOV OUT_1_A_DATE,OUT_A_DATE
   MOV OUT_1_B,OUT_B
   MOV OUT_1_B_DATE,OUT_B_DATE
   MOV OUT_1_C,OUT_C
   MOV OUT_1_C_DATE,OUT_C_DATE

   MOV FACT_X,END_X
   MOV FACT_Y,END_Y
   ACALL CHANGE_XY
   MOV R2,OUT_1_A
   MOV R3,OUT_1_A_DATE
   MOV R4,OUT_A
   MOV R5,OUT_A_DATE
   ACALL SUBB_2
   MOV LINE_A,R6
   MOV LINE_A_DATE,R7
   JNB SIGN_P THEN_1 
    SETB SIGN_P_A
    AJMP THEN_2
THEN_1:CLR SIGN_P_A
THEN_2:JNB SIGN_P_A,COMPY_1
       AJMP MCU_1
COMPY_1:INC CASE_A

MCU_1:MOV R2,OUT_1_B
     MOV R3,OUT_1_B_DATE
     MOV R4,OUT_B
     MOV R5,OUT_B_DATE
     ACALL SUBB_2
     MOV LINE_B,R6
     MOV LINE_B_DATE,R7
     JNB SIGN_P THENX_1 
     SETB SIGN_P_B
     AJMP THENX_2
THENX_1:CLR SIGN_P_B
THENX_2:JNB SIGN_P_B,COMPY_2
        AJMP MCU_2
COMPY_2: INC CASE_B
 
MCU_2:MOV R2,OUT_1_C
     MOV R3,OUT_1_C_DATE
     MOV R4,OUT_C
     MOV R5,OUT_C_DATE
     ACALL SUBB_2
     MOV LINE_C,R6
     MOV LINE_C_DATE,R7
     JNB SIGN_P THENY_1 
     SETB SIGN_P_C
     AJMP THENY_2
THENY_1:CLR SIGN_P_C
THENY_2:JNB SIGN_P_C,COMPY_3
        AJMP MCU_3
COMPY_3:INC CASE_C
MCU_3: AJMP ???

   

;;***********************************步进电机优先级控制扫描子程序
      
POCESS_1:MOV R7,#00H
         MOV R0,#57H
         MOV R6,#03H
         MOV R1,#5AH
POCESS_3:MOV A,@R0
         CJNE A,#03H,POCESS_2
         INC R7 
POCESS_2:INC R0
         MOV A,R0
         CJNE A,#5AH,POCESS_3 
         MOV A,R7
         CJNE A,#02H,POINT_1
         MOV R0,#57H
POINT_3: MOV A,@R0
         CJNE A,#03H,POINT_2
         MOV A,R0
         MOV R1,A
         INC R1
POINT_2: INC R0
         MOV CRAM,#00H
         DJNZ R6,POINT_3
         RET
          
         
POINT_1: 





;**********************************带小数的减法子程序

;(6) 标号: SUBB_2 功能:3字节二进制无符号数带小数的减法
;;入口条件:待数在开始的数R2.R3 结束的数R4.R5中
;出口信息:结果在R6.R7中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
       CLR SIGN_P
       CLR SIGN_ZERO
SUBB_2:MOV A,R2
       CLR C
       MOV CASE_1,R4
       CJNE A,CASE_1,LOOP_1
       MOV A,R3
       CLR C
       MOV CASE_1,R5
       CJNE A,CASE_1,LOOP_2
       SETB SIGN_ZERO
       RET
LOOP_2:JC LOOP_3
       MOV A,R3
       CLR C
       SUBB A,R5
       MOV R7,A
       MOV R6,#00H
       RET    
LOOP_3:MOV A,R5
       CLR C
       SUBB A,R3
       MOV R7,A
       MOV R6,#00H
       RET           
       
LOOP_1:JC LOOP_4   ;R2>R4
       CLR C
       MOV A,R3
       CLR C
       MOV CASE_1,R5
       CJNE A,CASE_1,LOOP_5
LOOP_5:JC LOOP_6
       SETB SIGN_P ;拉
       CLR C
       MOV A,R3
       SUBB A,R5
       MOV R7,A
       CLR C
       MOV A,R2
       SUBB A,R4
       MOV R6,A
       RET

LOOP_6:CLR C
       SETB SIGN_P ;拉
       CLR C
       MOV A,R3
       ADD A,#10
       SUBB A,R5
       MOV R7,A
       CLR C
       MOV A,R2
       DEC A
       SUBB A,R4
       MOV R6,A
       RET
LOOP_4: 
       CLR C
       MOV A,R5
       CLR C
       MOV CASE_1,R3
       CJNE A,CASE_1,LOOPX_5 
LOOPX_5:JC LOOPX_6
        CLR SIGN_P ;伸
        CLR C
        MOV A,R5
        SUBB A,R3
        MOV R7,A
        CLR C
        MOV A,R4
        SUBB A,R2
        MOV R6,A
        RET

LOOPX_6:CLR C
       CLR SIGN_P ;伸
       CLR C
       MOV A,R5
       ADD A,#10
       SUBB A,R3
       MOV R7,A
       CLR C
       MOV A,R4
       DEC A
       SUBB A,R2
       MOV R6,A
       RET    

;;;******************************************
;******************************坐标转换子程序
CHANGE_XY:MOV A,#30
  ADD A,FACT_X
  MOV IN_X,A
  MOV A,#17
  ADD A,FACT_Y
  MOV IN_Y,A
;******************************
BELT_B:MOV R2,IN_X
       LCALL MUL2
       MOV MUL2_H,R2
       MOV MUL2_L,R3
       MOV R2,IN_Y
       LCALL MUL2
       MOV R5,MUL2_H
       MOV R6,MUL2_L
       LCALL ADD2
       MOV KAFANG_H,R2
       MOV KAFANG_L,R3
       LCALL SH2
       MOV  OUT_B,R2 ;整数
       MOV  DPTR,#TABLE_SHU ;小数查表
       MOV A,R3
       MOVC A,@A+DPTR
       MOV OUT_A_DATE,A

BELT_C:MOV R2,#60
       MOV R3,IN_X
       LCALL SUBB1
       LCALL MUL2
       MOV MUL2_H,R2
       MOV MUL2_L,R3
       MOV R2,IN_Y
       LCALL MUL2
       MOV R5,MUL2_H
       MOV R6,MUL2_L
       LCALL ADD2
       MOV KAFANG_H,R2
       MOV KAFANG_L,R3
       LCALL SH2
       MOV  OUT_C,R2 ;整数
       MOV  DPTR,#TABLE_SHU ;小数查表
       MOV A,R3
       MOVC A,@A+DPTR
       MOV OUT_C_DATE,A


BELT_A:CLR C
       MOV A,IN_X
       CJNE A,#30,NEXT_1
NEXT_1:JC NEXT_2
       MOV R2,IN_X
       MOV R3,#30
       LCALL SUBB1
       AJMP NEXT_3
NEXT_2:MOV R2,#30
       MOV R3,IN_X
       LCALL SUBB1
NEXT_3: LCALL MUL2
       MOV MUL2_H,R2
       MOV MUL2_L,R3
       MOV R2,#52
       MOV R3,IN_Y
       LCALL SUBB1
       LCALL MUL2
       MOV R5,MUL2_H
       MOV R6,MUL2_L
       LCALL ADD2
       MOV KAFANG_H,R2
       MOV KAFANG_L,R3
       LCALL SH2
       MOV  OUT_A,R2 ;整数
       MOV  DPTR,#TABLE_SHU ;小数查表
       MOV A,R3
       MOVC A,@A+DPTR
       MOV OUT_A_DATE,A







         AJMP $ ;;///

























;;**************************************
;(6) 标号: MUL2 功能:单字节二进制无符号数平方
;;入口条件:待平方数在R2中。出口:结果保存在R2,R3中(R2高位,R3,低位)
;出口信息:结果在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节
MUL2: MOV A,R2 ;;计算R2平方
      MOV B,R2
      MUL AB
      MOV R2,B
      MOV R3,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(6) 标号: MUL2 功能:单字节二进制无符号数R2,R3中(R2高位,R3,低位),R5,R6中(R5高位,R6,低位)
;;入口条件:待加数在R2,R3中,和R5,R6。出口:结果保存在R2,R3中(R2高位,R3,低位)
;出口信息:结果在R2、R3中。
;影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节
ADD2:CLR C
     MOV A,R3
     ADD A,R6
     MOV B,A ;B占存
     MOV A,R2
     ADDC A,R5
     MOV R3,B
     MOV R2,A
RET
;;;**********************************************************
;*****************************************************
;*****************************************************
; (12)  标号:  SH2    功能:双字节二进制无符号数开平方(快速)
;入口条件:被开方数在R2、R3中。(R2高位,R3,低位)
;出口信息:平方根仍在R2、R3中,整数部分的位数为原数的一半,其余为小数。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节 。 结果在R2中
SH2:	MOV	A,R2
	ORL	A,R3
	JNZ	SH20
	RET		;;被开方数为零,不必运算
SH20:	MOV	R7,#0	;;左规次数初始化
	MOV	A,R2
SH22:	ANL	A,#0C0H	;;被开方数高字节小于40H否?
	JNZ	SQRH	;;不小于40H,左规格化完成,转开方过程
	CLR	C	;;每左规一次,被开方数左移两位
	MOV	A,R3
	RLC	A
	MOV	F0,C
	CLR	C
	RLC	A
	MOV	R3,A
	MOV	A,R2
	MOV	ACC.7,C
	MOV	C,F0
	RLC	A
	RLC	A
	MOV	R2,A
	INC	R7	;;左规次数加一
	SJMP	SH22	;;继续左规
SQRH:	MOV	A,R2    ;规格化后高字节按折线法分为三个区间
	ADD	A,#57H
	JC	SQR2
	ADD	A,#45H
	JC	SQR1
	ADD	A,#24H
	MOV	B,#0E3H	;第一区间的斜率
	MOV	R4,#80H	;第一区间的平方根基数
	SJMP	SQR3
SQR1:	MOV	B,#0B2H	;第二区间的斜率
	MOV	R4,#0A0H;第二区间的平方根基数
SJMP	SQR3
SQR2:	MOV	B,#8DH	;第三区间的斜率
	MOV	R4,#0D0H;第三区间的平方根基数
SQR3:	MUL	AB	;与区间基点的偏移量乘区间斜率
	MOV	A,B
	ADD	A,R4	;累加到平方根的基数上
	MOV	R4,A
	MOV	B,A
	MUL	AB	;求当前平方根的幂
	XCH	A,R3	;求偏移量(存放在R2R3中)
	CLR	C
	SUBB	A,R3
	MOV	R3,A
	MOV	A,R2
	SUBB	A,B
	MOV	R2,A
SQR4:	SETB	C	;用减奇数法校正一个字节的平方根
	MOV	A,R4	;当前平方根的两倍加一存入R5R6中
	RLC	A
	MOV	R6,A
CLR	A
	RLC	A
	MOV	R5,A
	MOV	A,R3	;偏移量小于该奇数否?
	SUBB	A,R6
	MOV	B,A
	MOV	A,R2
	SUBB	A,R5
	JC	SQR5	;小于,校正结束,已达到一个字节的精度
	INC	R4	;不小于,平方根加一
	MOV	R2,A	;保存新的偏移量
	MOV	R3,B
	SJMP	SQR4	;继续校正
SQR5:	MOV	A,R4	;将一个字节精度的根存入R2
	XCH	A,R2
	RRC	A
	MOV	F0,C	;保存最终偏移量的最高位
	MOV	A,R3
	MOV	R5,A	;将最终偏移量的低八位存入R5中
	MOV	R4,#8	;通过(R5R6/R2)求根的低字节
SQR6:	CLR	C
	MOV	A,R3
	RLC	A
	MOV	R3,A
	CLR	C
	MOV	A,R5
	SUBB	A,R2
	JB	F0,SQR7
	JC	SQR8
SQR7:	MOV	R5,A
	INC	R3
SQR8:	CLR	C
	MOV	A,R5
	RLC	A
	MOV	R5,A
	MOV	F0,C
	DJNZ	R4,SQR6	;根的第二字节计算完,在R3中
	MOV	A,R7	;取原被开方数的左规次数
	JZ	SQRE	;未左规,开方结束
SQR9:	CLR	C	;按左规次数右移平方根,得到实际根
	MOV	A,R2
	RRC	A
	MOV	R2,A
	MOV	A,R3
	RRC	A
	MOV	R3,A
	DJNZ	R7,SQR9
SQRE:	RET
;*********************************************************
;*********************************************************
TABLE_SHU: DB  00H,00H,	00H,	00H,	00H,	00H,	00H,	00H,	00H,	00H,	00H,	00H,	00H,
DB 01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	01H,	
DB 02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	02H,	
DB 03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	03H,	
DB 04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	04H,	
DB 05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	05H,	
DB 06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	06H,	
DB 07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	07H,	
DB 08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	08H,	
DB 09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	
DB 09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,	09H,    09H




;;**************************************************
;(6) 标号: SUBB1 功能
;;入口条件:待被减数在R2,减数 R3中,
;出口信息:结果在R2中。
;影响资源:PSW、A、B、R2~R5 堆栈需求: 2字节
SUBB1:CLR C
      MOV A,R2
      SUBB A,R3
      MOV R2,A
RET
;****************************************





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -