ADC0809与单片机的控制接口

51单片机合_290.jpg

ADC0809的引脚

51单片机合_291.jpg
IN0~IN7:8路模拟量输入端
D0~D7:8位数字量输出端
ADDA、ADDB、ADDC:3位地址输入线,用于选择8路模拟通道中的一路。

ADDC ADDB ADDA 选择通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7

ALE:地址锁存允许信号,输入,由低电平变高电平锁存。
START:A/D转换启动信号,输入,由高电平变低电平启动。
EOC:A/D转换结束信号,输出。当启动转换是,该引脚为低电平,当A/D转换结束时,该引脚输出高电平。
OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。
CLK:时钟脉冲输入端。要求时钟频率不高于640kHZ。
REF+、REF-:基准电压输入端。
VCC:电源,接+5V电源。
GND:地。

ADC0809的工作流程809的引脚

51单片机合_294.jpg

转换输出过程

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

ADC0809与MCS-51单片机的接口

51单片机合_296.jpg51单片机合_297.jpg
向地址满足A15=0的端口进行写操作时,即可产生ALS/START信号所需要的上升沿,写操作结束后,即可产下降沿
51单片机合_298.jpg

软件编程

设系统为一个8路模拟量输入的巡回检测系统,使中断方式采样数据,把采样转换所得的数字量按序存于片内RAM中。采样完一遍后停止采集。

  1. #include <reg51.h>
  2. #include <absacc.h> //定义绝对地址访问
  3. #define uchar unsigned char
  4. uchar data x[8]; //定义8个单元的数组,存放结果
  5. uchar xdata *ADadr; //定义指向通道的执政
  6. uchai i = 0;
  7. void main(void){
  8. ITO = 1; //初始化
  9. EXO = 1;
  10. EA = 1;
  11. i = 0;
  12. Adadr = 0x7FF8; //指针指向通道0
  13. *ADadr = i; //启动通道0转换
  14. for(;;){;} //等待中断
  15. }
  16. void int_adc(void) interrupt 0{ //中断函数
  17. x[i] = *ADadr; //接受当前通道转换结果
  18. i++;
  19. ADadr++; //指向下一个通道
  20. if(i<8){
  21. *ADadr = i; //8个通道未转换完,启动下一个通道返回
  22. }else{
  23. EA = 0;
  24. Ex0 = 0; //8个通道转换完,关中断返回
  25. }
  26. }