基于AD转换的单片机实验和C语言开发_第1页
基于AD转换的单片机实验和C语言开发_第2页
基于AD转换的单片机实验和C语言开发_第3页
基于AD转换的单片机实验和C语言开发_第4页
基于AD转换的单片机实验和C语言开发_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录TOC\o"1-3"\h\u29119摘要 摘要A/D转换是将连续的模拟量通过取样转换成离散的数字量。A/D转换包括采样、保持、量化和编码四个过程。在某些特定的时刻对这种模拟信号进行测量叫做采样,量化噪声及接收机噪声等因素的影响,采样速率一般取fs=2.5fmax。通常采样脉冲的宽度tw很短,故采样输出是断续的窄脉冲。要把一个采样输出信号数字化,需要将采样输出所得的瞬时模拟信号保持一段时间,这就是保持过程。量化是将连续幅度的抽样信号转换成离散时间、离散幅度的数字信号,量化的主要问题是量化误差。假设噪声信号在量化电平中是均匀分布的,则量化噪声均方值与量化间隔和模数转换器的输入阻抗值有关。编码是将量化后的信号编码成二进制代码输出。这些过程有些是合并进行的。本次课程设计的要求是:基于A/D转换模块的单片机实验和C语言开发,设计一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。要求进行电路实验或仿真,并使用C语言进行程序的开发。图2.251内部系统结构2.4ADC0809简介ADC0809是8位逐次逼近式A/D转换器。其内部有一个8通道多路模拟开关,片内带有三态输出缓冲器,可直接与单片机的数据总线相连接。它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。2.4.1ADC0809内部结构ADC0809的内部结构如图2.3所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。图2.3ADC0809内部结构各部分功能及作用:IN0~IN7:8路模拟通道信号输入,通过模拟开关实现8路模拟输入信号分时选通。ADDC,ADDB和ADDA:模拟通道选择,编码000~111分别选中IN0~IN7。ALE:地址锁存信号,其上升沿锁存ADDC,ADDB,ADDA信号,译码后控制模拟开关,接通8路模拟信号中相应的一路。CLK:输入时钟,为A/D转换器提供转换的时钟信号,典型工作频率640HZ。START:A/D转换启动信号,正脉冲启动ADDC~ADDA选中的一路模拟信号开始转换。OE:输出允许信号,高电平时打开三态输出缓存器,使转换后的数字量从D0~D7脚输出。EOC:转换结束信号,启动转换后,EOC变为低电平,转换完成后变为高电平。根据读入转换结果的方式,此信号可有三种方式和单片机相连。1)延时方式:EOC悬空,启动转换后,延时100us后读入转换结果。2)查询方式:EOC接单片机端口线,查得EOC变高,读入转换结果,作为查询信号。3)中断方式:EOC经非门接单片机的中断请求端,转换结果作为中断请求信号向单片机提出中断申请,在中断服务中读入转换结果。Vref(+)和Vref(-):基准电压输入,用于决定模拟电压的范围。允许Vref(+)和Vref(-)是差动的或不共地的电压信号,多数情况下,Vref(+)接+5V,Vref(-)接GND,此时输入量程为0~5V。当转换精度要求不高或电源电压Vcc较稳定和准确时,Vref(+)可以接Vcc,否则应单独提供基准电源。2.3.2ADC0809的工作过程首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。转换数据的传送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信号即有效,把转换数据送上数据总线,供单片机接受。3多路模拟信号采集模块设计3.1功能简介 使用ADC0809型号的A/D转换器对多路模拟信号进行数据采集,同时与单片机进行通信,将测量的模拟信号量传递给89C51单片机,由单片机进行运算,输出对应的数字量,然后在数码管上显示出来。设计中采用开关来选择输入不同通道的模拟信号。3.2总原理图图3.1多通道数据采集总原理图3.2.1单片机电路单片机最小系统如下图所示,各个引脚都已经标出。图3.2单片机最小系统其中,振荡电路以及复位电路均由单片机系统自带。3.2.2ADC采样电路图3.3ADC模数转换3.2.3显示模块本次设计采用数码管来显示数据。图3.4数码管3.3系统流程图开始开始初始化采集数据数模转换检测是否转换完毕单片机存储LED显示地址增加NY图3.5系统流程图4程序代码#include<reg52.h>

