ADC0809的使用

一、前言介绍

  • 使用ADC0809对一个模拟电压进行转换
  • 转换后的电压使用数码管显示出来

二、ADC0809的介绍

1、ADC0809简介

  • ADC0809是采用COMS工艺制造的双列直插式单片8位A/D转换器。分辨率8位,精度7位,带8个模拟量输入通道,有通道地址译码锁存器,输出带三态数据锁存器。启动信号为脉冲启动方式,最大可调节误差为±1LSB。
  • ADC0809内部没有时钟电路,故CLK时钟需由外部输入,fclk允许范围为500kHz-1MHz,典型值为640kHz。每通道的转换需要66~73个时钟脉冲,大约100-110us。(转换时间)工作温度范围为-40℃—+85℃。功耗为15mW,输入电压范围为0–5V,单一+5V电源供电。

2、ADC0809的引脚介绍

ADC0809的使用_第1张图片

  • IN0~IN7 : 8路模拟量输入端
  • D0~D7:8位数字量输出端
  • ADDA、ADDC、ADDC:3位地址输入线,用于选择8路模拟通道中的一路,选择情况见表。
  • ALE:地址锁存允许信号,输入,高电平有效
  • START:A/D转换启动信号,输入,高电平有效
  • EOC:A/D转换结束信号,输出。当启动转换时,高引脚为低电平,当A/D结束转换时,高引脚输出高电平。
  • OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。
  • CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ.
  • REF+、REF-:基准电压输入端。
  • VCC:电源,接+5V;
  • GND:地。

3、地址码与输入通道的对应关系ADC0809的使用_第2张图片#### 4、ADC0809的时序图

ADC0809的使用_第3张图片

5、ADC0809的工作流程

  1. 输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。
  2. 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
  3. 送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
  4. 当CPU执行一读数据指令,使OE为高电平,则从输出端D0~D1读出数据。

三、proteus仿真图

ADC0809的使用_第4张图片

四、程序

#include
unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[4];
unsigned int i;
unsigned int j;
unsigned char getdata;
unsigned int temp;
unsigned int temp1;
unsigned char count;
unsigned char d;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P17=P1^7;
void TimeInitial();
void Delay(unsigned int i);

void TimeInitial()
{ 
	 TMOD=0x10;
	 TH1=(65536-200)/256;
	 TL1=(65536-200)%256;
	 EA=1;
	 ET1=1;
	 TR1=1;
}

void Delay(unsigned int i)
{
  unsigned int j;
  for(;i>0;i--)
  {
  for(j=0;j<125;j++)
  {;}
  }
}
 
void Display()
{ 
	   P1=dispbitcode[dispbuf[3]];
		 P20=0;
		 P21=1;
		 P22=1;
		 P23=1;
		 Delay(10);
		 P1=0x00;
		 P1=dispbitcode[dispbuf[2]];
		 P17=1;
		 P20=1;
		 P21=0;
		 P22=1;
		 P23=1;
		 Delay(10); 
		 P1=0x00;
		 P1=dispbitcode[dispbuf[1]];
		 P20=1;
		 P21=1;
		 P22=0;
		 P23=1;
		 Delay(10);
		 P1=0x00;
		 P1=dispbitcode[dispbuf[0]];
		 P20=1;
		 P21=1;
		 P22=1;
		 P23=0;
		 Delay(10);
		 P1=0x00;
}
void main()
{
		TimeInitial();
		while(1)
		{
				ST=0;
				OE=0;
				ST=1;
				ST=0;
				P34=0;
				P35=0;
				P36=0;
				while(EOC==0);
				OE=1;
				getdata=P0;
				OE=0;
				temp=getdata*1.0/255*500;
				dispbuf[0]=temp%10;
				dispbuf[1]=temp/10%10;
				dispbuf[2]=temp/100%10;
				dispbuf[3]=temp/1000;
				Display();
		}
}

void t1(void) interrupt 3 using 0
 {
  TH1=(65536-200)/256;
  TL1=(65536-200)%256;
  CLK=~CLK;
  }

你可能感兴趣的:(单片机,c语言)