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

📄 another.asm

📁 这是接口课程设计时做的一个控制电机转动的程序
💻 ASM
字号:
           data SEGMENT
  infor0 DB 'instruction:',0ah,0dh,'$'
  infor1 DB '  1 Switch_no(0,1,2,3,4,5,6)==Speed_rank(0,1,2,3,4,5,6)',0ah,0dh,'$'
  infor2 DB '  2 Switch_7(1,0)==Rotate_direction(+,-)',0ah,0dh,'$'
  infor3 DB '  3 No switch==Stop',0ah,0dh,'$'
  infor6 DB '  exit !!',0ah,0dh,'$'
  temp DB 0
sign DB 0
data ENDS
code SEGMENT
	ASSUME DS:data,CS:code
start:	MOV AX,data
	MOV DS,AX

	MOV       AH,7                  ;清屏
        MOV       AL,0
        MOV       CL,0
        MOV       DH,24
        MOV       DL,79
        MOV       BH,7
        INT       10h

        MOV AH,9			;解说
        MOV DX,OFFSET infor0
        INT 21H
        MOV DX,OFFSET infor1
        INT 21H
        MOV DX,OFFSET infor2
        INT 21H
        MOV DX,OFFSET infor3
        INT 21H
;***************************************************bl步进控制信息;cl延时次数;al开关状态
          MOV AL,89h		;8255初始化
          MOV DX,28bh 
          OUT DX,AL
	  MOV BL,33h		;步进初值

          MOV DX,283h
          MOV AL,00110000b
          OUT DX,AL
          MOV AX,CS
	  MOV DS,AX
	  MOV DX,OFFSET int7
	  MOV AX,250fh
	  INT 21h                  ;设中断程序int7的类型号为0fh
	  CLI                      ;清中断标志位
	  IN  AL,21h               ;读中断屏蔽寄存器
	  AND AL,7fh               ;开放IRQ7中断
	  OUT 21h,AL
          sti
          
  main:   MOV DX,288h		;;主过程
          MOV AL,BL		
          OUT DX,AL

          MOV AH,0bh		;检查键盘
          INT 21h 
          INC AL	
          JZ exit		;有键按下则退出

          MOV DX,28ah		;c口读入
          IN AL,DX		;开关状态输入到al
	  MOV sign,AL		;保存状态到sign
	  AND AL,7fh		;屏蔽最高位k7,同时察看开关是否全为0
     	  JZ stop		;全为0则关闭输出
	  AND BL,0ffh		;考察开关之前是否被关闭
	  JZ open		;打开开关
L2:	  AND sign,80h 		
          JZ negative		;最高位为0则反转
          MOV AL,BL		;最高位为1则正转
          ROL AL,1
	  MOV BL,AL
          JMP L3

negative: MOV AL,BL
	  ROR AL,1
	  MOV BL,AL
l3:	  MOV CL,1		;cl作为延时计数

mad:      MOV temp,AL			;
          AND AL,1		;计算延时并保存到cl中
          JNZ m1
	  MOV AL,temp			;
	  ROR AL,1
	  INC CL
          JMP mad	
	 
m1:       mov temp,cl

next1:
          MOV DX,280h
	  MOV AL,00              
	  OUT DX,AL
	  MOV AL,10
	  OUT DX,AL   
  	  HLT
  	  LOOP next1

         	  AND sign,80h 		
          JZ negative		;最高位为0则反转
          MOV AL,BL		;最高位为1则正转
          ROL AL,1
	  MOV BL,AL
          JMP main

negative: MOV AL,BL
	  ROR AL,1
	  MOV BL,AL 

          JMP main
  
stop:	  
          MOV BL,0
	  JMP main
            
open:	  MOV BL,33h
	  JMP l2	     


exit:	MOV AH,9			
        MOV DX,OFFSET infor6
        INT 21H
        MOV AH,4ch
	INT 21h
int7:                          
	   push ax
	   push dx
           ;mov al,temp
           ;ADD AL,30h
	   MOV DL,temp
	   MOV AH,02h
	   INT 21h      
           mov al,20h
           out 20h,al
	   pop dx
	   pop ax
           IRET

DELAY PROC NEAR   ;0.05秒延时
        PUSH CX
        PUSH AX
        MOV CX,1000H
 to1:    MOV AX,017FFH
 to2:    DEC AX
        JNZ to2
        LOOP to1
        POP AX
        POP CX
        RET
DELAY  ENDP      
code ENDS
END start

⌨️ 快捷键说明

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