实验十 ADC0809实验
一、实验目的
熟悉A/D转换的基本原理,掌握ADC0809的使用方法。
二、实验设备
MUT—Ⅲ型实验箱、8086CPU模块。
三、实验内容
从ADIN0输入一路模拟信号,启动A/D转换,用简单输入口(74LS244)查询EOC信号,转换结束后查看转换结果。同时用万用表测量输入的模拟电压,与转换后的数字量比较。作图,横坐标是模拟电压,纵坐标是转换的数字量,检查A/D转换的线性度。
其它通道实验与通道0类似,相应修改地址即可。
四、实验原理介绍
本实验用到两部分电路:简单I/O口扩展电路、A/D电路
八路八位A/D实验电路由一片ADC0809,一片74LS04,一片74LS32组成,该电路中,ADIN0—ADIN7是ADC0809的模拟量输入插孔,CS0809是0809的AD启动和片选的输入插孔,EOC是0809转换结束标志,高电平表示转换结束。齐纳二极管LM336-5提供5V的参考电源,ADC0809的参考电压,数据总线输出,通道控制线均已接好。
五、实验步骤
1、实验连线
AN0 « ADIN0 CS0 «CS0809 CS1 «CS244 EOC «IN0
用实验箱左上角的“VERF.ADJ”电位器调节ADC0809 12脚上的参考电压至5V。
3、编写程序并全速运行。
4、检查显示数据是否与电位器输出的电压相符合。
六、实验提示
实验电路中启动信号START与地址锁存信号相连,所以启动A/D转换的方法为:
MOV DX,ADDRESS ;ADDRESS是ADC0809的端口地址
OUT DX, AL ;发片选及IOW信号,启动0通道
七、实验结果
在输入电压AN0分别为0V,1V,2V,3V,4V,5V时显示数据分别为00H,33H,66H,99H,0CCH,0FFH(数据低位略有偏差属正常现象)。
以下图为当模拟电压为4V时,输出的数据量为CFH。
八、程序框图
九、实验程序
con8279 equ 0492h
dat8279 equ 0490h
assume cs:code
code segment public
org 100h
start:jmp start1
segcod db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h
start1:mov dx,04a0h
out dx,ax ;启动通道 0
wait1: mov dx,04b0h ;CS244
in ax,dx ;读 EOC
and ax,1
cmp ax,1
jne wait1 ;如果EOC=0,waiting....
mov dx,04a0h
in ax,dx ;读转换结果
and ax,0ffh
mov bx,ax
nop
disp: mov di,offset segcod
mov ax,08h ;工作方式,16位,左入
mov dx,con8279
out dx,ax
mov ax,90h
mov dx,con8279
out dx,ax ;写显示RAM命令,地址自增
mov dx,dat8279
push bx
and bx,0f0h ;取高4位
mov cl,4
shr bx,cl
add di,bx
mov al,cs:[di]
mov ah,0
out dx,ax ;写RAM0
nop
nop
mov di,offset segcod
pop bx
and bx,0fh ;取低4位
add di,bx
mov al,cs:[di]
mov ah,0
out dx,ax ;写RAM1
delay: mov cx,0ffffh ;time delay
delay1: nop
nop
loop delay1
jmp start1
code ends
end start
十、实验拓展
1、查询方式
(1)程序流程图
(2)程序清单
assume cs:code
code segment public
org 100h
start:
start1: mov dx,00h
mov ax,00h
out dx,ax ;启动通道0
wait1: mov dx,20h ;
in ax,dx ;读 EOC
and ax,1
cmp ax,1
jne wait1 ;如果EOC=0,waiting....
mov dx,00h
in ax,dx ;读转换结果
mov dx,40h
out dx,al
code ends
end start
(3)仿真实验连线图
2、中断方式
(1)程序流程图
(2)程序清单
assume cs:code
code segment public
org 100h
start: cli
;设置中断向量
mov ax,0
mov es,ax
mov si,60h*4
mov ax,offset int0
mov es:[si],ax
mov ax,800h ;8086仿真模型中程序装入段地址
mov es:[si+2],ax
;8259初始化
mov dx,20h ;8259偶地址,设置ICW1
mov al,13h ;边沿触发,单片,ICW4 NEEDED
out dx,al
mov dx,22h ;8259奇地址,设置ICW2
mov al,60h ;中断类型号为60h
out dx,al
mov al,03h ;ICW4,自动清除中断,8086CPU
out dx,al
mov al,00h ;OCW1, 开放所有中断
out dx,al
;设置指示灯的初始状态
mov bl,1
mov al,bl
mov dx,40h
out dx,al
mov dx,00h
out dx,ax
sti
lp:
jmp lp
int0:
mov dx,00h
in ax,dx ;读转换结果
mov dx,40h
out dx,al
iret ;返回主程序
ret
code ends
end start
(3)仿真实验连线图
十一、实验总结
(1)proteus中ADC0809和下图中第一个ADC0808不支持仿真。
(2)实验台中断方式不成功。仿真实验中断方式能进行成功,然而在实验台上,我们正确连好线路,将程序拷贝过来(中断向量程序装入段地址已改),实验进行失败,小灯亮的情况为设置的初始状态。