(四)软件设计
流程图:
源程序清单:
CODE SEGMENT ;T.ASM ;代码段开始
ASSUME CS:CODE ;定义代码段开始
ADPORT EQU 0ff80h ;定义ADPORT=0ff80h
PA EQU 0FF20H ;字位口 ;定义PA=0FF20H
PB EQU 0FF21H ;字形口 ;定义PB=0FF21H
PC EQU 0FF22H ;键入口 ;定义PC=0FF22H
P2CTL EQU 0FF2BH ;定义P2CTL=0FF2BH
P2A EQU 0FF28H ;定义P2A=0FF28H
P2B EQU 0FF29H ;定义P2B=0FF29H
P2C EQU 0FF2AH ;定义P2C=0FF2AH
ORG 2C20H ;程序地址由2C20H开始
START: JMP START0 ;无条件转移指令到START0
BUF DB ?,?,?,?,?,? ;定义一数组BUF有辣个数
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h
db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH ;定义单字节数据db
START0: CALL BUF1 ;调转转移到BUF1
MOV DX,P2CTL ;将P2CTL的内容送到DX
MOV AL,80H ;AL=80H
751com.cn
IN AL,DX ;将DX端口的内容输入到AL中
PUSH AX ;弹出AX
cmp al,4dh ;做比较,与运算
jnc ct1 ;若不相等,转到ct1
MOV AL,0FEH ;AL=0FEH
CON: MOV DX,P2A ;pa0-->l1
OUT DX,AL
POP AX ;压栈
CALL CONVERS ;调转转移到CONVERS
CALL DISP ;调转转移到DISP
JMP ADCON ;直接跳转到ADCON
CT1: MOV AL,0FDH ;pa1-->l2
JMP CON ;直接跳转到CON
CONVERS:MOV AH,AL ;AH= AL
AND AL,0FH ;AL与0FH做与运算
MOV BX,OFFSET BUF ;将BUF数组中的内容送到BX
MOV [BX+5],AL ;[BX+5]= AL
MOV AL,AH ;AL= AH
AND AL,0F0H ;AL与0F0H做与运算
MOV CL,04H ;CL=04H
SHR AL,CL ;AL循环右移04H
MOV [BX+4],AL ;[BX+4]= AL
RET
DISP: MOV AL,0FFH ;00H
MOV DX,PA
OUT DX,AL
MOV CL,0DFH ;20H ;显示子程序 ,5ms
MOV BX,OFFSET BUF
DIS1: MOV AL,[BX]
MOV AH,00H
PUSH BX
MOV BX,OFFSET DATA1 ;将DATA1的内容送到BX
ADD BX,AX ;BX= BX+ AX
MOV AL,[BX] ;将BX寄存器的内容送到AL
POP BX
MOV DX,PB ;将PB的内容送到DX
OUT DX,AL ;把AL的内容从DX端口输出
MOV AL,CL ;AL= CL
MOV DX,PA ;将PA的内容送到DX
OUT DX,AL
PUSH CX ;CX出栈
DIS2: MOV CX,00A0H ;CX=00A0H
LOOP $ ;循环跳转
POP CX ;CX压栈
CMP CL,0FEH ;01H ;CL与0FEH比较
JZ LX1 ;相等
INC BX ;BX自增1
ROR CL,1 ;SHR CL,1 ;循环右移1位 ;逻辑右移
JMP DIS1 ;直接跳转到DIS1
LX1: MOV AL,0FFH ;AL=0FFH
MOV DX,PB ;DX= PB
OUT DX,AL ;把AL的内容从DX端口输出
RET ;返回
BUF1: MOV BUF,0AH ;BUF=0AH
MOV BUF+1,0DH ;BUF+1=0DH
MOV BUF+2,05H ;BUF+2=05H
MOV BUF+3,09H ;BUF+3=09H
MOV BUF+4,00H ;BUF+4=00H
MOV BUF+5,00H ;BUF+5=00H
RET
CODE ENDS ;代码结束
END START ;程序结束
(五)调试过程
硬件连线与实验步骤:
(1) 打开实验箱DJ88K,取出需要连接的线。
(2) 用连接线连JX6→JX17,CS4→FF80H,IN0→VT,PA0→L1,PA1→L2,8MHZ→T。实验箱上连完后,在给实验箱接上电源。并将标准RS232异步通讯口与IBM-PC机连接。
(3) 打开电源,并在PC机上打开DJ8086k微机原理与接口技术软件。
(4) 打开源程序,调试—编译程序(编译成功提示读取RAM成功)—装载程序(将程序通过通讯口下载到实验箱中)
(5) 因为汇编程序是从2C20H地址开始的。在P态下,按SCAL键,输入2C20,按EXEC键,显示“AD59XX”,“XX”为当前温度对应的十辣进制值。(对应关系见表2-5)
(6) 用手温摸测AD590的外壳,观察L1、L2灯的亮灭情况。
完成以上步骤后,我们发现L1黄灯亮。使用的实验数据是室温小于30℃,所以L1指示灯亮。
在实验过程中,我发现了一个问题,那就是我们并不能控制温度的上升和下降,可能是AD590的芯片传感器我们还在实验箱上没找到,应该还需要其他硬件设备,但由于条件缺乏,不能实现。原本设计的思路是用手温来使AD590温度传感器的温度上升,超过30℃能看到另一种现象,就是黄灯L1灭、绿灯L2亮。由于程序编制,我们将单点温度控制点为30ºC,若以后室温上升,能看到第二种情况。