本程序 DAC0832和ADC0809 做数模转换和模数转换闭环测试实验,即将数模转换器输出的模拟量作为模数转换器的模拟量输入,并比较D/A设定的数字量与A/D读出的数字量,从而得出实验结论。由于 DAC0832有数据锁存器、选片、读、写控制信号线,故可与 8088CPU 总线直接接口。
是只有一路模拟量输出, 且为单极型电压输出。
DAC0832工作于单缓冲方式,它的ILE接+5V,/CS和/XFER相接后作为0832 芯片的片选0832CS。这样, 对DAC0832执行一次写操作就把一个数据直接写入DAC寄存器、模拟量输出随之而变化。进行D/A转换只需如下两条命令:
MOV AL,DATA0 ;DATA0为设定的待要转换的数字量。 OUT DAPORT,AL ;DAPORT为DAC0832的端口地址,数字量送端口。 ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。图中ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。一般在实际应用系统中应该接精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、 ENABLE信号。ADC0809的转换结束信号EOC未接, 如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统地址线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、06H、07H。 启动本A/D转换只需如下两条命令:
MOV AL,DATA ;DATA为通道值。
MOV ADPORT,AL ;ADPORT为ADC0809端口地址,通道值送端口。 读取A/D转换结果用下面一条指令:
IN AL,ADPORT
CODE
SEGMENT ASSUME CS:CODE ADPORT EQU 0060H DAPORT EQU 0070H CONTPORT EQU 00DFH DATAPORT EQU 00DEH DATA0 EQU 0500H DATA1 EQU 0510H DATA2 EQU 0514H DATA3 EQU 0518H DATA4 EQU 0519H DATA5 EQU 051AH DATA6 EQU 051CH START: JMP CONTORL CONTORL: CALL FORMAT CALL LEDDISP CALL DELAY
MOV AL,0D DACON: PUSH AX OUT DAPORT,AL CLC
MOV SI,DATA5
MOV AL,1D ADC AL,[SI] DAA
MOV [SI],AL INC SI
MOV AL,0D ADC AL,[SI] DAA
MOV [SI],AL
MOV SI,DATA5
MOV AL,[SI]
MOV BX,DATA2 CALL CONVERS INC SI
MOV AL,[SI] CALL CONVERS1 INC BX
MOV DS:[BX],AL CALL DELAY ADCON:
MOV AX,00 OUT ADPORT,AL CALL DELAY IN AL,ADPORT CALL CBCDM
MOV BX,DATA6
MOV [BX],AX
MOV BX,DATA1 CALL CONVERS
MOV AL,BYTE PTR DS:[051DH] CALL CONVERS1 INC BX
MOV DS:[BX],AL CALL LEDDISP POP AX INC AX CMP AX,100H JB DACON
MOV AX,0H
MOV WORD PTR DS:[DATA5], 0H JMP DACON CONVERS: PUSH AX CALL CONVERS1
MOV DS:[BX],AL INC BX POP AX
MOV CL,4H SHR AL,CL CALL CONVERS1
MOV DS:[BX],AL RET CONVERS1: PUSH BX
MOV BH,0H AND AL,0FH
MOV BL,AL
MOV AL,CS:[BX+DATA0] POP BX RET LEDDISP:
MOV AL,90H OUT CONTPORT,AL LED1: CMP BYTE PTR DS:[DATA3],07H JA LED2
MOV BL,DS:[DATA3]
MOV BH,0H
MOV AL,DS:[BX+DATA1] OUT DATAPORT,AL ADD BYTE PTR DS:[DATA3],01H JNZ LED1 LED2:
MOV BYTE PTR DS:[DATA3],00 RET CBCDM:
MOV BL,AL AND AX,0FH CMP AL,09H JNA NEXTBIT ADD AL,06H NEXTBIT:
MOV BYTE PTR DS:[DATA4],AL
MOV AL,BL
MOV BH,0
MOV BL,BYTE PTR DS:[DATA4]
MOV CL,4H SHR AL,CL JZ OK
MOV CX,AX
MOV AL,BYTE PTR DS:[DATA4] CLC NEXT: ADD AL,16H DAA JNC NEXTBIT1 ADD AH,1H NEXTBIT1: DEC CX JNZ NEXT
MOV BX,AX OK:
MOV AX,BX RET FORMAT:
MOV AX,0H
MOV DS,AX
MOV BX,0
MOV WORD PTR DS:[BX+DATA0],063FH ADD BX,2
MOV WORD PTR DS:[BX+DATA0],4F5BH ADD BX,2
MOV WORD PTR DS:[BX+DATA0],6D66H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],077DH ADD BX,2
MOV WORD PTR DS:[BX+DATA0],6F7FH ADD BX,2
MOV WORD PTR DS:[BX+DATA0],7C77H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],5E39H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],7179H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],525EH ADD BX,2
MOV WORD PTR DS:[BX+DATA0],4077H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],7740H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],5E52H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],0H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],0H ADD BX,2
MOV WORD PTR DS:[BX+DATA0],0H RET DELAY:
MOV AX,2H DELAY1: DEC AX NOP NOP
MOV CX,0AFFFH