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

📄 简易缩放尺.asm

📁 开发平台,任一MCS-51单片机上,很多程序,如键盘,显示,液晶驱动
💻 ASM
📖 第 1 页 / 共 2 页
字号:
          AJMP POCESSY_5
POCESS_Y: MOV R1,#19H
POCESSY_5:MOV A,R0
          MOV @R1,A

POCESSX_3:INC R0
          MOV R1,#16H 
POCESSX_20:INC R1          
          MOV A,@R1
          CJNE A,#00H,POCESSX_20
          MOV A,R0
          MOV @R1,A  
          
          
;;*************************************步进电机控制优先级输出

         MOV R0,#16H
PUT_OUT: INC R0   
         MOV A,@R0
         
          CJNE A,#31H,PUT_OUT_1   
          LCALL  MORTAL_A          
PUT_OUT_1:MOV A,@R0
          CJNE A,#32H,PUT_OUT_2
          LCALL  MORTAL_B            
PUT_OUT_2:MOV A,@R0
          CJNE A,#33H,PUT_OUT_2
          LCALL  MORTAL_C  
          MOV A,R0
          CJNE A,#19H,PUT_OUT
          LJMP EU_END ;返回主程序 
      













;*************************************************************计算绳拉长短和判断伸缩
CONTROL: MOV  START_HX,FACT_HX
         MOV  START_LX,FACT_LX
         MOV  START_HY,FACT_HY
         MOV  START_LY,FACT_LY
         LCALL BELT_B
         MOV OUT_B_H,R2
         MOV OUT_B_L,R3
         LCALL BELT_C
         MOV OUT_C_H,R2
         MOV OUT_C_L,R3
         LCALL BELT_A
         MOV OUT_A_H,R2
         MOV OUT_A_L,R3
         
         
         MOV  START_HX,END_HX
         MOV  START_LX,END_LX
         MOV  START_HY,END_HY
         MOV  START_LY,END_LY
         LCALL BELT_B
         MOV OUT_1_B_H,R2
         MOV OUT_1_B_L,R3
         LCALL BELT_C
         MOV OUT_1_C_H,R2
         MOV OUT_1_C_L,R3
         LCALL BELT_A
         MOV OUT_1_A_H,R2
         MOV OUT_1_A_L,R3
         
         
         CLR  SIGN_P_A
         CLR  SIGN_P_B
         CLR  SIGN_P_C
         
         MOV R2,OUT_A_H 
         MOV R3,OUT_A_L 
         MOV R4,OUT_1_A_H 
         MOV R5,OUT_1_A_L
         LCALL COMPY2
         JNB SIGN_BIG,LOOP_1
         SETB SIGN_P_A
         MOV R2,OUT_A_H 
         MOV R3,OUT_A_L 
         MOV R6,OUT_1_A_H 
         MOV R7,OUT_1_A_L
         LCALL SUBB2
         AJMP LOOP_2
  LOOP_1:MOV R2,OUT_1_A_H
         MOV R3,OUT_1_A_L 
         MOV R6,OUT_A_H 
         MOV R7,OUT_A_L
         LCALL SUBB2
  LOOP_2:MOV LINE_A_H,R2
         MOV LINE_A_L,R3
         
         MOV R2,OUT_B_H 
         MOV R3,OUT_B_L 
         MOV R4,OUT_1_B_H 
         MOV R5,OUT_1_B_L
         LCALL COMPY2
         JNB SIGN_BIG,LOOPX_1
         SETB SIGN_P_B
         MOV R2,OUT_B_H 
         MOV R3,OUT_B_L 
         MOV R6,OUT_1_B_H 
         MOV R7,OUT_1_B_L
         LCALL SUBB2
         AJMP LOOPX_2
  LOOPX_1:MOV R2,OUT_1_B_H
         MOV R3,OUT_1_B_L 
         MOV R6,OUT_B_H 
         MOV R7,OUT_B_L
         LCALL SUBB2
  LOOPX_2:MOV LINE_B_H,R2
         MOV LINE_B_L,R3
         
         
          MOV R2,OUT_C_H 
         MOV R3,OUT_C_L 
         MOV R4,OUT_1_C_H 
         MOV R5,OUT_1_C_L
         LCALL COMPY2
         JNB  SIGN_BIG,LOOPY_1
         SETB SIGN_P_C
         MOV R2,OUT_C_H 
         MOV R3,OUT_C_L 
         MOV R6,OUT_1_C_H 
         MOV R7,OUT_1_C_L
         LCALL SUBB2
         AJMP LOOPY_2
  LOOPY_1:MOV R2,OUT_1_C_H
         MOV R3,OUT_1_C_L 
         MOV R6,OUT_C_H 
         MOV R7,OUT_C_L
         LCALL SUBB2
  LOOPY_2:MOV LINE_C_H,R2
         MOV LINE_C_L,R3
         RET
;;;;;**********************
         
       
         
         
         
         
         
         
         










;;***********************************************************
BELT_B: MOV R2,START_HX ;平方
        MOV R3,START_LX
        MOV R6,START_HX
        MOV R7,START_LX
        LCALL MULD
        MOV CASE_HH,R2
        MOV CASE_HL,R3
        MOV CASE_H,R4
        MOV CASE_L,R5
        MOV R2,START_HY ;平方
        MOV R3,START_LY
        MOV R6,START_HY
        MOV R7,START_LY
        LCALL MULD
        MOV A,R2
        MOV R0,A
        MOV A,R3
        MOV R1,A
        MOV A,R4
        MOV R2,A
        MOV A,R5
        MOV R3,A
        MOV R4,CASE_HH
        MOV R5,CASE_HL
        MOV R6,CASE_H
        MOV R7,CASE_L
        LCALL ADD4
        MOV A,R3
        MOV R5,A
        MOV A,R2
        MOV R4,A
        MOV A,R1
        MOV R3,A
        MOV A,R0
        MOV R2,A
        LCALL SH4
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BELT_C:MOV R2,#02H
       MOV R3,#58H
       MOV R6,START_HX ;平方
       MOV R7,START_LX ;平方
       LCALL SUBB2
       MOV A,R2
       MOV R6,A
       MOV A,R3
       MOV R7,A
       LCALL MULD
       MOV CASE_HH,R2
       MOV CASE_HL,R3
       MOV CASE_H,R4
       MOV CASE_L,R5
        MOV R2,START_HY ;平方
        MOV R3,START_LY
        MOV R6,START_HY
        MOV R7,START_LY
        LCALL MULD
        MOV A,R2
        MOV R0,A
        MOV A,R3
        MOV R1,A
        MOV A,R4
        MOV R2,A
        MOV A,R5
        MOV R3,A
        MOV R4,CASE_HH
        MOV R5,CASE_HL
        MOV R6,CASE_H
        MOV R7,CASE_L
        LCALL ADD4
        MOV A,R3
        MOV R5,A
        MOV A,R2
        MOV R4,A
        MOV A,R1
        MOV R3,A
        MOV A,R0
        MOV R2,A
        LCALL SH4
        
        RET
 ;;*****************************
BELT_A: MOV R2,#01H
        MOV R3,#2CH
        MOV R4,START_HX
        MOV R5,START_LX
        LCALL COMPY2
        JB SIGN_BIG,NEXT_1
       MOV R2,START_HX
       MOV R3,START_LX
       MOV R6,#01H
       MOV R7,#2CH
       LCALL SUBB2
       AJMP NEXT_2
NEXT_1:MOV R2,#01H
       MOV R3,#2CH
       MOV R6,START_HX
       MOV R7,START_LX
       LCALL SUBB2
NEXT_2:MOV A,R2
       MOV R6,A
       MOV A,R3
       MOV R7,A
       LCALL MULD
       MOV CASE_HH,R2
       MOV CASE_HL,R3
       MOV CASE_H,R4
       MOV CASE_L,R5
       MOV R2,#02H
       MOV R3,#08H
       MOV R6,START_HY
       MOV R7,START_LY
       LCALL SUBB2
       MOV A,R2
       MOV R6,A
       MOV A,R3
       MOV R7,A
       LCALL MULD
        MOV A,R2
        MOV R0,A
        MOV A,R3
        MOV R1,A
        MOV A,R4
        MOV R2,A
        MOV A,R5
        MOV R3,A
        MOV R4,CASE_HH
        MOV R5,CASE_HL
        MOV R6,CASE_H
        MOV R7,CASE_L
        LCALL ADD4
        MOV A,R3
        MOV R5,A
        MOV A,R2
        MOV R4,A
        MOV A,R1
        MOV R3,A
        MOV A,R0
        MOV R2,A
        LCALL SH4
        
        RET
 ;;;;*********************************************双字节比较大小
