实验三 A/D转换实验
一、实验目的
1. 掌握ADC0809与单片机的接口及其编程方法。
2. 了解A/D变换芯片ADC0809工作原理。
3. 通过实验了解单片机如何进行数据采集。
二、实验原理和实验内容
1.实验原理
A/D转换器大致有三类:一是双积分A/D转换器,特点是精度高,抗干扰性好,价格便宜,但转换速度慢;二是逐次逼近A/D转换器特点是精度、速度、价格均适中;三是并行A/D转换器,速度快,价格昂贵。
本实验用的ADC0809属第二类,是八位A/D转换器。每采集一次一般需100μS,A/D转换结束后会自动产生EOC信号。
1)ADC0809引脚含义
IN0~IN7:8路模拟通道输入,由ADDA,ADDB,ADDC三条线选择。
ADDA、ADDB、ADDC:模拟通道选择线,比如000时选择0通道,111时选择7通道。
D7~D0:数据线,三态输出,由OE(输出允许信号)控制输出与否。
OE:输出允许,该引线上的高电平,打开三态缓冲器,将转换结果放到D0~D7上。
ALE:地址允许锁存,其上升沿将ADDA,ADDB,ADDC三条引线的信号锁存,经译码选择对应的模拟通道。ADDA,ADDB,ADDC可接单片机的地址线,也可接数据线。ADDA接低位线,ADDC接高位线。
START:转换启动信号,在模拟通道选通之后,由START上的正脉冲启动A/D转换过程。转换时间至少100us。
EOC(end of conversion):转换结束信号,在START信号之后,A/D开始转换。EOC输出低电平,表示转换在进行中,当转换结束,数据已锁存在输出锁存器之后,EOC变为高电平。EOC可视作被查询的状态信号,亦可用来申请中断。
REF+、REF-:基准电压输入。
CLOCK:时钟输入、时钟频率上限为1280KHz。
2)ADC0809在实验系统中的电路
ADC0809在实验平台中的电路如图8-3所示。ADC0809输入通道的控制是由单片机的P2.0,P2.1 和P2.2完成,跳线J504使能U501锁存使能。EOC与单片机的中断0(INT0)相连,当数据转换完成时EOC向单片机发送中断请求,单片机响应中断,读取转换数据(也可采用查询方式)。ADC0809的D0~D7与单片机的P0口相连。单片机的ALE信号经过74LS74二分频后,作为ADC0809的时钟信号。U504是与非门CD4001,用于和单片机的P2.3产生AD的片选和使能信号。P2.3为低电平时,且当WR信号来(为低电平),这时送到AD转换器的ALE和START引脚为高电平,启动AD转换。同样,当RD信号来时使能OE信号,AD转换器向总线上发送数据。实验时,对ADC0809的控制过程是:通过P2.0,P2.1 和P2.2选择模拟量输入通道;通过P2.3和WR信号启动AD转换;等待转换结束标志EOC;输出数据使能OE;读取转换数据。
2.实验内容
1)将扩展板的电源J501与主板的电源接口J2或J14连接起来;将扩展板的信号接口J500
与主板的信号接口J15或J13连接起来;将主板上的拨码开关5、6、7、8拨到ON;
2)在keil编程环境下编写程序,完成实验功能。本实验参考程序完成的实验功能是调节可调电阻R500,改变ADC0809的0通道模拟输入电压,能够在主板数码管上显示转换电压值。
3)在KEIL环境下编程,编译生成HEX文件,将HEX文件下载到实验系统中。调节电位器R500观察数码管上显示的数据;用万用表测量J502AD0809的IN0的电压值对比显示和测量值。
图8-3 ADC0809在实验平台中的电路
三.参考程序
C51程序:
#include<reg51.h>
#include<absacc.h>
//start由P2.3控制,用高位地址作为通道选择和AD片选
#define IN0 XBYTE[0xF0FF]     
sbit AD_BUSY=P3^2;    //转换结束引脚--EOC
unsigned char LED_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码
unsigned char LED_seg1[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};//段码
unsigned char LED_bit[4]={0x01,0x02,0x04,0x08};
void delay(unsigned long n)  //延时函数
{for(;n>0;n--);}
unsigned LED_buf[4]={0,0,0,0,};
void convert(unsigned int n)    //分解位函数
{
unsigned char i=0;
n=n*100/51;
while(i<4)
{
LED_buf[i]=(unsigned char)(n%10);
n=n/10;i++;
}
}
void display(void)  //显示函数
{
unsigned char i;
for(i=0;i<4;i++)
3 d{
if(i==2)P0=LED_seg1[LED_buf[i]];
else P0=LED_seg[LED_buf[i]];   
P1=LED_bit[i];
delay(100);
}
}
void main(void)  //主函数
{
unsigned int a=0;                                    图8-4 AD变换流程图
convert(a);
display();
while(1)
IN0=0;      //开始转换
delay(10);
while(AD_BUSY==0);  //等待转换结束
a=IN0;
convert(a);   
display();    //显示
delay(100);
}
}
四、实验仪器和设备
Keil软件;AT89S52实验平台;ATMEL ISP在线编程软件;示波器,电压表。   
五、实验结果及数据分析
问题:1.说明ADC控制方法。
2.如何选择ADC,ADC有哪些重要参数?
开始
选A/D通道
启动A/D转换
等待转换结束
读A/D结果
显示读到的结果
***[JimiSoft: Unregistered Software ONLY Convert Part Of File! Read Help To Know How To Register.]***