单片机学习小组
直播中

杨万富

8年用户 1620经验值
擅长:526774
私信 关注

ADC0809是什么?ADC0809是如何工作的

ADC0809是什么?ADC0809是如何工作的?
如何去实现ADC0809的模数转换与显示呢?

回帖(1)

王冬梅

2022-1-25 12:36:31
该实验测in3一路的模拟量
仅共学习参考

主程序





#include


#define uchar unsigned char


#define uint unsigned int


//各数字的数码管段码(共阴)


uchar code
DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


***it CLK=P1^3;            //时钟信号


***it ST=P1^2;        //启动信号


***it EOC=P1^1;            //转换结束信号


***it OE=P1^0;       //输出使能


//延时


void DelayMS(uint ms)


{


       uchar
i;


       while(ms--)
for(i=0;i<120;i++);


}


//显示转换结果


void Display_Result(uchar d)


{


       P2=0xf7;        //第4个数码管显示个位数


       P0=DSY_CODE[d%10];


       DelayMS(5);


       P2=0xfb;        //第3个数码管显示十位数


       P0=DSY_CODE[d%100/10];


       DelayMS(5);


       P2=0xfd;        //第2个数码管显示百位数


       P0=DSY_CODE[d/100];


       DelayMS(5);


}


//主程序


void main()


{


       TMOD=0x02;        //T0工作模式2(自动重载8位定时器/计数器)


       TH0=0x14;           


       TL0=0x00;


       IE=0x82;


       TR0=1;


       P1=0x3f;        //选择ADC0809的通道3(011)(P1.4~P1.6)


       while(1)


       {


              ST=0;ST=1;ST=0;        //启动A/D转换


              while(EOC==0);           //等待转换完成


              OE=1;


              Display_Result(P3);


              OE=0;


       }


}


//T0定时器中断给ADC0808提供时钟信号


void Timer0_INT() interrupt 1


{


       CLK=~CLK;


}
ADC0809介绍



  • LOCK:时种信号。ADC0809内部没有时钟电路,需由外部提供时钟脉冲信号。一般为500KHz。






//T0定时器中断给ADC0808提供时钟信号


void Timer0_INT() interrupt 1


{


       CLK=~CLK;


}
//每个时钟脉冲就发生一次中断。c51基本上也就一直忙着中断处理了。中断太频繁,占资源



  • IN0-IN7:模拟量输入通道。
  • D0-D7:数据输出口。
  • ADDA-C:地址线(通道)。



  工作过程(借鉴大佬的,建议去阅读大佬的)
①在IN0-IN7上可分别接上要测量转换的8路模拟量信号。有人问了,可不可以只接一路?我就只想测一个模拟信号。当然可了,能挑一百斤的担子,让你只挑十斤那还不小菜。废话太多。。STOP。
②将ADDA-ADDC端给上代表选择测量通道的代码。如000(B)则代表通道0;001(B)代表通道1;111则代表通道7。
③将ALE由低电平置为高电平,从而将ADDA-ADDC送进的通道代码锁存,经译码后被选中的通道的模拟量送给内部转换单元。
④给START一个正脉冲。当上升沿时,所有内部寄存器清零。下降沿时,开始进行A/D转换;在转换期间,START保持低电平。
⑤EOC为转换结束信号。在上述的A/D转换期间,可以对EOC进行不断测量,当EOC为高电平时,表明转换工作结束。否则,表明正在进行A/D转换。
⑥当A/D转换结束后,将OE设置为1,这时D0-D7的数据便可以读取了。OE=0,D0-D7输出端为高阻态,OE=1,D0-D7端输出转换的数据。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分