|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
12位A/D转换器ADS7804与51单片机的接口及程序设计 |
作者:songcong1026 栏目:单片机 |
摘要:ADS7804是美国BURR-BROWN公司推出的一种新型12位A/D转换器。文中介绍了它的特性与功能,给出了一种简洁而新颖的与51单片机的接口方法,同时给出了用C语言编写的数据采集的应用程序。 1 基本特点 |
2楼: | >>参与讨论 |
作者: songcong1026 于 2007/1/20 14:20:24 发布:
2 引脚及功能 ADS7804共有28个引脚,图1为基引脚图。这些引脚大体上可以划分为3类。 a.电源类 数字电源VDIG和模拟电源VANA通常一起接到5V电源上。数字地DGND和模拟地AGND1、AGND2通常共地。REF为参考电压端,通常对地接2.2μF钽电容,芯片内部可产生2.5V基准电压。CAP为参考电压所需电容,对地接2.2μF钽电容。 b.模数信号类 VIN为输入的模拟信号。D11~D0为数字量并行输出口,DZ(19~22脚)是为了使管脚与16位A/D转换器ADS7805兼容而设的,可悬空。 c.控制信号类 CS(输入)为片选信号,R/C(输入)为读取结果/模数转换控制信号,BUSY(输出)用于指示转换是否完成,BYTE(输入)信号用来控制从总线读出的数据是转换结果的高字节还是低字节。 |
3楼: | >>参与讨论 |
作者: songcong1026 于 2007/1/20 14:21:58 发布:
3 启动A/D转换和读取转换结果 表1 模拟电压和数字输出的关系 |
4楼: | >>参与讨论 |
作者: songcong1026 于 2007/1/20 14:23:03 发布:
4 与51单片机的接口 因为ADS7804的CS信号脉冲宽度要求为40ns~6μs之间,而对于单片机而言,只要对外部设备进行读操作,即会产生RD脉冲,其宽度为6个振荡周期,如采用12MHZ的晶振,其脉冲宽度为500ns,所以将ADS7804的CS脚接单片机的RD信号是再合适不过了。至于R/C、BUSY和BYTE信号,只需连接到普通的锁存功能的端口即可,如单片机的PI口、并行口扩展芯片8155或8255等的端口。图3是一个ADS7804与51单片机的典型接口电路。 |
5楼: | >>参与讨论 |
作者: songcong1026 于 2007/1/20 14:25:19 发布:
5 C语言程序设计 FRANKLIN C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,使用它可以缩短开发周期,降低开发成本,而且开发出的系统易于维护,可靠性高,可移植性好。下面介绍用C语言编写的单点和定长数据采集子程序,假设所用的晶振频率为12MHZ。单点采样子程序ADS7804()用来返回一个有符号整数形式的转换结果。定长采样子程序DAQ()根据入口参数interval(单位为μs)给定的采样间隔采样N点,并采用查询51单片机内置定时器的方式来控制采样时序,N点采样结果存储在定位于外部存储器的数组array中。需要注意的是,赋给计数寄存器TH和TL的值是定时器从开始计数到溢出所用的时间,这个时间再加上清TF和装载计数初值所需的时间(共5个机器周期,对于12MHZ晶振即为5μs)才是所要的采样间隔,这一点在程序设计中必须注意。 源程序如下: # include<reg51.h> # include<absacc.h> # define N 128 /*定采样长度,如128点*/sbit BYTE=F1^0; sbit RC=P1^1; sbit BUSY=P1^2; /*定义特殊位*/ int XDATA array(N); /*在外部存储器内定义长度为N的有符号整数数组*/ int ADS7804(void) { uint ul,uh;int u; RC=0; /*R/C低电平,进入转换模式*/ ul=XBYTE[0xffff]; /*产生读脉冲,启动A/D转换*/ while (BUSY= =0); /*等待转换完成*/ RC=1;BYTE=0; /*进入读模式,选择低字节*/ ul=XBYTE[0xffff]; /*读转换结果低8位*/ BYTE=1; /*选择高字节*/ uh=XBYTE[0xffff]&0x0f;/*读转换结果高4位*/ u=uh*256 ul; /*得到12位转换结果*/ if(u>=0x0800) u=u 0xf000; /*如果为负值,则符号扩展*/ return(u); /*返回转换结果*/ } uoid DAQ(uint interval) { uchar th,tl; interval=interval-5;/*减去TF0清零和装载计数初值的时间5μs*/ th=255-(interval/256); tl=255-(interval%6); /*计算计数初值*/ TMOD=0x01; /*定时器0,方式1 */ TH0=th; TL0=tl;/*装载计数初值*/ TR0=1;/*启动定时*/ for(I=0;i<N;i ) { do{}whilt(!TF0);/*查询等待TF0复位*/ TF0=0; /*清溢出标志*/ TH0=th;TL0=tl; /*装载计数初值*/ Array[i]=ADS7804(); /*采样、存储*/ } TR0=0; /*停止定时*/ } |
6楼: | >>参与讨论 |
作者: songcong1026 于 2007/1/20 14:27:00 发布:
6 结束语 ADS7804为12位的A/D转换器,它不仅分辨率高、转换速度快,而且接口方便,电路简单、应用灵活,因而具有广泛的应用前景。笔者在DLRS-1型检波器低频接收灵敏度特性测量仪中使用了ADS7804,取得了很好的效果。 |
7楼: | >>参与讨论 |
作者: hms2006 于 2007/1/22 11:09:37 发布:
谢谢,顶一下 |
8楼: | >>参与讨论 |
作者: creative 于 2007/1/22 14:03:14 发布:
不错, 支持楼主! |
9楼: | >>参与讨论 |
作者: liuyi1986 于 2007/1/23 22:07:59 发布:
顶~~~~~~ |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |