temp1 db ? temp2 db ?
temphig db 200d ;为系统设臵的温度上限 templow db 100d ;为系统设臵的温度下限
data ends
code segment
assume cs:code,ds:data start: mov ax,data mov ds ,ax
read: mov dx,io0809a
out dx,al ;启动ADC0809芯片工作 call delay ;调用延时子程序
in al,dx ;采集ADC0809收集的模拟量
- 29 -
mov dx,io8255kz mov al,80h
out dx,al ;8255初始化
mov dis_num,al
call next1 ;调用温度过低警报子程序 call next2 ;调用温度过高警报子程序
call segret ;调用将模拟量分离的子程序 call clear ;LCD清 lea bx,hz_tab
mov ch,2 call lcd_disp lea bx,hz_tab
mov ch,3
call lcd_disp
jmp read mov ah,4ch int 21h
next1 proc push dx push ax push cx
mov cl,dis_num cmp cl,templow
jb n1
;显示第2行信息 ;显示第3行信息 ;跳转到read标志继续执行 ;退出 ;温度过低警报子程序 ;压栈
;当温度低于已设臵的温度下限 ;跳转到n1
- 30 -
pop cx ;出栈 pop ax pop dx
ret ;返回主程序 n1: mov dx,io8255c mov al,08h out dx,al pop cx pop ax pop dx
ret next1 endp
next2 proc push dx push ax push cx mov cl,dis_num
cmp cl,temphig ja n2
pop cx
输出高电平,使连接的绿灯亮;出栈 返回主程序
;温度过高警报子程序 ;压栈 ;当温度高于系统设臵的上限 ;跳转到n2 ;出栈
- 31 -
;pc3 ;
pop ax pop dx
ret ;返回主程序
n2: mov dx,io8255c mov al,10h ;pc4端口输出高电平 out dx,al pop cx pop ax pop dx
ret next2 endp
segret proc push ax mov ah,0 mov al,dis_num mov bl,10
div bl
;使连接的红灯亮 ;出栈 ;返回主程序
;将模拟量分离的子程序;将ax压栈 ;将ax的ah臵0 ;al放入dis_num ;bl放入10 ;将ax的值除以bl
- 32 -