ADC0809实验

实验十 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的参考电压,数据总线输出,通道控制线均已接好。

ADC0809实验_第1张图片

ADC0809实验_第2张图片

五、实验步骤

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。

 

八、程序框图

ADC0809实验_第3张图片

 

九、实验程序

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)程序流程图

ADC0809实验_第4张图片

(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)仿真实验连线图

ADC0809实验_第5张图片

2、中断方式

(1)程序流程图

ADC0809实验_第6张图片

(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)仿真实验连线图

ADC0809实验_第7张图片

 

十一、实验总结

(1)proteus中ADC0809和下图中第一个ADC0808不支持仿真。

ADC0809实验_第8张图片

(2)实验台中断方式不成功。仿真实验中断方式能进行成功,然而在实验台上,我们正确连好线路,将程序拷贝过来(中断向量程序装入段地址已改),实验进行失败,小灯亮的情况为设置的初始状态。

 

 

 

你可能感兴趣的:(ADC0809实验)