图7 程序框图
2.2.2 程序代码 DATA SEGMENT
DATA1 DW 10 DUP(?) MAX DW ? MIN DW ? TAB
DB
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;定义DATA1为字型
;0~9的段码(字形码)
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA
ADDR_0809 EQU 8000H ;AD0809端口地址 PROC_A EQU 0FF28H PROC_B EQU 0FF29H PROC_C EQU 0FF2AH PROC_CTL EQU 0FF2BH ORG 1100H
……………………………….…数据采集…………………………………………… START0:
MOV CX,10
;采集10次数
9
MOV BX,0
MOV DI,OFFSET DATA1
;把DATA1的首地址赋给DI ;采集数据,进行A/D转换
LP1: CALL AD0809
XOR AH,AH ;高位清零 ADD BX,AX
MOV [DI],AX INC DI INC DI LOOP LP1
……………………………去掉最大最小求平均……………………………………….. MOV SI, OFFSET DATA1 MOV AL,[SI] MOV CX,9 P1:
INC SI INC SI CMP AL,[SI] JAE NEXT MOV AL,[SI] NEXT:
LOOP P1 MOV AH,00H
MOV MAX,AX ;求出最大值
MOV SI, OFFSET DATA1 MOV AL,[SI] MOV CX,9 P2:
10
;BX=BX+AX,求采集数据之和
;DI存储10个数据
;DATA1为字型
;比较9次
INC SI INC SI CMP AL,[SI] JBE CONT MOV AL,[SI] CONT:
LOOP P2 MOV AH,00H
MOV MIN,AX ;求出最小值
XOR AH,AH
MOV AX,BX MOV DX,MAX SUB AX,DX MOV DX,MIN SUB AX,DX MOV BL,8 DIV BL
;求剩余8位数的平均值
;减去最小值
;减去最大值
;采集10个数据
………………………………整数和小数部分…………………………………………… XOR AH,AH
MOV BL,50 DIV BL MOV BH,AL
;BH为整数部分
;A/D的输出结果经过运算法则 (Y=50*X)
CMP AH,5 ;AH为小数部分 JAE LP3
;大于等于5时跳转
MOV AH,0 JMP LP4
;小于5时置零 ;无条件转移
LP3:
MOV BL,5 MOV AL,AH
11
XOR AH,AH DIV BL MOV AH,AL
;十进制小数
LP4:
MOV AL,BH
;十进制整数
……………………………整数部分换码…………………………………………………. MOV CH,AH
LEA BX,TAB MOV AH,0
ADD BX,AX ;得到整数的段码字节 MOV AL,[BX] ;整数段码显示 MOV CL,AL
;完成整数部分换码
;装入有效地址
………………………………小数部分换码………………………………………………
MOV SI,05FH
;实现循环显示
MOV AL,80H
;8255控制字 ,方式0工作
MOV AL,CH LEA BX,TAB MOV AH,0 ADD BX,AX MOV AL,[BX] MOV CH,AL MOV BH,CH MOV BL,CL AND BL,7FH
;完成小数部分换码 ;换码后小数 ;换码后整数
;得到整数和小数点的段码
MOV DX,PROC_CTL OUT DX,AL
………………………………小数显示………………………………………………. LP:
12
MOV AL,BH ;显示小数部分
MOV DX,PROC_A OUT DX,AL MOV AL,0FEH MOV DX,PROC_B OUT DX,AL MOV CX,0FFH
;延时
DELAY1:
LOOP DELAY1
………………………………整数显示……………………………………………….
MOV AL,BL
;显示整数部分
MOV DX,PROC_A OUT DX,AL MOV AL,0FDH MOV DX,PROC_B OUT DX,AL MOV CX,0FFH
;延时
DELAY2:
LOOP DELAY2 DEC SI JNZ LP JMP START0
;实现连续采集不同的模拟量
;减1
………………………………采集数据完成AD转换………………………………………. AD0809 PROC NEAR PUSH CX MOV AL,00H
MOV DX,ADDR_0809 OUT DX,AL MOV CX,0500H DELAY: LOOP DELAY
;A/D转换
;延时,等待A/D转换完成
13