当前位置:文档之家› 自动温控声光报警系统

自动温控声光报警系统

;*********************************
;* 自动温控声光报警系统 *
;*********************************

:数据段
data segment
io8255a equ 288h
io8255c equ 28ah
io8255contl equ 28bh
io0832c equ 290h
io8253a equ 280h
io8253b equ 283h
io0809a equ 298h

buf1 dw 0
buf2 dw 0
table dw 524 1048
data ends

;代码段
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
call adcollect ;调用采集温度子程序,温度保存到al中
call disp ;调用显示温度子函数,将温度显示到液晶屏上

cmp al,80
jle x1
cmp al,120
jle x2
jmp x3

x1: mov al,00h
call cool ;低速正常降温
call alarm ;关闭声音报警
call led ;关闭光报警
jmp start
x2: mov al,01h
call cool ;启动中速降温
call alarm ;启动声音报警
call led ;启动光报警
jmp start
x3: mov al,02h
call cool ;启动高速降温
call alarm ;启动声音报警
call led ;启动光报警
jmp start

;********AD0809采集温度信号子程序***********
adcollect proc
mov dx,io0809a
out dx,al
mov cx,0ffh ;延时
delay:loop delay
in al,dx
ret
adcollect endp

;********降温子程序********
cool proc
push ax
mov bl,al
mov dx io8255contl
mov al,8bh
out dx,al

mov al,80h
mov dx,io0832c
out dx,al

mov al,bl ;判断报警程度
test al,00h
jnz stop ;al为0,不报警时正常低速降温
test al,01h
jnz slow ;al为1,中度报警中速降温
test al,02h
jnz fast ;al为2,重度报警快速降温
slow: ;控制转速:中速
mov buf1,0200h
mov buf2,0450h
jmp delay
fast: ;控制转速:快速
mov buf1,0200h
mov buf2,0600h
jmp delay
stop: ;控制转速:正常低速
mov buf1,0200h
mov buf2,0200h
jmp delay
delay: mov cx buf1 ;延时
delay1:loop delay1
mov al,0ffh
mov dx,io0832c
out dx,al
mov cx,buf2
delay2:loop delay2
re: pop ax
ret
cool endp

;***************显示温度子程序*****************
disp proc
push ax
cmp al,200
jge ddd2
cmp dl,100
jge ddd1
re1: mov bl,al
and al,0fh
cmp al,10
jge ttt
re2: mov bh,al
mov al,bl
mov cl,4
shr al,cl
add al,30h
mov dl,al
mov ah,02
int 21h
mov dl,bh
and dl,0fh
add dl,30h
mov ah,02
int 21h
jmp re
ddd2: mov dl,'2'
mov ah,02
int 21h
sub al,200
jmp re1
ddd1: mov dl,'1'
mov ah,02
int 21h
sub al,100
jmp re1
ttt: add bl,10h
sub al,10
jmp re2
re: pop ax
ret
disp endp

;************声

音报警子程序************
alarm proc
push ax
cmp al,1
jl re1
dec al
mov bl,al
mov bh,0
mov ax,4240h
mov dx,0fh
div word ptr[table+bx];计算计数初值
mov bx,ax;保存计数初值
mov dx,io8253b;设定8253工作方式
mov al,00110110b
out dx,ax
mov dx,io8253a
mov ax,bx
out dx,al;写计数初值低字节
mov al,ah
out dx,al;写计数初值高字节
mov dx,io8255contl;设置8255c口输出
mov al,80h
out dx,al
mov dx,io8255c
mov al,03h
out dx,al;开扬声器
jmp re2
re1:
mov dx,io8255contl;设置8255c口输出
mov al,80h
out dx,al
mov dx,io8255c
mov al,00h
out dx,al;关扬声器
re2: pop ax
ret
alarm endp

;************光报警显示子程序***********
led proc
push ax
mov bl,al
mov dx,io8255contl
mov al,80h
out dx,al
mov al,bl
cmp al,1
jl low
cmp al,1
je medium
cmp al,1
jg high
low: mov al,00100000b;绿灯亮
jmp re
medium:mov al,01000000b;黄灯亮
jmp re
high: mov al,10000000b;红灯亮
jmp re
re: mov dx,io8255a
out dx,al
pop ax
ret
led endp

;程序结束
code ends
end start



相关主题
文本预览
相关文档 最新文档