数据采集控制与数字电压表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;--------------------------------------------------------------------------
; 课程设计: 数据采集控制与数字电压表
;--------------------------------------------------------------------------
A8255 EQU 0600H ;8255端口地址:PA0~PA7-->L0~L7
B8255 EQU 0602H ;PB0~PB7-->A~G.DP 段码口
C8255 EQU 0604H ;PC0~PC3-->X1~X4,PC4.PC5-->EOC
CON8255 EQU 0606H ;PC6-->K6电压表,PC7-->K7开机
A8254 EQU 0640H ;8254端口地址
B8254 EQU 0642H
C8254 EQU 0644H
CON8254 EQU 0646H
ADC0809 EQU 06C0H ;ADC0809端口地址
;--------------------------------------------------------------------------
DATA SEGMENT
VRBUF DB 10 DUP(0) ;AD转换结果缓冲区数据段
VR DB ? ;AD转换结果数据段
V ALUE DB 3 DUP(0) ;电压值数据段000
LED DB 3FH,06H,5BH,4FH ;数码管段码表0-15
DB 66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
DATA ENDS
;--------------------------------------------------------------------------
SSTACK SEGMENT STACK
DW 64 DUP(?)
SSTACK ENDS
;--------------------------------------------------------------------------
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,SS:SSTACK
START: MOV AX,DATA ;当前数据段址送DS
MOV DS,AX
;--------------------------------------------------------------------------
; 系统初始化及启动程序
;--------------------------------------------------------------------------
MOV DX,CON8255 ;8255控制字:PA7~PA0显示AD转换值
MOV AL,10001000B ;A口输出,B口输出,PC0~PC3输出,PC4~PC7输入!
OUT DX,AL
;--------------------------------------------------------------------------
BEGIN: MOV DX,B8255 ;L0~L7灯全灭!
MOV AL,00H
OUT DX,AL
MOV DX,A8255 ;LED数码管全灭!
MOV AL,00H
OUT DX,AL
MOV DX,CON8254 ;启动秒计数
MOV AL,00100111B ;计数器0,读写高8位,方式3,十进制
OUT DX,AL
;--------------------------------------------------------------------------
K7: MOV DX,C8255
IN AL,DX ;读C口
TEST AL,10000000B ;测试C口最高位!
JZ BEGIN ;PC7=1开机!
;--------------------------------------------------------------------------
; 数据采集程序
;--------------------------------------------------------------------------
MOV SI,OFFSET VRBUF ;将VRBUF的偏移地址放入SI,SI指向VRBUF MOV CX,10 ;设置循环次数
ALEST: MOV DX,ADC0809 ;选择通道,启动转换
MOV AL,00H ;选择端口IN0
OUT DX,AL
EOC: MOV DX,C8255 ;检测EOC状态,判断转换是否结束
IN AL,DX
TEST AL,00110000B ;判断PC4,PC5是否为1!
JZ EOC ;转换未结束
MOV DX,ADC0809 ;转换结束,取AD转换结果
IN AL,DX
MOV [SI],AL ;AD转换结果存入VRBUF
INC SI
LOOP ALEST
;-------------------------------------------------------------------------
;--------------------------------------------------------------------------
MOV BX,0000 ;数据和清零
MOV DH,00 ;最大值
MOV DL,0FFH ;最小值
MOV SI,OFFSET VRBUF
MOV CX,10
NEXT: MOV AL,[SI]
CMP AL,DH ;比较最大值-->DH
JBE NEXT1 ;不高于跳
MOV DH,AL
NEXT1: CMP AL,DL ;比较最小值-->DL
JAE NEXT2 ;不低于跳
MOV DL,AL
NEXT2: MOV AH,00 ;求数据和
ADD BX,AX
INC SI ;指向下一单元
LOOP NEXT
MOV AX,BX
MOV BH,0
MOV BL,DH ;减去最大值
SUB A X,BX
MOV BH,0
MOV BL,DL ;减去最小值
SUB A X,BX
MOV CL,8 ;求出平均值-->VR
DIV CL
MOV VR,AL
;-------------------------------------------------------------------------
MOV DX,A8255 ;显示AD转换结果
OUT DX,AL
;-------------------------------------------------------------------------
MOV DX,C8255 ;判别K6状态:K6=0为数据控制
IN AL,DX
TEST AL,01000000B