【实验三】数/模、模/数转换实验
一、实验目的:
了解数/模、模/数转换的基本原理,掌握ADC0809和DAC0832芯片的使用方法。
二、实验任务:
在实验箱上设计并连接 ADC0809 芯片的接线,按中断方式(利用 EOC 发中断申请)对单通道模拟量进行 A/D 转换。A/D 转换结果送入 PC 机后,再由 PC 机送至 DAC0832 进行 D/A 转换,结果送至双踪示波器,与原信号进行对比观察。
模拟信号源:由电位器中心抽头可以得到一个可调节的直流电压。电位器一端接地,另一端接+5V。
三、实验电路:

四、程序清单:;ADC.ASM
DATA SEGMENT
MESG3 DB 'START! HE HE !'
DB 0DH,0AH,'$'
OLD0A DD?
DATA ENDS
SSEG SEGMENT PARA STACK 'STACK'
DB 256 DUP(?)
SSEG ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:SSEG
BEGIN PROC FAR
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
CLI
CALL I8259 ;8259初始化
CALL RD0A ;读旧向量
CALL WR0A ;写新向量
MOV DX,OFFSET MESG3
MOV AH,09H
INT 21H
STI ;开中断
MOV DX,230H
MOV AL,0 ;送初值
OUT DX,AL ;激活AD
WAIT_IN:
MOV AH,1H ;有键输入
INT 16H
JZ WAIT_IN
EXIT_DOS: ;退出
CALL RESET
RET
BEGIN ENDP;-------------------------------------------------------;以下是中断服务程序,执行AD DA转换功能
SERVICE PROC FAR
PUSH DS
PUSH AX ;保护现场
MOV DX,230H ;从230端口读
IN AL,DX ;模拟量
MOV DX,228H ;将转换结果送
OUT DX,AL ;228 229端口
MOV DX,229H OUT DX,AL
MOV DX,230H ;重新送新值给
MOV AL,0 ;230端口,等待
OUT DX,AL ;下一次的输入
QUIT:
MOV AL,20H ;送EOC中断
OUT 20H,AL ;结束命令
POP AX
POP DS
IRET
SERVICE ENDP;-------------------------------------------------------
I8259 PROC
IN AL,21H
AND AL,11111011B
OUT 21H,AL
IN AL,0A1H
AND AL,11111101B
OUT 0A1H,AL
RET
I8259 ENDP;-------------------------------------------------------
RD0A PROC
MOV AX,350AH
INT 21H
MOV WORD PTR OLD0A,BX
MOV WORD PTR OLD0A+2,ES
RET
RD0A ENDP;------------------------------------------------------
WR0A PROC
PUSH DS
MOV DX,OFFSET SERVICE
MOV AX,SEG SERVICE
MOV DS,AX
MOV AX,250AH
INT 21H
POP DS
RET
WR0A ENDP;-------------------------------------------------------
RESET PROC
PUSH DS
MOV DX,WORD PTR OLD0A
MOV DS,WORD PTR OLD0A+2
MOV AX,250AH
INT 21H
IN AL,0A1H
OR AL,00000010B
OUT 0A1H,AL
POP DS
RET
RESET ENDP;------------------------------------------------------
CODE ENDS
END BEGIN
五.实验分析:
我决的本次实验特别简单,好象比前两次的简单多了。主要就是8259的中段服务程序中有AD读入和DA读出的部分,然后在主程序和中断程序结束时有一个230H端口的激活语句。所以该实验程序一点也不难,关键在硬件连线,要注意I/O口地址译码器的一个输出端接电路的CS部分,EOC接总线的B4段,输入信号利用电位器发生。 另外我还犯了一个极愚蠢的错误:没有接ADC0809的时钟信号,后来一直不知道哪儿错,查了半天也没查出来,急的团团转。在老师的帮助下才知道这个问题。所以做实验不论是容易还是简单,都不能轻视,更不能马虎,稍有没考虑到的错误,就会非常的麻烦。