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

📄 motor_control.asm

📁 c语言编写51单片机键盘扫描程序
💻 ASM
字号:




RUB:
   MOV R0,#20H	;指向状态计数器
   INC @R0		;计数器加一,正转
   MOV P1,@R0	 ;送输出口
   CLR EA		 ;关总中断
   INC R0		 ; 指针指向21H
   INC @R0       ;绝对坐标加一
   CJNE @R0,#0DH,RUB1;不进位则转
   INC R0			  ;进位则位加一
   INC @R0			  ;
   CJNE @R0,#0DH,RUB1	;
   INC R0			   ;高位加一
   INC @R0			   ;
RUB1:				   ;
   SETB EA			   ; 开总中断
   DEC R6			   ; 增量坐标减
   CJNE R6,#0FFH,RUB2  ; 查借位否
   DEC R7			   ; 
					   ;
RUB2:				   ;;
   MOV A,R6			   ;
   ORL A,R7			   ;
   JNZ RUB3			   ;;查增量坐标为0否
   CLR TR0			   ;
   SJMP RUB4		   ;  不为0转出继续执行
RUB3:				   ;
   CLR TR0			   ; 加载定时器
   MOV A,R2			   ;
   ADD A,TL0		   ;
   MOV TL0,A		   ;
   MOV A,R3			   ;
   ADDC A,TH0		   ;
   MOV TH0,A		   ;
   SETB TR0			   ;
RUB4:				   ;
   RETI				   ;


mov 21h,#20
mov 22h,#0
mov 23h,#0









;R0:中间结果寄存器;
;20H,状态寄存器;
;21H、22H、23H系统绝对坐标值;
;R1,存储过程速度字,初始存储启动速度字
;R3,存储每档运行的步数,初始存储启动速度档的运行参数sN,s为启动速度字
;24H,25H:存储升速过程总步数1N+2N+....(m-1)N,其中1,2....(m-1)为速度字,m为要求的恒速运行速度字
;26H,27H,28H存储恒速过程总步数,由起点至终点运行的总步数减去两倍升速过程总步数得到
;29H,2AH:存储降速过程总步数,可取与升速过程相同
;R4,存储数据指针,初始存#24H  (#24H,表示升速阶段;#26H,表示恒速阶段;#29H,表示降速阶段)

TIM:
    MOV R0,#20H	 ;	取状态计数器
	INC @R0		  ;	计数器加一,正转一步
	MOV P1,@R0	  ;	送输出口
	CLR EA		  ;	关总中断
	INC R0		  ;	指针指向绝对坐标值
	INC @R0		  ;	绝对坐标值加一
	CJNE @R0,#0H,TIM1 ;	 判断绝对坐标的低八位(21H)有没有进位,如果有,则向22H进位,
	INC R0			  ;
	INC @R0			  ;
	CJNE @R0,#0H,TIM1 ;	  判断绝对坐标的中间八位(22H)有没有进位,如果有,则向23H进位,
	INC R0			   ;
	INC @R0			   ;


TIM1:				   ;
    SETB EA			   ;开中断
	CJNE R4,#24H,TIM4  ;测试R4判断系统处于哪个阶段
	MOV R0,#24H		   ; 是升速段
	DEC @R0			   ; 升速步数减一
	CJNE @R0,#0FFH,TIM2	; 24H,25H双字节自减一,判断有无借位
	INC R0				;
	DEC @R0				;

TIM2:					;
    DJNZ R3,TIM3		;判断该档速度走完否,否则转
	INC R1				;走完增一档
	MOV A,R1			;计算该档步数
	MOV B,#10			;设置每档走10步
	MUL AB				;档数越大,走的步数越多,
	MOV R3,A			;  存放该档步数


TIM3:					;
	MOV A,24H			;未结束,转重新装载
	ORL A,25H			;结束,则重置指针指恒速
	JNZ TIM9			;
	MOV R4,#26H			 ;
	SJMP TIM9			 ;


TIM4:					 ;
    CJNE R4,#26H,TIM6	 ;判断是否恒速段否,否转
	MOV R0,#26H			 ;是,恒速步数减一
	DEC @R0				 ;
	CJNE @R0,#0FFH,TIM5	 ;
	INC R0				 ;
	DEC @R0				 ;
	CJNE @R0,#0FFH,TIM5	 ;
	INC R0				 ;
	DEC @R0				 ;


TIM5:					 
    MOV A,26H			  ;判断恒速段结束否
	ORL A,27H			  ;
	ORL A,28H			  ;
	JNZ TIM9			  ;未结束,转重新装载
	MOV R4,#29H			  ;结束,则重置指针指降速
	DEC R1				  ;降低第一档步数
	MOV A,R1			  ;
	MOV B,#10			  ;设置每档走10步
	MUL AB				  ;
	MOV R3,A			  ;
	SJMP TIM9			  ;转重新装载
TIM6:					  ;
    MOV R0,#29H			  ;处理降速段
	DEC @R0				  ;降速段步数减一
	CJNE @R0,#0FFH,TIM7	  ;
	INC R0				  ;
	DEC @R0				  ;
TIM7:					  ;
    DJNZ R3,TIM8		  ;判断该档走完否,否转
	DEC R1				  ;走完,降一档
	MOV A,R1			  ;计算该档步数
	MOV B,#10			  ;设置每档走10步
	MUL AB				  ;
	MOV R3,A			  ;存好步数
TIM8:					  ;
    MOV A,29H				 ;判断降速段走完否
	ORL A,2AH				 ;
	JNZ TIM9				 ;未完,转重新装载
	CLR TR0					 ;完成,则停止定时器,结束运行
	SJMP TIM10				 ;
TIM9:						 ;
    MOV DPTR,#8F00H			 ; 开始准备装载定时器
	MOV A,R1				 ; 提取速度字
	RL A					 ; 乘2,因每档占两个字节
	MOV B,A					 ;
	MOVC A,@A+DPTR			 ; 取低位字节
	CLR TR0					 ;
	ADD A,TL0				 ;
	MOV TL0,A				 ; 存低位字节
	MOV A,B					 ;
	INC A					 ;
	MOVC A,@A+DPTR			 ; 取高位字节
	ADDC A,TH0				 ;
	MOV TH0,A				 ; 存高位字节


    cpl p3.1

	SETB TR0				 ;
TIM10:						 ;
    RETI					 ;

⌨️ 快捷键说明

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