ADC0809进行AD转换.docx
- 文档编号:10312495
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:13
- 大小:215.14KB
ADC0809进行AD转换.docx
《ADC0809进行AD转换.docx》由会员分享,可在线阅读,更多相关《ADC0809进行AD转换.docx(13页珍藏版)》请在冰点文库上搜索。
ADC0809进行AD转换
ADC0809进行A/D转换(C描述)
2008-06-2416:
53
指针:
可对内存地址直接操作
基于存贮器的指以贮器类为参量,它在编译时才被确定。
因此为指针选择存贮器的方法可以省掉,以这些指针的长度可为1个字节(idata*,data*,pdata*)或2个这节(code*,xdata*)。
charxdata*address;
ADC0809具有8个模拟量输入通道,采用中断方式,在中断函数中读取8个通道的A/D转换值,分别存储在外部RAM的1000H~1007H单元。
ADC0809端口地址为00F0H。
程序定义了两个指针变量*ADC和*ADCdata,分别指向ADC0809端口地址(00F0H)和外部RAM单元地址(1000H~1007H)
由*ADC=I送入通道数,启动ADC0809进行A/D转换,转换结束时产生INT1中断。
在中断服务函数int1()中通过temp=*ADC和*ADCdata=temp;读取A/D转换结果并存到外部RAM中。
#include
unsignedintxdata*ADC;/*定义ADC0809端口指针*/
unsignedintxdata*ADCdata;/*定义ADC0809数据缓冲器指针*/
unsignedcharI;
voidmain()
{
ADC=0x00f0;/*定义端口地址和数据缓冲器地址*/
ADCdata=0x1000;
I=8;/*ADC0809有8个模拟输入通道*/
EA=1;EX1=1;IT1=1;/*开中断*/
*ADC=I;/*启动ADC0809*/
WHILE(I);/*等待8个通道A/D转换完*/
}
voidint1()interrupt2
{
unsignedchartmp;
temp=*ADC;/*读取A/D转换结果*/
*ADCdata=temp;/*结果值存到数据缓冲区*/
ADCdata++;/*数据缓冲区地址加1*/
i—;
*ADC=I;/*启动下一个模拟输入通道A/D转换*/
}
除了用指针变量来实现对内存地址的直接操作外,c51编译器还提供一组宏,该宏定义文件为:
“absacc.h”,利用它可十分方便地实现对任何内存空间的直接操作,改写上面的程序:
#include
#include
#defineADC0x00f0;/*定义ADC0809端口地址*/
#defineADCdata0X1000/*定义数据缓冲器地址*/
unsignedcharI;
voidmain()
{
I=8;/*ADC0809有8个模拟输入通道*/
EA=1;ex1=1;it1=1;/*开中断*/
XBYTE[ADC]=I;/*启动0809*/
While(i);/*等待8个通道转换完毕*/
}
voidint1()interrupt2{
unsignedchartmp;
tmp=XBYTE[ADC];/*读取A/D转换结果*/
i--;
XBYTE[ADCdata+I]=tmp;/**结果值存储到数据缓冲器*/
XBYTE[ADC]=I;/*启动下一个模拟输入通道A/D转换*/
}
利用单片机AT89S51与ADC0809设计一个数字电压表(图)
[来源:
机电论文|类别:
技术|时间:
2009-2-2410:
47:
12][字体:
大中小]
1.实验任务
利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。
2.电路原理图
3.系统板上硬件连线
a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。
d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。
h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。
i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
4.程序设计内容
由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。
因此产生CLK信号的方法就得用软件来产生了;由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。
实际显示的电压值 (D/256*VREF)
5.汇编源程序
6.C语言源程序
#include
unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};
unsignedchardispcount;
unsignedchargetdata;
unsignedinttemp;
unsignedchari;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
voidmain(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(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
ST=1;
ST=0;
}
}
}
voidt0(void)interrupt1using0
{
CLK=~CLK;
}
voidt1(void)interrupt3using0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1|0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
ADC0809引脚图与接口电路
A/D转换器芯片ADC0809简介8路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100μs左右。
图9.8《ADC0809引脚图》
1.ADC0809的内部结构
ADC0809的内部逻辑结构图如图9-7所示。
图9.7《ADC0809内部逻辑结构》
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。
地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连,表9-1为通道选择表。
表9-1通道选择表
2.信号引脚
ADC0809芯片为28引脚为双列直插式封装,其引脚排列见图9.8。
对ADC0809主要信号引脚的功能说明如下:
IN7~IN0——模拟量输入通道
ALE——地址锁存允许信号。
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
START——转换启动信号。
START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。
本信号有时简写为ST.
A、B、C——地址线。
通道端口选择线,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。
其地址状态与通道对应关系见表9-1。
CLK——时钟信号。
ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。
通常使用频率为500KHz的时钟信号
EOC——转换结束信号。
EOC=0,正在进行转换;EOC=1,转换结束。
使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
D7~D0——数据输出线。
为三态缓冲输出形式,可以和单片机的数据线直接相连。
D0为最低位,D7为最高
OE——输出允许信号。
用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
Vcc——+5V电源。
Vref——参考电源参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。
其典型值为+5V(Vref(+)=+5V,Vref(-)=-5V).
9.2.2MCS-51单片机与ADC0809的接口
ADC0809与MCS-51单片机的连接如图9.10所示。
电路连接主要涉及两个问题。
一是8路模拟信号通道的选择,二是A/D转换完成后转换数据的传送。
1.8路模拟通道选择
图9.10ADC0809与MCS-51的连接
如图9.11所示模拟通道选择信号A、B、C分别接最低三位地址A0、A1、A2即(P0.0、P0.1、P0.2),而地址锁存允许信号ALE由P2.0控制,则8路模拟通道的地址为0FEF8H~0FEFFH.此外,通道地址选择以
作写选通信号,这一部分电路连接如图9.12所示。
图9.11ADC0809的部分信号连接
图9.12信号的时间配合
从图中可以看到,把ALE信号与START信号接在一起了,这样连接使得在信号的前沿写入(锁存)通道地址,紧接着在其后沿就启动转换。
图9.19是有关信号的时间配合示意图。
启动A/D转换只需要一条MOVX指令。
在此之前,要将P2.0清零并将最低三位与所选择的通道好像对应的口地址送入数据指针DPTR中。
例如要选择IN0通道时,可采用如下两条指令,即可启动A/D转换:
MOVDPTR,#FE00H;送入0809的口地址
MOVX@DPTR,A;启动A/D转换(IN0)
注意:
此处的A与A/D转换无关,可为任意值。
2.转换数据的传送
A/D转换后得到的数据应及时传送给单片机进行处理。
数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。
为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换其来说,转换时间作为一项技术指标是已知的和固定的。
例如ADC0809转换时间为128μs,相当于6MHz的MCS-51单片机共64个机器周期。
可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片由表明转换完成的状态信号,例如ADC0809的EOC端。
因此可以用查询方式,测试EOC的状态,即可却只转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述那种方式,只要一旦确定转换完成,即可通过指令进行数据传送。
首先送出口地址并以
信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
不管使用上述那种方式,只要一旦确认转换结束,便可通过指令进行数据传送。
所用的指令为MOVX读指令,仍以图9-17所示为例,则有
MOVDPTR,#FE00H
MOVXA,@DPTR
该指令在送出有效口地址的同时,发出
有效信号,使0809的输出允许信号OE有
效,从而打开三态门输出,是转换后的数据通过数据总线送入A累加器中。
这里需要说明的示,ADC0809的三个地址端A、B、C即可如前所述与地址线相连,也可与数据线相连,例如与D0~D2相连。
这是启动A/D转换的指令与上述类似,只不过A的内容不能为任意数,而必须和所选输入通道号IN0~IN7相一致。
例如当A、B、C分别与D0、D1、D2相连时,启动IN7的A/D转换指令如下:
MOVDPTR,#FE00H ;送入0809的口地址
MOVA,#07H;D2D1D0=111选择IN7通道
MOVX@DPTR,A;启动A/D转换
9.2.3A/D转换应用举例
设有一个8路模拟量输入的巡回监测系统,采样数据依次存放在外部RAM0A0H~0A7H单元中,按图9.10所示的接口电路,ADC0809的8个通道地址为0FEF8H~0FEFFH.其数据采样的初始化程序和中断服务程序(假定只采样一次)如下:
初始化程序:
MOV
R0,#0A0H
;数据存储区首地址
MOV
R2,#08H
;8路计数器
SETB
IT1
;边沿触发方式
SETB
EA
;中断允许
SETB
EX1
;允许外部中断1中断
MOV
DPTR,#0FEF8H
;D/A转换器地址
LOOP:
MOVX
@DPTR,A
;启动A/D转换
HERE:
SJMP
HERE
;等待中断
中断服务程序:
DJNZ
R2,ADEND
MOVX
A,@DPTR
;数据采样
MOVX
@R0,A
;存数
INC
DPTR
;指向下一模拟通道
INC
R0
;指向数据存储器下一单元
MOVX
@DPTR,A
ADEND:
RETI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ADC0809 进行 AD 转换