?? 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 + -