基于AD转换模块的单片机仿真和C语言开发.docx

上传人:b****0 文档编号:9017525 上传时间:2023-05-16 格式:DOCX 页数:18 大小:109.73KB
下载 相关 举报
基于AD转换模块的单片机仿真和C语言开发.docx_第1页
第1页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第2页
第2页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第3页
第3页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第4页
第4页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第5页
第5页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第6页
第6页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第7页
第7页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第8页
第8页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第9页
第9页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第10页
第10页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第11页
第11页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第12页
第12页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第13页
第13页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第14页
第14页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第15页
第15页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第16页
第16页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第17页
第17页 / 共18页
基于AD转换模块的单片机仿真和C语言开发.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于AD转换模块的单片机仿真和C语言开发.docx

《基于AD转换模块的单片机仿真和C语言开发.docx》由会员分享,可在线阅读,更多相关《基于AD转换模块的单片机仿真和C语言开发.docx(18页珍藏版)》请在冰点文库上搜索。

基于AD转换模块的单片机仿真和C语言开发.docx

基于AD转换模块的单片机仿真和C语言开发

目录

摘要I

1设计软件基础知识1

1.1C编译器Keil介绍1

1.251单片机相关知识1

1.3ADC0809简介1

2多通道数据采集系统设计4

2.1单片机电路4

2.2ADC采样电路4

2.3显示模块5

2.4总原理图6

3软件设计7

3.1系统总流程图7

3.2程序代码7

4实验记录与结果分析13

4.1仿真基本流程13

4.2仿真结果14

4.3结果分析15

5心得体会16

参考文献17

 

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.251单片机相关知识

51单片机是对目前所有兼容intel8031指令系统的单片机的统称。

该系列单片机的始祖是intel的8031单片机,后来随着技术的发展,成为目前广泛应用的8为单片机之一。

单片机是在一块芯片内集成了CPU、RAM、ROM、定时器/计数器和多功能I/O口等计算机所需要的基本功能部件的大规模集成电路,又称为MCU。

51系列单片机内包含以下几个部件:

一个8位CPU;一个片内振荡器及时钟电路;4KB的ROM程序存储器;一个128B的RAM数据存储器;寻址64KB外部数据存储器和64KB外部程序存储空间的控制电路;32条可编程的I/O口线;两个16位定时/计数器;一个可编程全双工串行口;5个中断源、两个优先级嵌套中断结构。

1.3ADC0809简介

ADC0809是美国国家半导体公司生产的CMOS工艺8通道,8位逐次逼近式AD转换器。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

(1)主要特性:

  1)8路输入通道,8位A/D转换器,即分辨率为8位。

  2)具有转换起停控制端。

  3)转换时间为100μs(时钟为640kHz时),130μs(时钟为500kHz时)。

 

  4)单个+5V电源供电。

  5)模拟输入电压范围0~+5V,不需零点和满刻度校准。

  6)工作温度范围为-40~+85摄氏度。

  7)低功耗,约15mW。

(2)内部结构

ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图1.1所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

 

图1.1ADC0809

(3)工作过程

首先输入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信号即有效,把转换数据送上数据总线,供单片机接受。

 

2多通道数据采集系统设计

2.1单片机电路

单片机最小系统如下图所示,各个引脚都已经标出。

 

图2.1单片机最小系统

其中,振荡电路以及复位电路均由单片机系统自带。

2.2ADC采样电路

由于ADC0809是带地址锁存的模数转换器件,ADDA、ADDB、ADDC为模拟通道选择,编码为000~111分别选中IN0~IN7。

ALE为地址锁存信号,其上升沿锁存ADDA、ADDB、ADDC的信号,译码后控制模拟开关,接通八路模拟输入中相应的一路。

CLK为输入时钟,为AD转换器提供转换的时钟信号,典型工作频率为640KHz。

START为AD转换启动信号,正脉冲启动ADDA~ADDC选中的一路模拟信号开始转换。

OE为输出允许信号,高电平时候打开三态输出缓存器,使转换后的数字量从D0~D7输出。

EOC为转换结束信号,启动转换后EOC变为低电平,转换完成后EOC变成高电平。

 

图2.2ADC模数转换

2.3显示模块

以下是1602液晶引脚的接线图,中间没有接线的为数据控制端口。

1602字符型通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样:

 

图2.3LCD1602模块

2.4总原理图

 

图2.4多通道数据采集总原理图

 

3软件设计

3.1系统总流程图

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

仿真中为了便于调节输入的模拟电压,在输入模拟信号时采用电阻分压,最终的采样输入电压便可根据测试需要调节,如下为系统总流程图:

图3.1系统流程图

3.2程序代码

#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_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;

}

 

4实验记录与结果分析

4.1仿真基本流程

在Keil软件中编写好C语言程序,编译生成.hex文件。

 

图4.1Keil软件图

在Protues软件中画好电路元件图,并将连线接好,见图2.4。

添加仿真文件。

单击右键AT89C52,点击属性编辑,出现文件浏览对话框,加入对应的nengliyuozhan.hex文件,点击确定,见下图4.2。

 

 

图4.2单片机属性编辑框

点击仿真按键,LCD1602便可显示8路电压采集信号,见图4.3及图4.4。

4.2仿真结果

 

图4.3电压设置值

 

 

图4.4采集显示值

如图14所示,8路模拟通道电压值分别设置为0、0.5V、1.0V、1.5V、2.0V、3.0V、4.0V、5.0V。

经过系统处理,LCD1602显示的采集值分别为0、0.5V、1.0V、1.5V、2.0V、3.0V、4.0V、5.0V。

系统误差为0。

改变8路输入信号的电压值,数据可及时在LCD1602上显示。

4.3结果分析

通过用protues软件的仿真发现此次设计的系统原理图能够实现电压的正确测量,而且电压的误差较小,1602液晶屏能够正确显示出8路电压测量结果。

整个作品能较好的实现基本功能和扩展功能。

 

5心得体会

通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计一个多通道数据采集系统。

需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。

在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。

动手能力得到很大的提高。

从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。

在以后学习中我要加强对使用电路的设计和选用能力。

但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。

把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。

这对今后从事技术工作无疑是个很好的训练。

通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。

同时也让我充分认识到自己的空想与实践的差别,认识莫眼高手低,莫闭门造车,知识都在不断更新和流动之中,而扎实的基础是一切创造的源泉,只有从本质上理解了原理,才能更好的于疑途寻求柳暗花明,实现在科学界的美好畅游和寻得创造的快乐。

还有就是每次在组团做试验都会感觉特别的充实。

最后真心的感谢老师对本次课程设计的建议和帮助,正是因此大家就才得以圆满的完成这次课程设计!

 

参考文献

[1]李群芳,张士军,黄建.单片微型计算机与接口技术.北京:

电子工业出版社,2008

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

清华大学出版社,2005

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

国防工业出版社,1999

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

机械工业出版社,2007

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

电子工业出版社,2007

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

电子工业出版社,2008

 

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2