基于AD转换的单片机实验和C语言开发.docx

上传人:b****4 文档编号:5035037 上传时间:2022-12-12 格式:DOCX 页数:15 大小:307.79KB
下载 相关 举报
基于AD转换的单片机实验和C语言开发.docx_第1页
第1页 / 共15页
基于AD转换的单片机实验和C语言开发.docx_第2页
第2页 / 共15页
基于AD转换的单片机实验和C语言开发.docx_第3页
第3页 / 共15页
基于AD转换的单片机实验和C语言开发.docx_第4页
第4页 / 共15页
基于AD转换的单片机实验和C语言开发.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于AD转换的单片机实验和C语言开发.docx

《基于AD转换的单片机实验和C语言开发.docx》由会员分享,可在线阅读,更多相关《基于AD转换的单片机实验和C语言开发.docx(15页珍藏版)》请在冰豆网上搜索。

基于AD转换的单片机实验和C语言开发.docx

基于AD转换的单片机实验和C语言开发

摘要2

1设计软件基础知识3

1.1C编译器Keil介绍3

1.2Proteus软件简介3

2总体设计5

2.2系统框图5

2.351单片机简介5

2.4ADC0809简介6

2.4.1ADC0809部结构6

2.3.2ADC0809的工作过程7

3.1功能简介9

3.2总原理图9

3.2.1单片机电路9

3.2.2ADC采样电路10

3.2.3显示模块11

3.3系统流程图12

4程序代码13

5仿真结果与分析19

6心得体会20

摘要

A/D转换是将连续的模拟量通过取样转换成离散的数字量。

A/D转换包括采样、保持、量化和编码四个过程。

在某些特定的时刻对这种模拟信号进行测量叫做采样,量化噪声及接收机噪声等因素的影响,采样速率一般取fs=2.5fmax。

通常采样脉冲的宽度tw很短,故采样输出是断续的窄脉冲。

要把一个采样输出信号数字化,需要将采样输出所得的瞬时模拟信号保持一段时间,这就是保持过程。

量化是将连续幅度的抽样信号转换成离散时间、离散幅度的数字信号,量化的主要问题是量化误差。

假设噪声信号在量化电平中是均匀分布的,则量化噪声均方值与量化间隔和模数转换器的输入阻抗值有关。

编码是将量化后的信号编码成二进制代码输出。

这些过程有些是合并进行的。

本次课程设计的要:

基于A/D转换模块的单片机实验和C语言开发,设计一种多路模拟信号采集模块,从多个通道轮流采集数据一次,并将采集的结果存放在数组中。

要求进行电路实验或仿真,并使用C语言进行程序的开发。

1设计软件基础知识

1.1C编译器Keil介绍

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。

在开发大型软件时更能体现高级语言的优势。

KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。

除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。

此外其置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。

uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。

uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices的ADuC83x和ADuC84x,以及Infineon的XC866等。

1.2Proteus软件简介

Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前最好的仿真单片机及外围器件的工具。

虽然目前国推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

其功能特点如下:

Proteus软件具有其它EDA工具软件(例:

multisim)的功能。

其功能模块:

—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。

PROSPICE仿真器的一个扩展PROTEUSVSM:

便于包括所有相关的器件的基于微处理器设计的协同仿真。

此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LED甚至LCD显示CPU模型。

Protues主要特征:

1)支持许多通用的微控制器,如ARM,PIC,AVR,以及8051.

2)交互的装置模型包括:

LED和LCD显示,RS232终端,通用键盘

3)强大的调试工具,包括寄存器和存储器,断点和单步模式

4)IARC-SPY和KeiluVision4等开发工具的源层调试

革命性的特点:

  

1)互动的电路仿真用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

  

2)仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。

还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。

配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

 

2总体设计

2.2系统框图

此次设计的多通道数据采集系统设置了4路模拟电压输入通道。

仿真中为了便于调节输入的模拟电压,在输入模拟信号时采用电阻分压,最终的采样输入电压便可根据测试需要调节。

系统框图如图2.1所示

 

图2.1系统框图

2.351单片机简介

单片微型计算机(Single-ChipMicrocomputer),简称单片机。

就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。

本次课程设计选用的是MCS-51系列单片机中的89C51。

MCS-51单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O接口、串行I/O接口和中断系统等几大单元。

其部结构框图如图2.2所示。

图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系统流程图

图3.5系统流程图

4程序代码

#include

   #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_(uchar)

   {

   lcdrs=0;

   P0=;

   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_(0x80+h*0x40+l);

   while(*p!

='\0')

   {

   write_data(*p);

   p++;

   }

   }

   /*初始化函数*/

   voidLcdInit()

   {

   lcdrw=0;

   delay(5);

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

   write_(0x38);

   write_(0x0c);

   write_(0x06);

   write_(0x01);

   write_(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]群芳,士军,黄建.单片微型计算机与接口技术.:

电子工业,2008

[2]群芳.单片机原理接口与应用.:

清华大学,2005

[3]迎新.单片微型计算机原理、应用及接口技术.:

国防工业,1999

[4]高峰.单片微机应用系统设计及使用技术.:

机械工业,2007

[5]伟.单片机C语音程序设计实例基于protues仿真.:

电子工业,2007

[6]郭惠.单片机C语言程序设计完全自学手册.:

电子工业,2008

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

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

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