《2022年ADC0809重点总结资料.docx》由会员分享,可在线阅读,更多相关《2022年ADC0809重点总结资料.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、 ADC0809引脚结构功能说明图:15 、2628, IN0 IN7 : 8 路模拟量输入端;1415、8、1721, D0D7 : 8 位数字量输出端;2325,ADDA 、ADDB 、ADDC : 3 位地址输入线,用于选通8 路模拟输入中的一路22, ALE :地址锁存答应信号,输入,高电平有效,对应ALE上跳沿, A、 B、 C 地址状态送入地址锁存器中;6,START :A D 转换启动信号, 输入高电平有效,START上升沿时, 复位 ADC0809; START下降沿时启动芯片,开头进行 A/D 转换; 在 A/D 转换期间, START 应保持低电平;本信号有时简写为ST
2、.7,EOC:A D 转换终止信号,输出,当A D 转换终止时,此端输出一个高电平(转换期间始终为低电平);9, OE:数据输出答应信号,输入,高电平有效;当A D 转换终止时,此端输入一个高电平,才能打开输出三态门,输出数字量,用于掌握三态输出锁存器向单片机输出转换得到的数据;OE=0 ,输出数据线呈高阻;OE=1 ,输出转换得到的数据;10, CLK :时钟脉冲输入端;要求时钟频率不高于640KHZ, EOC=0, 正在进行转换;EOC=1, 转换终止;使用中该状态信号即可作为查询的状态标志,又可作为中断恳求信号使用;12、 16, REF ( +)、 REF ( - ):基准电压;11,
3、 Vcc :电源,单一5V ;13, GND :地;二、 ADC0809 与 51 单片机的接口电路1、说明: D0 D7 接 51 单片机的 P2 口P2.0P2.7 ADIN1 和 ADIN2 为通道 IN0 和 IN1 的电压模拟量输入( 0 5V )EA = 1; /开总中断应用程序如下:#includereg52.h#define uchar unsigned charTMOD = 0x02; /设定定时器 T0 工作方式TH0=216; /利用 T0 中断产生 CLK 信号TL0=216;sbit ST=P10;sbit EOC=P11;TR0=1; /启动定时器 T0 ET0=1
4、;sbit OE=P12;ST=0;sbit CLK=P13;OE=0;sbit ADDCS=P14;uchar AD_DATA2;/储存转换后的数据IN0和 IN1经 AD/*T0中断服务程序 */void t0void interrupt 1 using 0/*延时函数 */void delayuchar iCLK=CLK;uchar j;whilei-/*AD转换函数 */ void ADforj=125;j0;j-ST=0;ADDCS=0; /挑选通道 IN0delay10;/*系统初始化 */ void initST=1;/启动 AD 转换delay10;ST=0;while0=EO
5、C;OE=1;AD_DATA0=P2; OE=0;ST=0;ADDCS=1; /挑选通道 IN1/* void main主函数 */delay10;init;ST=1;/启动 AD 转换delay10;while1ST=0;AD;while0=EOC;OE=1;AD_DATA1=P2;OE=0;注: 由于 ADC0809 内部不带时钟电路,因此用51 单片机的定时器T0 来产生时钟信号;在通道挑选时,由于B,C 接地,当 A( ADDCS)为低电平常挑选 IN0 ,A 为高电平常挑选 IN12、利用单片机 AT89S51与 ADC0809 设计一个数字电压表,试验任务利用单片机AT89S51
6、与 ADC0809 设计一个数字电压表, 能够测量 0 5V 之间的直流电压值,四位数码显示,但要求使用的元器件数目最少;3 系统板上硬件连线(1) 把 “单片机系统 ”区域中的 P1.0 P1.7与“动态数码显示 ”区域中的 ABCDEFGH端口用 8 芯排线连接,数码管段码掌握;(2) 把 “单片机系统 ”区域中的 P2.0 P2.3与“动态数码显示 ”区域中的 S1S2S3S4 端口用 8 芯排线连接,数码管位码掌握;(3) 把“单片机系统 ”区域中的 P3.0与“模数转换模块 ”区域中的 ST 端子用导线相连接,转换启动掌握;(4) 把“单片机系统 ”区域中的 P3.1与“模数转换模块
7、 ”区域中的 OE 端子用导线相连接,数据输出掌握;(5) 把“单片机系统 ”区域中的 P3.2与“模数转换模块 ”区域中的 EOC 端子用导线相连接, 转换终止标志;(6) 把“单片机系统 ”区域中的 P3.3与“模数转换模块 ”区域中的 CLK 端子用导线相连接, 为转换器供应脉冲;(7) 把“模数转换模块 ”区域中的 A2A1A0 端子用导线连接到 “电源模块 ”区域中的 GND端子上, 始终挑选IN0 单通道(8) 把 “模数转换模块 ”区域中的 IN0 端子用导线连接到 “三路可调电压模块 ”区域中的 VR1 端子上,调剂电压变化;(9) 把 “单片机系统 ”区域中的 P0.0 P0
8、.7用 8 芯排线连接到 “模数转换模块 ”区域中的D0D1D2D3D4D5D6D7端子上,数字结果输出;4 程序设计内容i. 由于 ADC0809在进行 A/D 转换时需要有 CLK信号,而此时的 ADC0809的 CLK是接在 AT89S51 单片机的 P3.3 端口上,也就是要求从P3.3 输出 CLK信号供 ADC0809使用;因此产生 CLK 信号的方法就得用软件来产生了;ii. 由于 ADC0809的参考电压 VREF VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值;实际显示的电压值D/256*VREF5 C 语言源程序#include unsigned char
9、 code dispbitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00; unsigned char dispbuf8=10,10,10,10,10,0,0,0;unsigned char dispcount; unsigned char getdata; unsigned int temp; unsigned char i;sbit ST=P30; sbit OE=P31; sbit
10、 EOC=P32; sbit CLK=P33; void mainvoidST=0;OE=0;ET0=1;ET1=1;EA=1;TMOD=0x12;TH0=216;TL0=216;TH1=65536-4000/256;TL1=65536-4000%256;TR1=1;TR0=1;ST=1;ST=0;while1ifEOC=1OE=1;getdata=P0;OE=0;temp=getdata*235; temp=temp/128; i=5;dispbuf0=10; dispbuf1=10; dispbuf2=10; dispbuf3=10; dispbuf4=10; dispbuf5=0; di
11、spbuf6=0; dispbuf7=0; whiletemp/10dispbufi=temp%10; temp=temp/10;i+;dispbufi=temp;ST=1;ST=0;void t0void interrupt 1 using 0CLK=CLK;void t1void interrupt 3 using 0TH1=65536-4000/256;TL1=65536-4000%256;P1=dispcodedispbufdispcount;/显示电压值P2=dispbitcodedispcount;/位码掌握ifdispcount=7P1=P1 | 0x80;dispcount+;
12、 ifdispcount=8dispcount=0;三、 ADC0809应用说明1、( 1 ) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连;(2) 初始化时,使 ST 和 OE 信号全为低电平;(3) 送要转换的哪一通道的地址到A, B,C 端口上;(4) 在 ST 端给出一个至少有 100ns宽的正脉冲信号;(5) 是否转换完毕,我们依据EOC 信号来判定;(6) 当 EOC 变为高电平常,这时给OE 为高电平,转换的数据就输出给单片机了;2 、ST 为转换启动信号;当ST 上跳沿时,全部内部寄存器清零;下跳沿时,开头进行A/D 转换;在转换期间, ST 应保持低电
13、平; EOC 为转换终止信号;当 EOC 为高电平常,说明转换终止;否就,说明正在进行 A/D 转换; OE为输出答应信号, 用于掌握三条输出锁存器向单片机输出转换得到的数据;OE 1,输出转换得到的数据; OE0,输出数据线呈高阻状态; D7 D0 为数字量输出线; CLK 为时钟输入信号线;因 ADC0809 的内部没有时钟电路,所需时钟信号必需由外界供应,通常使用频率为500KHZ ,VREF(), VREF()为参考电压输入 ;( 1 ) 进行 A/D 转换时,采纳查询 EOC 的标志信号来检测 A/D 转换是否完毕, 如完毕就把数据通过 P0 端口读入,经过数据处理之后在数码管上显示
14、; ( 2)进行 A/D 转换之前,要启动转换的方法:ABC 110 挑选第三通道 ST 0,ST 1 ,ST 0 产生启动转换的正脉冲信号 .3 、ADC0809 的工作过程是:第一输入3 位地址,并使 ALE=1 ,将地址存入地址锁存器中;此地址经译码选通 8 路模拟输入之一到比较器;START 上升沿将逐次靠近寄存器复位;下降沿启动A D转换,之后 EOC 输出信号变低,指示转换正在进行;直到A D 转换完成, EOC变为高电平,指示 A D 转换终止,结果数据已存入锁存器,这个信号可用作中断申请;当OE 输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上;4 、C 语言源
15、程序#include unsigned char code dispbitcode=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/ 位码数组unsigned char codedispcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;/段码数组unsigned char dispbuf8=10,10,10,10,10,0,0,0; unsigned char dispcount;sbit ST=P30; sbit OE=P31; sbit EOC=P32;unsigned char cha
16、nnel=0xbc;/IN3 unsigned char getdata;void mainvoidTMOD=0x01;TH0=65536-4000/256;TL0=65536-4000%256;TR0=1;ET0=1;EA=1;P3=channel;while1 ST=0; ST=1; ST=0;whileEOC=0;OE=1;getdata=P0;OE=0;dispbuf2=getdata/100;/分别百位getdata=getdata%100;/除去百位dispbuf1=getdata/10;/分别 10 位dispbuf0=getdata%10;/分别各位void t0void in
17、terrupt 1 using 0TH0=65536-4000/256;TL0=65536-4000%256;P1=dispcodedispbufdispcount;/采样数据P2=dispbitcodedispcount;/打开所要显示数据的位码dispcount+; ifdispcount=8dispcount=0; 四、 ADC0809 的内部结构1 、ADC0809 的内部规律结构图如图9-7所示;.表.表 9-1 通道挑选2. 转换数据的传送A/D 转换后得到的数据应准时传送给单片机进行处理;数据传送的关键问题是如何确认 A/D 转换的完成,由于只有确认完成后,才能进行传送;为此可采
18、纳下述三种方式;(1) 定时传送方式对于一种 A/D 转换其来说, 转换时间作为一项技术指标是已知的和固定的; 例如 ADC0809 转换时间为 128s,相当于 6MHz 的 MCS-51 单片机共 64 个机器周期;可据此设计一个延时子程序, A/D 转换启动后即调用此子程序,推迟时间一到,转换确定已经完成了,接着就可进行数据传送;(2) 查询方式A/D 转换芯片由说明转换完成的状态信号,例如 ADC0809 的 EOC 端;因此可以用查询方式,测试 EOC 的状态,即可却只转换是否完成,并接着进行数据传送;(3) 中断方式把说明转换完成的状态信号( EOC)作为中断恳求信号,以中断方式进
19、行数据传送;不管使用上述那种方式, 只要一旦确定转换完成, 即可通过指令进行数据传送;第一送出口地址并以信号有效时, OE 信号即有效,把转换数据送上数据总线,供单片机接受;不管使用上述那种方式,只要一旦确认转换终止, 便可通过指令进行数据传送;所用的指令为 MOVX 读指令,仍以图 9-17所示为例,就有MOV DPTR , #FE00H MOVX A , DPTR该指令在送出有效口地址的同时,发出有效信号,使 0809 的输出答应信号 OE 有效,从而打开三态门输出,是转换后的数据通过数据总线送入A 累加器中;这里需要说明的是, ADC0809 的三个地址端 A、B、C 即可如前所述与地址
20、线相连,也可与数据线相连,例如与D0 D2 相连;这是启动 A/D 转换的指令与上述类似,只不过A 的内容不能为任意数,而必需和所选输入通道号IN0 IN7 相一样;我为了这个 ADC0809已经痛楚了好几天了, 今日最终胜利了;算是一个里程碑了;为了纪念它,把东西发上来;电路图PCB图实物图程序#include #include sbit CLOCK=P27; sbit OE=P26;sbit START=P25; unsigned char _data;void initSM0=0;/SM01 组合代表 8 位 uart 方式,波特率可变SM1=1;REN=1;/答应串行接受TH1=0xF
21、3;/波特率 2400,误差 0.12% TL1=0XF3;TMOD=0X20;/ 定时器 1 工作于 8 位自动重载模式 , 用于产生波特率EA=1;/总开关中断方式 ET1=0;/定时器 1 不答应中断ES=1;/ 答应串口中断TR1=1;/ 计时器启动掌握位START=0;OE=0;void waitunsigned char time / 产生时钟unsigned char i,j; fori=0;itime;i+forj=0;j125;j+CLOCK=0;_nop_;_nop_;_nop_;_nop_;_nop_;CLOCK=1;_nop_;_nop_;_nop_;_nop_;_nop_;void get/ 猎取数据 START=1;wait10; START=0;wait10;wait10;OE=1;_data=P0;OE=0;START=0;void show/ 发送到串口与 led 灯P1=_data;TI=0;SBUF=_data; while.TI; TI=0;void mainunsigned char i; int j=0;init;/ 初始化while1P2=0;j=0;fori=0;i10;i+/测 10 次后显示get;/ 获得数据j+=_data;_data=j/10; show;/ 发送数据