ADC与51单片机接口电路及应用程序1.doc
《ADC与51单片机接口电路及应用程序1.doc》由会员分享,可在线阅读,更多相关《ADC与51单片机接口电路及应用程序1.doc(5页珍藏版)》请在冰点文库上搜索。
![ADC与51单片机接口电路及应用程序1.doc](https://file1.bingdoc.com/fileroot1/2023-5/3/0dfd8404-4448-4a98-935a-803318ce6f6f/0dfd8404-4448-4a98-935a-803318ce6f6f1.gif)
ADC0809与51单片机接口电路及应用程序
说明:
D0~D7接51单片机的P2口(P2.0~P2.7)
ADIN1和ADIN2为通道IN0和IN1的电压模拟量输入(0~5V)
应用程序如下:
#include"reg52.h"
#defineucharunsignedchar
sbitST=P1^0;
sbitEOC=P1^1;
sbitOE=P1^2;
sbitCLK=P1^3;
sbitADDCS=P1^4;
ucharAD_DATA[2]; //保存IN0和IN1经AD转换后的数据
/**********延时函数************/
voiddelay(uchari)
{
ucharj;
while(i--)
{
for(j=125;j>0;j--)
;
}
}
/*********系统初始化***********/
voidinit()
{
EA=1; //开总中断
TMOD=0x02; //设定定时器T0工作方式
TH0=216; //利用T0中断产生CLK信号
TL0=216;
TR0=1; //启动定时器T0
ET0=1;
ST=0;
OE=0;
}
/***********T0中断服务程序************/
voidt0(void)interrupt1using0
{
CLK=~CLK;
}
/***********AD转换函数**********/
voidAD()
{
ST=0;
ADDCS=0; //选择通道IN0
delay(10);
ST=1; //启动AD转换
delay(10);
ST=0;
while(0==EOC)
;
OE=1;
AD_DATA[0]=P2;
OE=0;
ST=0;
ADDCS=1; //选择通道IN1
delay(10);
ST=1; //启动AD转换
delay(10);
ST=0;
while(0==EOC);
OE=1;
AD_DATA[1]=P2;
OE=0;
}
/*****************主函数**************/
voidmain()
{
init();
while
(1)
{
AD();
}
}
注:
由于ADC0809内部不带时钟电路,因此用51单片机的定时器T0来产生时钟信号。
在通道选择时,由于B,C接地,当A(ADDCS)为低电平时选择IN0,A为高电平时选择IN1