📄 aexp8-1.asm
字号:
;*********************************************************************
; Aexp8-1.asm 声-光报警程序 *
; 运行步骤:1.按下一次开关SW3,开始声-光报警,再按下一次则停止;重复上述操作*
; 2.按下"q"或者"Q",退出 *
;*********************************************************************
sseg segment para stack 'stack'
dw 200 dup (?)
sseg ends
dseg segment para public 'data'
message db 'press SW3 to start and then press SW3 to stop,and so on!',0ah,0dh ;系统提示信息
db 'if you want to quit,please hit ''q'' or ''Q''!',0ah,0dh,'$'
flag db 0 ;初始化状态标志变量为0
t dw 0 ;初始化延时变量为0
dseg ends
cseg segment para public 'code'
assume ss:sseg,cs:cseg,ds:dseg
m proc far
start: mov ax,ds
push ax
mov ax,00h
push ax ;保留程序数据段地址
mov ah,09h ;显示系统提示信息
mov dx,seg message
mov ds,dx
mov dx,offset message
int 21h
;初始化8255
mov dx,303h ;取8255的控制端口的地址
mov al,83h ;初始化8255的A口和C口高四位为输出模式
out dx,al ;B口和C口低四位为输入模式
;初始化灯LED全灭
mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
wait1: ;检测"q"或者"Q"键
mov ah,0bh
int 21h ;调用DOS 21H 功能0BH 进行键盘判断
inc al
jnz readpc ;检测是否有键按下
mov ah,08h
int 21h ;调用DOS 21H 功能08H 进行键盘输入判断
cmp al,'q'
jz quit ;检测到"q",退出
cmp al,'Q'
jz quit ;检测到"Q",退出
readpc: ;判断开关SW3的状态
mov dx,302h ;读端口C的值
in al,dx ;当按下开关SW3时,PC2口为低电
test al,04h ;检测PC2口状态
jnz case
lp: in al,dx
test al,04h
jz lp ;循环检测直至放开
xor flag,01h ;将状态值取反
case: cmp flag,01h ;进行状态值比较
jne stop
begin: ;灯LED全亮
mov dx,300h ;取8255的端口A的地址
mov al,0ffh ;使8255的PA0-PA7全为1
out dx,al ;使所有的灯LED全亮
mov bx,800
mov t,800
d1: call outport ;喇叭发出高频的声音
dec bx
jnz d1 ;所有的灯LED全亮的时间
;灯LED全灭
mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
mov bx,200
mov t,4000
d2: call outport ;喇叭发出低频的声音
dec bx
jnz d2 ;所有的灯LED全灭的时间
call delay2
jmp wait1
;灯LED全灭
stop: mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
jmp wait1
quit: ;灯LED全灭
mov dx,300h ;取8255的端口A的地址
mov al,00h ;使8255的PA0-PA7全为0
out dx,al ;使所有的灯LED全灭
;返回DOS
mov ah,4ch ;DOS功能调用
int 21h ;返回DOS
m endp
delay1 proc
push bx
mov bx,t
dl1: dec bx
jnz dl1
pop bx
ret
delay1 endp
delay2 proc
push cx
push bx
mov cx,1ffh
dl3: mov bx,0ffffh
dl4: dec bx
jnz dl4
dec cx
jnz dl3
pop bx
pop cx
ret
delay2 endp
;喇叭发出声音
outport proc
mov dx,303h ;取8255的控制端口的地址
mov al,0dh
out dx,al ;置PC6=1
call delay1
mov dx,303h ;取8255的控制端口的地址
mov al,0ch
out dx,al ;置PC6=0
call delay1
ret
outport endp
cseg ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -