ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:569.40KB ,
资源ID:11627125      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11627125.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ADC0809重点总结资料.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ADC0809重点总结资料.docx

1、ADC0809重点总结资料一、ADC0809引脚结构功能说明图:15、2628,IN0IN7:8路模拟量输入端。1415、8、1721,D0D7:8位数字量输出端。2325,ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路22,ALE:地址锁存允许信号,输入,高电平有效,对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。6,START:AD转换启动信号,输入高电平有效,START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持 低电平。本信号有时简写为ST.7,EOC:AD转换结束信号,输出,当AD转

2、换结束时,此端输出一个高电平(转换期间一直为低电平)。 9,OE:数据输出允许信号,输入,高电平有效。当AD转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量,用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。10,CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ,EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。12、16,REF(+)、REF(-):基准电压。 11,Vcc:电源,单一5V。 13,GND:地。 二、ADC0809与51单片机的接口电路

3、1、说明: D0D7接51单片机的P2口(P2.0P2.7)ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(05V)应用程序如下:#includereg52.h#define uchar unsigned charsbit ST=P10;sbit EOC=P11;sbit OE=P12;sbit CLK=P13;sbit ADDCS=P14;uchar AD_DATA2;/保存IN0和IN1经AD转换后的数据/*延时函数*/void delay(uchar i)uchar j;while(i-)for(j=125;j0;j-);/*系统初始化*/void init()EA = 1;

4、/开总中断TMOD = 0x02;/设定定时器T0工作方式TH0=216;/利用T0中断产生CLK信号TL0=216;TR0=1; /启动定时器T0ET0=1;ST=0;OE=0;/*T0中断服务程序*/void t0(void) interrupt 1 using 0CLK=CLK;/*AD转换函数*/void AD()ST=0;ADDCS=0;/选择通道IN0delay(10);ST=1;/启动AD转换delay(10);ST=0;while(0=EOC);OE=1;AD_DATA0=P2;OE=0;ST=0;ADDCS=1;/选择通道IN1delay(10);ST=1;/启动AD转换de

5、lay(10);ST=0;while(0=EOC);OE=1;AD_DATA1=P2;OE=0;/*主函数*/void main()init();while(1) AD();注: 由于ADC0809内部不带时钟电路,因此用51单片机的定时器T0来产生时钟信号。在通道选择时,由于B,C接地,当A(ADDCS)为低电平时选择IN0,A为高电平时选择IN12、利用单片机AT89S51与ADC0809设计一个数字电压表,实验任务利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量05V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。3 系统板上硬件连线(1)把“单片机系统”

6、区域中的P1.0P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接,数码管段码控制。(2)把“单片机系统”区域中的P2.0P2.3与“动态数码显示”区域中的S1S2S3S4端口用8芯排线连接,数码管位码控制。(3)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接,转换启动控制。(4)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接,数据输出控制。(5)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接,转换结束标志。(6)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端

7、子用导线相连接,为转换器提供脉冲。(7)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上,始终选择IN0单通道(8)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上,调节电压变化。(9)把“单片机系统”区域中的P0.0P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上,数字结果输出。4 程序设计内容i.由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用

8、。因此产生CLK信号的方法就得用软件来产生了。ii.由于ADC0809的参考电压VREFVCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值(D/256*VREF)5 C语言源程序#include unsigned char 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,

9、10,10,0,0,0;unsigned char dispcount;unsigned char getdata;unsigned int temp;unsigned char i;sbit ST=P30;sbit OE=P31;sbit EOC=P32;sbit CLK=P33;void main(void) ST=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; while(1) if

10、(EOC=1) OE=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; dispbuf6=0; dispbuf7=0; while(temp/10) dispbufi=temp%10; temp=temp/10; i+; dispbufi=temp; ST=1; ST=0; void t0(void) interrupt 1 using 0 CLK=CLK;void t1(v

11、oid) interrupt 3 using 0 TH1=(65536-4000)/256; TL1=(65536-4000)%256; P1=dispcodedispbufdispcount;/显示电压值 P2=dispbitcodedispcount;/位码控制 if(dispcount=7) P1=P1 | 0x80; dispcount+; if(dispcount=8) dispcount=0; 三、ADC0809应用说明1、(1) ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。 (2) 初始化时,使ST和OE信号全为低电平。 (3) 送要转换的哪一通道的地址

12、到A,B,C端口上。 (4) 在ST端给出一个至少有100ns宽的正脉冲信号。 (5) 是否转换完毕,我们根据EOC信号来判断。 (6) 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。2、ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE1,输出转换得到的数据;OE0,输出数据线呈高阻状态。D7D0为数字量输出线。 CLK为时钟输入信号线。因ADC

13、0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ, VREF(),VREF()为参考电压输入。(1) 进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。(2) 进行A/D转换之前,要启动转换的方法: ABC110选择第三通道 ST0,ST1,ST0产生启动转换的正脉冲信号 .3、ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 AD转换,之后EOC输出信

14、号变低,指示转换正在进行。直到AD转换完成,EOC变为高电平,指示AD转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。4、C语言源程序#include unsigned char 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 dispbu

15、f8=10,10,10,10,10,0,0,0;unsigned char dispcount;sbit ST=P30;sbit OE=P31;sbit EOC=P32;unsigned char channel=0xbc;/IN3unsigned char getdata;void main(void) TMOD=0x01; TH0=(65536-4000)/256; TL0=(65536-4000)%256; TR0=1; ET0=1; EA=1;P3=channel;while(1)ST=0;ST=1;ST=0;while(EOC=0);OE=1;getdata=P0;OE=0;disp

16、buf2=getdata/100;/分离百位getdata=getdata%100;/除去百位dispbuf1=getdata/10;/分离10位dispbuf0=getdata%10;/分离各位void t0(void) interrupt 1 using 0TH0=(65536-4000)/256;TL0=(65536-4000)%256;P1=dispcodedispbufdispcount;/采样数据 P2=dispbitcodedispcount;/打开所要显示数据的位码dispcount+;if(dispcount=8)dispcount=0; 四、ADC0809的内部结构1、AD

17、C0809的内部逻辑结构图如图9-7所示。表9-1 通道选择表 2. 转换数据的传送 A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。(1)定时传送方式 对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。例如ADC0809转换时间为128s,相当于6MHz的MCS-51单片机共64个机器周期。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。(2)查询方式A/D转换芯片由表明转换完成的状态信号,例如ADC08

18、09的EOC端。因此可以用查询方式,测试EOC的状态,即可却只转换是否完成,并接着进行数据传送。(3)中断方式 把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。不管使用上述那种方式,只要一旦确认转换结束,便可通过指令进行数据传送。所用的指令为MOVX 读指令,仍以图9-17所示为例,则有MOV DPTR , #FE00HMOVX A , DPTR 该指令在送出有效口地址的同时,发出有效信号,使0809的输出允许信号

19、OE有 效,从而打开三态门输出,是转换后的数据通过数据总线送入A累加器中。 这里需要说明的是,ADC0809的三个地址端A、B、C即可如前所述与地址线相连,也可与数据线相连,例如与D0D2相连。这是启动A/D转换的指令与上述类似,只不过A的内容不能为任意数,而必须和所选输入通道号IN0IN7相一致。我为了这个ADC0809已经痛苦了好几天了,今天终于成功了。算是一个里程碑了。为了纪念它,把东西发上来。电路图PCB图实物图程序#include#includesbit CLOCK=P27; sbit OE=P26;sbit START=P25;unsigned char _data;void in

20、it()SM0=0; /SM01组合代表8位uart方式,波特率可变SM1=1;REN=1; /允许串行接受TH1=0xF3; /波特率2400,误差0.12%TL1=0XF3;TMOD=0X20; /定时器1工作于8位自动重载模式, 用于产生波特率EA=1; /总开关中断方式ET1=0; /定时器1 不允许中断ES=1; /允许串口中断TR1=1; /计时器启动控制位START=0;OE=0;void wait(unsigned char time) /产生时钟 unsigned char i,j; for(i=0;itime;i+) for(j=0;j125;j+) CLOCK=0;_no

21、p_();_nop_();_nop_();_nop_();_nop_(); CLOCK=1;_nop_();_nop_();_nop_();_nop_();_nop_(); void get()/获取数据START=1;wait(10);START=0;wait(10);wait(10);OE=1;_data=P0;OE=0;START=0;void show()/发送到串口与led灯P1=_data;TI=0; SBUF=_data;while(!TI);TI=0;void main() unsigned char i;int j=0;init();/初始化while(1) P2=0; j=0; for(i=0;i10;i+)/测10次后显示 get();/获得数据 j+=_data; _data=j/10; show();/发送数据

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1