#defineucharunsignedchar

#defineuintunsignedint

/********************定义LCD1602接口信息********************************/

sbitlcdrs=P3^0;//数据命令选择位

sbitlcden=P3^1;//使能位

sbitlcdrw=P3^2;

//LCD1602数据线接P0口

/********************定义ADC0808接口信息********************************/

sbitADA=P2^0;

sbitADB=P2^1;

sbitADC=P2^2;

sbitEOC=P2^3;

sbitCLK=P2^4;

sbitSTART=P2^5;

sbitOE=P2^6;

/*********************定义数据********************************/

ucharstring1[]="XuzhiqiangADSp";//初始化数据

ucharstring2[]="Chanfrom1to8";

uchartab[]="0.00.00.00.0";//存放AD采集数据

uchartab1[]="0.00.00.00.0";

ucharnum,getdata=0;

uinttemp=0;

/*延时函数*/

voiddelay(uchart)

{

ucharx,y;

for(x=t;x>0;x--)

for(y=110;y>0;y--);

}

voiddelayl(ucharltime)

{

uchari;

for(i=ltime;i>0;i--)

delay(255);

}

/*写命令函数*/

voidwrite_com(ucharcom)

{

lcdrs=0;

P0=com;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

/*写数据函数*/

voidwrite_data(uchardate)

{

lcdrs=1;

P0=date;

delay(10);

lcden=1;

delay(10);

lcden=0;

}

voiddisp(ucharh,l,uchar*p)

{

write_com(0x80+h*0x40+l);

while(*p!='\0')

{

write_data(*p);

p++;

}

}

/*初始化函数*/

voidLcdInit()

{

lcdrw=0;

delay(5);

lcden=0;//使能位置低电平

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

disp(0,0,&string1[0]);

disp(1,0,&string2[0]);

delayl(20);

}

voidTimeInit()

{

TMOD=0x10;//定时器1工作于方式1,16位不重装初值

TH1=(65536-200)/256;//定时200us(5KHz)

TL1=(65536-200)%256;

EA=1;

ET1=1;

TR1=1;

}

voidAdTr(bitADDA,ADDB,ADDC,ucharchannel)

{

START=0;

OE=0;

START=1;

START=0;//A/D转换启动信号,正脉冲启动选中的模拟信号开始转换

ADA=ADDA;

ADB=ADDB;

ADC=ADDC;

delay(5);

while(EOC==0);//启动转换后EOC变为L,转换结束后变为H

OE=1;

getdata=P1;

temp=getdata*1.0/255*50;

OE=0;

if(channel<4)

{

tab[4*channel]=temp/10+0x30;

tab[4*channel+2]=temp%10+0x30;

}

if(channel>=4)

{

channel=channel-4;

tab1[4*channel]=temp/10+0x30;

tab1[4*channel+2]=temp%10+0x30;

}

}

voidmain()

{

LcdInit();

TimeInit();

while(1)

{

AdTr(0,0,0,0);

delay(5);

AdTr(0,0,1,1);

delay(5);

AdTr(0,1,0,2);

delay(5);

AdTr(0,1,1,3);

delay(5);

AdTr(1,0,0,4);

delay(5);

AdTr(1,0,1,5);

delay(5);

AdTr(1,1,0,6);

delay(5);

AdTr(1,1,1,7);

delay(5);

disp(0,0,tab);

disp(1,0,tab1);

}

}

voidt1(void)interrupt3using0

{

TH1=(65536-200)/256;

TL1=(65536-200)%256;

CLK=~CLK;

}5仿真结果与分析图5.1图5.2图5.3图5.4通过调节电阻来控制模拟信号的输入,由上图可以看出,采集的模拟量经过A/D转换后的数字量分别为:51、168、130、204。6心得体会这次课程设计的题目是基于A/D转换模块的单片机实验和C语言开发,任务是设计一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。要求进行电路实验或仿真,并使用C语言进行程序的开发。这需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定,设计和选取电路和元器件,分析指标及讨论,完成设计任务。在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。动手能力得到很大的提高。从中我发现自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论