;标号:  COMPY2    功能:无符号双字节比较大小(快速)
;入口条件:R2、R3,   数2 R4、R5中。 注意高字节是R2
;出口信息:标志位在SIGN_BIG,数一比数二大标志位置1
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节
COMPY2: SETB SIGN_BIG
        CLR C
        MOV A,R2
        SUBB A,R4
        JNC COMPY_3
        CLR SIGN_BIG
        RET
COMPY_3:CLR C
        JNZ COMPY_4
        MOV A,R3
        SUBB A,R5
        JNC COMPY_4
        CLR SIGN_BIG
COMPY_4:RET
;*****************************************************
;*****************************************************
;标号:  SH4    功能:四字节二进制无符号数开平方(快速)
;入口条件:被开方数在R2、R3、R4、R5中。 注意高字节是R2
;出口信息:平方根在R2、R3中,整数部分的位数为原数的一半,其余为小数。
;影响资源:PSW、A、B、R2~R7    堆栈需求:  2字节
;*****************************************************
SH4:	MOV	A,R2
	ORL	A,R3
	ORL	A,R4
	ORL	A,R5
	JNZ	SH40
	RET		;被开方数为零,不必运算
SH40:	MOV	R7,#0	;左规次数初始化
	MOV	A,R2
SH41:	ANL	A,#0C0H	;被开方数高字节小于40H否?
	JNZ	SQRH	;不小于40H,左规格化完成
	MOV	R6,#2	;每左规一次,被开方数左移两位
SH42:	CLR	C	;被开方数左移一位
	MOV	A,R5
	RLC	A
MOV	R5,A
	MOV	A,R4
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DJNZ	R6,SH42	;被开方数左移完两位
	INC	R7	;左规次数加一
	SJMP	SH41	;继续左规
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
;*********************************************************
;*********************************************************
;**************************************************************
;*****************四字节二进制无符号数加法*********************
;**************************************************************
;程序名:ADD4
;入口条件:被加数在R0.R1.R2.R3中,减数在R4.R5.R6、R7中。
;出口信息:结果在R0.R1.R2.R3。
;影响资源:PSW、A、B、R2~R7 堆栈需求:2字节
ADD4:CLR C
     CLR F0
     MOV A,R3
     ADD A,R7
     MOV R3,A
     JNC ADD_X
     SETB F0
ADD_X:CLR C
      MOV A,R2
      ADD A,R6
      JNB F0,ADD_Y
      INC A
      CLR F0
ADD_Y: MOV R2,A
       MOV A,R1
       ADDC A,R5
       MOV R1,A
       MOV R0,#00H
       MOV R4,#00H
RET




;**************************************************************
;*****************双字节二进制无符号数减法*********************
;**************************************************************
;程序名:SUBB2
;入口条件:被减数数在R2、R3中,减数在R6、R7中。
;出口信息:结果在R2.R3。
;影响资源:PSW、A、B、R2~R7 堆栈需求:2字节
SUBB2:CLR C
      MOV A,R3
      SUBB A,R7
      MOV R3,A
      MOV A,R2
      SUBB A,R6
      MOV R2,A

	RET
;**************************************************************
;**************************************************************
;*****************双字节二进制无符号数乘法*********************
;**************************************************************
;程序名:MULD
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求:2字节
MULD:	MOV	A,R3	;计算R3乘R7
	MOV	B,R7
        MUL	AB
	MOV	R4,B	;暂存部分积
	MOV	R5,A    ;将低位送入R5
	MOV	A,R3	;计算R3乘R6
	MOV	B,R6
	MUL	AB
	ADD	A,R4	;累加部分积
	MOV	R4,A
	CLR	A
	ADDC	A,B
	MOV	R3,A
	MOV	A,R2	;计算R2乘R7
	MOV	B,R7
	MUL	AB
	ADD	A,R4	;累加部分积
	MOV	R4,A
	MOV	A,R3
	ADDC	A,B
	MOV	R3,A
	CLR	A       ;将进位位移入A的最低位
	RLC	A       ;将进位位移入A的最低位
	XCH	A,R2	;计算R2乘R6
	MOV	B,R6
	MUL	AB
	ADD	A,R3	;累加部分积
	MOV	R3,A
	MOV	A,R2
	ADDC	A,B
	MOV	R2,A
	RET
;**************************************************************









⌨️ 快捷键说明

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