CSAD EQU 209H
Z8279 EQU 212H
D8279 EQU 210H
LEDMOD EQU 00H; 左边输入,八位显示外部译码八位显示
LEDFEQ EQU 38H; 扫描频率
LEDCLS EQU 0C1H; 清除显示RAM
Z8255 EQU 21BH
Z8255A EQU 218H
Z8255C EQU 21AH
COUNT EQU 8
DATA SEGMENT
DATA1 DB 4 DUP(?)
MESS1 DB 'ENTER ANY KEY TO BEGIN!',0DH,0AH,'$'
MESS2 DB 10, 13,'ENTER ANY KEY CAN EXIT TO DOS!' ,0DH,0AH,'$'
MESS3 DB 10, 13,'INPUT THE TEMPERATURE VALUE:',' $'
MESS4 DB 10, 13,'INPUT VALUE ERROR!',0DH,0AH,'$'
MESS5 DB 10, 13,'INPUT A NEW TEMPERATURE VALUE:','$'
MESS6 DB 10,13,'*** LET PA0=0 TO ADJUST THE TEMPERATURE VALUE!***',0DH,0AH,'$'
MESS7 DB 10,13,'*** LET PA0=1 TO INPUT A NEW TEMPERATURE VALUE!***',0DH,0AH,' $'
LED DB 3FH,06H,5BH,4FH,66H.6DH,7DH,07H,7FH,6FH,77H,7CH,39H
DATA ENDS
STACK SEGMENT SRACK
STA DW 50 DUP(?)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS: CODE,DS: DATA,ES: DATA,SS:STACK
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV AH, 09H ;显示提示信息一
MOV DX, OFFSET MESS1
INT 21H
MOV AH, 09H ;显示提示信息六
MOV DX, OFFSET MESS6
INT 21H
MOV AH, 09H ;显尔提示信息七
MOV DX, OFFSET MESS7
INT 21H
MOV AH, 08H
INT 21H
MOV AH, 09H ;显示提示信息三
MOV DX, OFFSET MESS3
INT 21H
CALL input ;输入设置的温度值有 DATA1
OK:
MOV DX, Z8255 ;设置A口为输入,C口为输出
MOV AL, 92H
OUT DX, AL
MOV DX, Z8255C
MOV AL, 00H
OUT DX, AL
CALL delay
CALL delay
MOV DX, Z8279 ;初始化8279
MOV AL, LEDMOD
OUT DX, AL
MOV AH, 09H ;显示提示信息二
MOV DX, OFFSET MESS2
INT 21H
BEGIN: MOV BX, 0
MOV CL, COUNT
MOV CH, 0
BB: MOV DX, CSAD ;启动A/D
MOV AX, 0
OUT DX, AL
CALL delay
IN AL, DX ;采样A/D值
ADC BX, AX ;求平均值
LOOP BB
MOV AX, BX
RCR AX, 1
RCR AX,
RCR AX, 1
CALL changtoBCD ;转化为十进制的温度值
MOV DI, OFFSET DATA1
MOV [DI+3], AL
CALL DIS
MOV DI, OFFSET DATA1
MOV BL, [DI+2] ;取输入值
MOV AL, [DI+3] ;取实际值
CMP AL, BL ;实际值与输入值比较
JB UP ;小于则加热
MOV DX, Z8255A ;否则读开关量
IN AL, DX
AND AL, 01H
JZ DOWN ;PA=0 则停止加热
MOV AH, 09H; PA0=1 则设置新的温度,并将PA0切换到0进行新的控制调节
MOV DX, OFFDSET MESS5
INT 21H
CALL input
JMP BEGIN
UP: MOV AL, 40H
JMP AA
DOWN: MOV AL, 40H
AA: MOV DX, Z8255C
OUT DX, AL
MOV AH, 0BH ;坚持键盘状态,有键按下则返回ADC
INT 21H
CMP AL, 0
JZ CC
MOV AX, 4C00H
INT 21H
CC: JMP BEGIN
delay PROC NEAR ;延时子程序
PUSH CX
MOV CX, 0F00H
LOOP $
POP CX
RET
Delay ENDP
input PROC MEAR ;温度值的设置子程序
MOV AH, IH
INT 21H
MOV DI, OFFSET DATA1
MOV [DI], AL
MOV BH, AL
MOV AH, 1L
INT 21H
MOV [DI+1] AL
MOV BL, AL
AND BH, 0FH
RCL BH, 1
RCL BH, 1
RCL BH, 1
RCL BH, 1
AND BH, 0FH
OR BL, BH
MOV AL, BL
CMP AL, 76H ;输入温度大于76则显示错误提示信息
JA ERR
MOV [DI+2] AL
RET
Input ENDP
ERR: MOV AH, 09H ;显示错误提示信息
MOV DX, OFFSET MESS4
INT 21H
MOV AX, 4C00H
INT 21H
Change toBCD PROC NEAR ;BCD码转换子程序
MOV BL, 3
MUI BL
MOV BL, 10
DIV BL
AAM ;非压缩BCD码乘法调整指令
MOV BL, AL
MOV AL ,AH
MOV CL, 04H
ROR AL, CL
XOR AL, BL
RET
Change toBCD ENDP
DIS PROC NEAR ;显示子程序
MOV BL, AL
MOV AL, 0FH
PUSH AX
MOV DX, Z8279
MOV AL, 90H
OUT DX, AL
POP AX
PUSH BX
LEA BX, LED
XLAT
POP BX
MOV DX, D8279
OUT DX, AL
CALL delay
MOV AL, BL
MOV CL, 04H
ROR AL, CL
AND AL, 0FH
LEA BX, LED
XLAT
MOV DX, D8279
OUT DX, AL
CALL delay
CALL delay
RET
DIS ENDP
CODE ENDS
END START