📄 aexp15-6.asm
字号:
code segment
assume cs:code,ds:code
org 100h
start:jmp begin
B db 05h,15h,14h,54h,50h,51h,41h,45h ;反向加电数据表
A 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 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口低四位为输入模式
wait: ;打开74ls373
mov al,08h
out dx,al ;置pc4=0,打开数据缓冲器74LS373
;检测任意键
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口为低电平
test al,01h ;检测pc0口状态
jnz wait
l1 : in al,dx
test al,01h
jz l1 ;循环检测直至放开
xor status,01h ;将方向状态值取反
cmp status,01h ;进行方向状态值比较
je l2
mov si,offset B ;取反向加电数据表地址
jmp l3
l2: mov si,offset A ;取正向加电数据表地址
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 ;检测到任意键退出
;判断开关SW2的状态
mov dx,302h ;取8255的端口C的地址
in al,dx ;读端口C的值
;当按下开关SW2时,PC1口为低电平
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 ;进行新的一轮循环
;关闭74ls373
stop: mov dx,303h ;取8255的控制端口的地址
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
jmp wait
over: ;关闭74ls373
mov dx,303h ;取8255的控制端口的地址
mov al,81h
out dx,al
mov al,09h
out dx,al ;置pc4=1,关闭数据缓冲器74LS373
;返回DOS
mov ah, 4ch ;DOS功能调用
int 21h ;返回DOS
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -