📄 aexp15.asm
字号:
;*-----------------------------------------------------------*
;* Aexp15.asm 步进电机綜合控制实验 *
;* 步进电机方向/速度/起动控制程序source file *
;* Copyright (c) 2002 by HUST *
;*-----------------------------------------------------------*
stack segment stack
db 256 dup(?)
stack ends
DATA SEGMENT
PSTA DB 05H, 15H, 14H, 54H, 50H, 51H, 41H, 45H
mess db 'Press SW2 to start step-moter !',0dh,0ah,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:data,ss:stack
BEGIN: MOV AX, data
MOV DS, AX
mov ah, 09h ;显示提示信息
mov dx,offset mess
int 21h
MOV DX, 303H ;8255A初始化
MOV AL, 81H
OUT DX, AL
MOV AL, 09H ;关闭LS373,置PC4=1
OUT DX, AL
MOV CH, 50 ;正走步数送CH
WAIT1: MOV DX, 302H ;PC口
IN AL,DX
AND AL,01 ;查SW2是否按下(PC0=0)?
JNZ WAIT1 ;未按下,等待
MOV DX, 303H ;8255命令口
MOV AL, 08H ;打开LS373,置PC4=0
OUT DX, AL
L1: MOV CL,08 ;循环次数送CL
MOV SI, OFFSET PSTA ;正走相序表指针送SI
L2: MOV DX, 300H ;相序表内容送PB口
MOV AL, [SI]
OUT DX, AL ;步进电机走1步
push cx
mov cx, 0ffh
dl10: MOV BX, 0FFF0H ;延时1
DL1: DEC BX
JNZ DL1
dec cx
jnz dl10
pop cx
INC SI ;指针加1
DEC Ch ;正走步数减1
JZ REW ;50步已到,则反走
DEC Cl ;50步未到,则检测循环次数
JNZ L2 ;循环次数不到8次,则继续送数
JMP L1 ;已到8次,则重新赋值
REW: MOV CH, 200 ;反走步数送CH
L3: MOV CL, 08 ;循环次数送CL
MOV SI, OFFSET PSTA+7 ;反走相序表指针SI
L4: MOV DX, 300H ;相序表内容送PB口
MOV AL, [SI]
OUT DX, AL ;步进电机走1步
push cx
mov cx, 0ffh
dl20: MOV BX, 0FFFH ;延时2
DL2: DEC BX
JNZ DL2
dec cx
jnz dl20
pop cx
DEC SI ;指针减1
DEC CH ;反走步数减1
JZ QUIT ;200步已到,则停止
DEC CL ;200步未到,则检测循环次数
JNZ L4 ;循环次数未到,则继续送数
JMP L3 ;循环次数已到8次,则重新赋值
QUIT: MOV DX, 303H ;8255A命令口
MOV AL,81H
OUT DX,AL
MOV AL, 09H ;关闭LS373,置PC4=1
OUT DX, AL
MOV AX, 4C00H ;程序退出
INT 21H
CODE ENDS
END BEGIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -