数据采集控制与数字电压表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档