📄 aexp15-3.asm
字号:
;********************************************************
; Aexp15-3.asm 步进电机点动控制程序 *
; 运行步骤:1.每按下一次开关SW2,步进电机走一步,不按则不动 *
; 2.按下任意键,退出 *
;********************************************************
code segment
assume cs:code,ds:code
org 100h
start:jmp begin
psta db 45h,41h,51h,50h,54h,14h,15h,05h ;正向加电数据表
delaytime dw (?) ;延时变量参数
message db 'press SW2 to move a step!',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
l0: mov si,offset psta ;取正向加电数据表地址
mov cx,08h ;设置数据表循环参数
loop: ;检测任意键
mov ah, 0bh ;调用DOS 21H 功能0BH 进行键盘判断
int 21h
cmp al, 00h
jne over ;检测到任意键退出
;判断开关SW1的状态
mov dx,302h ;取8255的端口C的地址
in al,dx ;读端口C的值
;当按下开关SW1时,PC0口为低电平
test al,01h ;检测PC0口的状态
jnz loop
l1: in al,dx
test al,01h
jz l1 ;循环检测直至放开
;延时
mov delaytime,0ffffh ;设置延时变量参数值,采用的是软件
;延时方式,此值根据主机的频率而设定
mov ah,03h ;设置循环延时参数
l2: mov bx,delaytime ;进行软件延时,可根据主机频率
l3: dec bx ;调整延时变量参数值和循环延时参数
jnz l3
dec ah
jnz l2
;送加电数据
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 + -