📄 aexp15-2.asm
字号:
;*************************************************************************
; Aexp15-2.asm 步进电机方向控制程序 *
; 运行步骤:1.按下开关SW1,步进电机顺时针旋转;按下开关SW2,步进电机反时针旋转 *
; 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 ;正向加电数据表
delaytime dw (?) ;延时变量参数
message db 'press SW1 to clockwise,press SW2 to counterclock!',0ah,0dh ;系统提示信息
db 'if you want to quit,please hit any key!',0ah,0dh,'$'
begin:mov ax,cs
mov ds,ax ;取程序数据段地址
mov ah,09h ;显示系统提示信息
mov dx,seg message
mov ds,dx
mov dx,offset message
int 21h
;初始化8255
mov dx,303h ;取8255的控制端口的地址
mov al,81h ;初始化8255的A口,B口和C口高四位为输出模式
out dx,al ;C口低四位为输入模式
;打开74ls373
mov al,08h
out dx,al ;置pc4=0,打开数据缓冲器74LS373
l1: mov si,offset psta ;取正向加电数据表地址
jmp l3
l2: mov si,offset pstb ;取反向加电数据表地址
l3: push si
jmp l4
l0: pop si
push si
l4: mov cx,08h ;设置数据表循环参数
loop: ;检测任意键
mov ah, 0bh
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
cmp al, 00h
jne over ;检测到任意键退出
;判断开关SW1的状态
mov dx,302h ;取8255的端口C的地址
in al,dx ;端口C的值
;当按下开关SW1时,PC0口为低电平;当按下开关SW2时,PC1口为低电平
test al,01h ;检测PC0口状态
jnz l6
l5: in al,dx
test al,01h
jz l5 ;循环检测直至放开
jmp l1
l6: test al,02h ;检测PC1口状态
jnz l8
l7: in al,dx
test al,02h
jz l7 ;循环检测直至放开
jmp l2
;延时
l8: mov ah,03h ;设置循环延时参数
mov delaytime,0ffffh ;设置延时变量参数值,采用的是软件
;延时方式,此值根据主机的频率而设定
l9: mov bx,delaytime ;进行软件延时,可根据主机频率
l10: dec bx ;调整延时变量参数值和循环延时参数
jnz l10
dec ah
jnz l9
;送加电数据
mov al,[si] ;取当前加电数据
mov dx,300h ;取8255的端口A的地址
out dx,al ;输出加电数据到端口A
inc si ;改变加电数据地址
dec cx ;修改数据表循环参数
jnz loop ;判断数据表循环是否结束
jmp l0 ;进行新的一轮循环
over: ;关闭74ls373
mov dx,303h ;取8255的控制端口的地址
mov al,81h
out dx,al
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
;保护8255
;mov al,9Bh ;置8255的A口,B口和C口为输入模式
;out dx,al ;对8255进行保护
;返回DOS
mov ah, 4ch ;DOS功能调用
int 21h ;返回DOS
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -