📄 stepping_motor.asm
字号:
;***********************************************************************
; Aexp15-6.asm 步进电机起/停,正/反循环控制程序 *
; 运行步骤:1.按下一次开关SW2,步进电机顺时针旋转,按下一次开关SW1则停止 *
; 再按下一次开关SW2,步进电机反时针旋转,再按下一次开关SW1则停止 *
; 重复上述操作,则会出现同样现象 *
; 2.按下任意键,退出 *
;***********************************************************************
code segment
assume cs:code,ds:code
org 100h
start:jmp begin
pstb db 05h,15h,14h,54h,50h,51h,41h,45h ;反向加电数据表
psta db 45h,41h,51h,50h,54h,14h,15h,05h ;正向加电数据表
status db 0 ;初始化方向状态标志变量为0
delaytime dw (?) ;延时变量参数
message db 'press SW2 to clockwise to start and press SW1 to stop!' ;系统提示信息
db 0ah,0dh
db 'then press SW2 to counterclock to start and press SW1 to stop,'
db 'and so on!',0ah,0dh
db 'if you want to quit,please hit any key!',0ah,0dh,'$'
begin:mov ax,cs
mov ds,ax ;取程序数据段地址
mov dx,offset message ;显示系统提示信息
mov ah,9
int 21h
mov al,81h ;初始化8255
mov dx,303h ;取8255的控制端口的地址
out dx,al ;初始化8255的A口,B口和C口高四位为输出模式,C口低四位为输入模式
wait: mov al,08h ;打开74ls373
mov dx,303h ;置pc4=0,打开数据缓冲器74LS373
out dx,al
mov ah, 0bh ;检测任意键
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
cmp al, 00h
jne over ;检测到按下键盘任意键退出
mov dx,302h ;判断开关SW1的状态,取8255的c端口的地址
in al,dx ;读c端口的值
test al,01h ;当按下开关sw1时,pc0口为低电平;检测pc0口状态
jnz wait ;
l1 : in al,dx ;循环检测直至按下开关
test al,01h
jz l1
xor status,01h ;将方向状态值取反
cmp status,01h ;进行方向状态值比较
je l2 ;判断变量status是否为01h,是取正向数据;否取反向数据
mov si,offset pstb ;取反向加电数据表地址
jmp l3
l2: mov si,offset psta ;取正向加电数据表地址
jmp l3
l0: pop si
l3: push si
mov cx,08h ;设置数据表循环参数
loop: mov ah, 0bh ;检测任意键
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
cmp al, 00h
jne over ;检测到按下键盘任意键退出
mov dx,302h ;取8255的端口C的地址
in al,dx ;读端口C的值
test al,02h ;检测PC1口状态
jnz l5
l4: in al,dx
test al,02h
jz l4 ;循环检测直至放开
jmp stop
l5: mov delaytime,0ffffh ;设置延时变量参数值,采用的是软件
mov ah,03h ;设置循环延时参数
l6: mov bx,delaytime ;进行软件延时,可根据主机频率
l7: dec bx ;调整延时变量参数值和循环延时参数
jnz l7
dec ah
jnz l6
mov al ,[si] ;送加电数据
mov dx,300h ;取8255的端口A的地址
out dx,al ;输出加电数据到端口A
inc si ;改变加电数据地址
dec cx ;修改数据表循环参数
jnz loop ;判断数据表循环是否结束
jmp l0 ;进行新的一轮循环
stop:
mov dx,303h ;取8255的控制端口的地址
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
jmp wait
over: mov dx,303h ;置PC4=1,关闭74LS373
mov al,09
out dx,al ;返回DOS
mov ah, 4ch ;DOS功能调用
int 21h ;返回DOS
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -