一. 实验目的
- 了解模/数转换的基本原理,掌握ADC0809的使用方法。
- 了解数/模转换的基本原理,掌握DAC0832的使用方法。
二. 实验内容
实验6-1 模/数转换实验
根据实验原理图,通过实验箱左下角电位器RW1输出0-5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。启动IN0开始转换并读取转换结果。编程采集IN0输入的电压,在屏幕上显示出16进制转换后的数据。
电路图:
接线:
汇编代码:
io0809a equ 298h
code segment
assume cs:code
start:
mov dx,io0809a ;启动A/D转换器
out dx,al ;向A/D转换器写入al中数据存入dx中
mov cx,0ffh ;延时
delay:
loop delay
in al,dx ;从A/D转换器读入数据
mov bl,al ;将al保存在bl中,bl作为交换器存放al的初值
mov cl,4 ;将立即数4保存在cl中
shr al,cl ;将al右移四位,低四位便是高四位的数值
call disp ;调显示子程序显示其高四位
mov al,bl ;从bl交换器中取出al的初值重新赋给al
and al,0fh ;将al高四位清零,留下低四位不变
call disp ;调显示子程序显示其低四位
mov ah,02 ;调用DOS的2号功能,输出单个字符
mov dl,20h ;加空格符(ASCII码值为20h)
int 21h ;显示输出
mov dl,20h ;加空格符(ASCII码值为20h)
int 21h ;显示输出
push dx ;将dx寄存器中的数据入栈
mov ah,06h ;调用DOS的6号功能,执行输入/输出操作,判断是否有键按下
mov dl,0ffh ;置dl为0ffh,即执行键盘输入操作
int 21h ;显示输出
pop dx ;出栈,用dx寄存器接收数据
je start ;若没有键被按下则转START
mov ah,4ch ;退出
int 21h ;显示成功输出
disp proc near ;显示子程序
mov dl,al ;将al保存在dl中,dl作为交换器存放al的初值
cmp dl,9 ;比较dl是否大于9
jle ddd ;若不大于9,则其应为'0'-'9'字符,调用ddd加上30h后即为其ASCII码
add dl,7 ;若大于9则为'A'-'F'字符,需要将dl加7后得到ASCII码
ddd:
add dl,30h ;将dl加上30h得到该字符的ASCII码
mov ah,02 ;调用DOS的2号功能,输出单个字符
int 21h ;显示输出
ret ;用栈中的数据修改ip的内容,从而实现近转移
disp endp
code ends
end start
运行结果:
运行程序,调节电压旋钮,屏幕上显示16进制数字信号值。效果如下图所示:
实验6-2 数/模转换实验(锯齿波)
根据实验原理图,DAC0832采用单缓冲方式,具有单双极性输入端Ua和Ub,利用debug输出命令输出数据给DAC0832,用万用表测量单极性输出端Ua及双极性输出端Ub的电压,验证数字与电压之间的线性关系,并用示波器观察波形。
电路图:
接线:
汇编代码:
io0832a equ 290h
code segment
assume cs:code
start:
mov cl,0; ;将立即数0赋给cl
mov dx,io0832a ;启动D/A转换器
LLL:
mov al,cl ;将cl中数据0存入al中
out dx,al ;向D/A转换器写入al中数据存入dx中
inc cl ;cl中数据加一,生成锯齿波
push dx ;将dx寄存器中的数据入栈
mov ah,06h ;调用DOS的6号功能,执行输入/输出操作,判断是否有键按下
mov dl,0ffh ;置dl为0ffh,即执行键盘输入操作
int 21h ;显示输出
pop dx ;出栈,用dx寄存器接收数据
jz LLL ;若没有键被按下则转START
mov ah,4ch ;退出
int 21h ;显示成功输出
code ends
end start
运行结果:
实验6-3 数/模转换实验(三角波)
汇编代码:
io0832a equ 290h
code segment
assume cs:code
start:
mov cl,0; ;将立即数0赋给cl
mov dx,io0832a ;启动D/A转换器
LLL:
mov al,cl ;将cl中数据0存入al中
out dx,al ;向D/A转换器写入al中数据存入dx中,向转换器送入数据
inc cl; ;cl中数据加一
cmp cl,0ffh ;判断cl是否到最大值
jnz LLL ;若cl未达到最大值则跳转至LLL
dec cl ;cl中数据减一,生成三角波
LL:
mov al,cl ;将cl中数据0存入al中
out dx,al ;向D/A转换器写入al中数据存入dx中
dec cl ;cl中数据减一,生成三角波
cmp al,0 ;比较al是否大于0
jnz LL ;若al大于0则跳转至LL
jmp start ;若al不大于0则跳转至start
push dx ;将dx寄存器中的数据入栈
mov ah,06h ;调用DOS的6号功能,执行输入/输出操作,判断是否有键按下
mov dl,0ffh ;置dl为0ffh,即执行键盘输入操作
int 21h ;显示输出
pop dx ;出栈,用dx寄存器接收数据
jz LLL ;若没有键被按下则转START
mov ah,4ch ;退出
int 21h ;显示成功输出
code ends
end start
运行结果: