汇编:控制电机转动

要求: 

1、开关一控制电机转停;

2、开关二控制电机转动的方向;

3、开关三控制电机转动的速度;

4:电机相关的状态可以在三极管中显示出来。

使用软件:

proteus

代码如下:

CODE    SEGMENT 
        ASSUME CS:CODE,DS:DATA,SS:STACK;注意这里格式,程序段,数据段,栈堆段都需要

ORG 800H;
START:
;2注意 DS数据段地址 SS栈堆段地址 SP栈顶地址写入。同步后边更改DS SS SP时候注意寄存器保护和恢复(PUSH  POP)	
	MOV AX,DATA
	MOV DS,AX
	MOV AX,STACK;使用了子函数,中断函数等,必须要有,才能对现场进行入栈保护。
	MOV SS,AX
	MOV SP,64H
	;注意,为了中断系统运行正常,建议第一优先初始化好中断,然后进行其他接口的初始化
	;注意:入下中断向量表写入时候借用了DS,必须保护DS
	CLI

START1: MOV     DX,8006H    ;;初始化8255    
        MOV     AX,90H        ;方式0,A口输入,B、C口输出 
        OUT     DX,AX  
	   
START2:    MOV CX,8            ;8拍为一次循环      
           MOV DX,8002H         ;电机停,数码管关闭
	   MOV AL,0H
	   OUT DX,AL
START3:    MOV DX,8000H
	   IN AL,DX
	   TEST AL,01H       ;检测是否停止
	   JZ START2
	  MOV DX,8002H       ;数码管显示
	   MOV AL,0FFH
	   OUT DX,AL
	   MOV DX,8000H     ;检测点击转动方向
	   IN AL,DX
	   TEST AL,02H     
	   JNZ CIRCLE2
CIRCLE1 :        LEA SI,FR   ;反转
                 MOV DX,8004H
		 MOV AL,60H
		 OUT DX,AL
                 JMP R1
CIRCLE2:        LEA SI,ZR    ;正转
                MOV DX,8004H
		 MOV AL,50H
		 OUT DX,AL
                JMP R1		 
R1:     MOV     DX,8004H        
        MOV AL,[SI+BX]      ;高电平,确定所要取那个节拍
        OUT     DX,AL
	CALL DELAY1
	
LOW1:	MOV DX,8004H
        MOV AL,050H
	OUT DX,AL              ;低电平,即一次方波结束
	MOV DX,8000H
	IN AL,DX
	TEST AL,04H         ;检测转动快慢,快速跳转
	JZ F1
	TEST AL,08H          ;检测转动快慢,中速跳转
	JZ M1
	JMP L1
L1:	CALL DELAY2       ;低速转
	JMP STILL
	
M1:	CALL DELAY1           ;中速转
	JMP STILL
	
F1:	CALL DELAY0          ;快速转
	JMP STILL
		
STILL:	;INC SI
        DEC CX
	MOV BX,CX         ;转到哪一拍
        CMP CX,0
        JNZ START3
        JMP START2	

	;;;;;;;;;;;;;;;;;;;;延迟程序,不同延迟程序控制电机转动快慢			
DELAY0:
	PUSH CX
	MOV CX,20H
	LOOP $
	POP CX
	RET	

DELAY1:
	PUSH CX
	MOV CX,40H
	LOOP $
	POP CX
	RET

DELAY2:
	PUSH CX
	MOV CX,0D0H
	LOOP $
	POP CX
	RET

DELAY3:
	PUSH CX
	MOV CX,01F0H
	LOOP $
	POP CX
	RET
	
CODE    ENDS
;数据段
DATA SEGMENT
ZR DB 01H,03H,02H,06H,04H,0CH,08H,09H   ;正转
FR DB 09H,08H,0CH,04H,06H,02H,03H,01H   ;反转
DATA ENDS
;栈堆段
STACK   SEGMENT 
STA     DB  200 DUP(0)
TOP     EQU LENGTH STA
STACK   ENDS
        END START  

连接电路图:

作者代码编写能力较差,望感兴趣的大佬路过能提供更好的思路。 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值