当前位置:文档之家› 基于AD转换模块的单片机仿真和C语言开发

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

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

1摘要

1.1 功能描述

使用ADC0808型号的A/D转换器对多路模拟信号进行数据采集,同时与单片机进行通信,将测量的模拟信号量传递给89C51单片机,由单片机进行运算,输出对应的数字量,然后在数码管上显示出来。设计中采用开关来选择输入不同通道的模拟信号。

1.2系统框图

图1 系统框图

2 设计软件基础知识

2.1 C编译器Keil介绍

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。

Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

KeilSoftware公司推出的uVision4是一款可用于多种8051MCU的集成开发环境(IDE),该IDE同时也是PK51及其它开发套件的一个重要组件。除增加了源代码、功能导航器、模板编辑以及改进的搜索功能外,uVision3还提供了一个配置向导功能,加速了启动代码和配置文件的生成。此外其内置的仿真器可模拟目标MCU,包括指令集、片上外围设备及外部信号等。uVision3提供逻辑分析器,可监控基于MCUI/O引脚和外设状态变化下的程序变量。uVision4提供对多种最新的8051类微处理器的支持,包括AnalogDevices 的ADuC83x和ADuC84x,以及Infineon的XC866等。

2.2 Proteus软件简介

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex

和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil 和MPLAB等多种编译器。

功能特点:1.原理布图; 2.PCB自动或人工布线;3.SPICE电路仿真。

革命性的特点:

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

2.仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。

2.3 51单片机相关知识

单片微型计算机(Single-Chip Microcomputer),简称单片机。就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。本次课程设计选用的是MCS-51系列单片机中的80C51。MCS-51单片机包含中央处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时器/计数器、并行I/O接口、串行I/O接口和中断系统等几大单元。其内部结构框图如图1所示。

图2.1 51内部系统结构

中央处理器由运算器、控制器组成。8051的CPU包含以下功能部件:(1)8位CPU。

(2)布尔代数处理器,具有位寻址能力。

(3)128B内部RAM数据存储器,21个专用寄存器。

(4)4KB内部掩膜ROM程序存储器。

(5)2个16位可编程定时器/计数器。

(6)32位(4×8位)双向可独立寻址的I/O口。

(7)1个全双工UART(异步串行通信口)。

(8)5个中断源、两级中断优先级的中断控制器。

(9)时钟电路,外接晶振和电容可产生1.2MHz~12 MHz的时钟频率。(10)外部程序/数据存储器寻址空间均为64KB。

(11)111条指令,大部分为单字节指令。

(12)单一+5V电源供电,双列直插40引脚DIP封装。

内部结构如图2所示

图2.2 51内部结构

MCS-51单片机中有两个16位的定时器/计数器T0和T1,它们由4个8位寄存器(TL0, TH0, TL1和TH1)组成,2个16位定时器/计数器是完全独立的。可以单独对这4个寄存器进行寻址,但不能把T0和T1当做16位寄存器来使用。

2.3.1 80C51引脚说明

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明。

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在我们对这些引脚的功能加以说明。如图5所示。

图2.3 51单片机引脚图

复位信号复用脚,当80C51通电,时钟电路开始工作,在RESET引脚Pin9:RESET/V

pd

上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,

程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专

用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,80C51的初始态。

80C51的复位方式可以是自动复位,也可以是手动复位,见下图4。此外,RESET/V

pd 还是一复用脚,V

掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。

cc

Pin30:ALE/PROG当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。

如果单片机是EPROM,在编程其间,PROG将用于输入编程脉冲。

Pin29:PSEN当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。

程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存Pin31:EA/V

pp

储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。显然,对内部无程序存储器的8031,EA端必须接地。

2.4 ADC0809简介

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转换器、逐次逼近寄存器、逻辑控制和定时电路组成。

图2.4 ADC0809

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

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

3.1 单片机电路

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

图3.1 单片机最小系统

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

3.2 ADC采样电路

由于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变成高电平。

图3.2 ADC模数转换

3.3显示模块

:本次设计采用数码管来显示数据。

图2.3 数码管

3.4总原理图

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

4 软件设计

4.1 系统总流程图

此次设计的多通道数据采集系统设置了8路模拟电压输入通道。仿真中为了便于调节输入的模拟电压,在输入模拟信号时采用电阻分压,最终的采样输入电压便可根据测试需要调节,如下为系统总流程图:

图4.1 系统流程图

4.2 程序代码

#include

#include

/*****端口声明***********/

sbit P3_4=0xb4;

sbit P3_5=0xb5;

#define start P3_4

#define ale P3_5

/****主程序************/

void main()

{

unsigned int temp;

char i,j;

P1=0xff;

IE=0x0;

ale=0;

start=0;

TMOD=0; //设置定时器0工作方式为工作方式0 TCON=0x04;

TL0=0x08; //设置定时器初值

TH0=0xa2;

ET0=1;

EX1=1;

EA=1;

TR0=1;

while(1) //等待中断发生

{

temp=P1/256.0*5*1000;//转化为显示的电压值

i=temp%1000/100;

j=temp%100/10;

P0=(j<<4)+temp%10; //送数码管显示

P2=((temp/1000)<<4)+i;

}

}

/******定时器0中断服务程序 ********/

void timerint () interrupt 1

{

int i;

EA=0; //关定时器

TR0=0;

ale=1;

for(i=0;i<5;i++) //启动AD采集,分别采集5次

;

start=1;

for(i=0;i<5;i++);

;

start=0;

ale=0;

TL0=0x08; //重新赋初值

TH0=0x0A2;

TR0=1;

EA=1;

}

/*********外部中断1服务程序*******/

void int1 () interrupt 2

{

unsigned int temp;

char i,j;

EA=0;

temp=P1/256.0*5*1000;//转化为显示的电压值

i=temp%1000/100;

j=temp%100/10;

P0=(j<<4)+temp%10; //送数码管显示

P2=((temp/1000)<<4)+i;

EA=1;

}

5 实验记录与结果分析

5.1 仿真基本流程

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

图5.1 Keil软件图

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

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

图5.2 单片机属性编辑框

点击仿真按键,数码管便可显示8路电压采集信号,见图5.3及图5.4。

5.2 仿真结果

图5.3 电压设置值

输入通道0数据,结果如图5.4.1;改变滑动变阻器阻值,结果如图5.4.2

图5.4.1 图5.4.2 输入通道0数据,结果如图5.5.1;改变滑动变阻器阻值,结果如图5.5.2

图5.5.1 图5.5.2

如图14所示,8路模拟通道电压值分别设置为0.5V、1.0V、1.5V、2.0V、3.0V、3.5V、4.0V、4.5V。经过系统处理,数码管显示的采集值分别为0.507V、0.996V、1.503V、1.992V、2.988V、3.476V、3.984V、4.472V,存在系统误差。

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

5.3 结果分析

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

6 心得体会

通过与同学的讨论与认真计算设计分析所完成的,课程设计的任务是设计一个多通道数据采集系统。需要我们综合运用单片机等课程的知识,通过查阅资料、方案论证与选定;设计和选取电路和元器件;分析指标及讨论,完成设计任务。

在这次课程设计中,我学会了怎样去根据课题的要求去设计电路和调试电路。动手能力得到很大的提高。从中我发现自己并不能很好的熟练去使用我所学到的高频电路知识。在以后学习中我要加强对使用电路的设计和选用能力。但由于电路比较简单、定型,而不是真实的生产、科研任务,所以我们基本上能有章可循,完成起来并不困难。把过去熟悉的定型分析、定量计算逐步,元器件选择等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法。这对今后从事技术工作无疑是个很好的训练。通过这种综合训练,我们可以掌握电路设计的基本方法,提高动手组织实验的基本技能,培养分析解决电路问题的实际本领,为以后毕业设计和从事电子实验实际工作打下基础。

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

还有就是每次在组团做试验都会感觉特别的充实。最后真心的感谢老师对本次课程设计的建议和帮助,正是因此大家就才得以圆满的完成这次课程设计!

7参考文献

[1] 李群芳,张士军,黄建.单片微型计算机与接口技术. 北京:电子工业出版社,2008

[2] 李群芳.单片机原理接口与应用.北京:清华大学出版社,2005

[3] 张迎新.单片微型计算机原理、应用及接口技术.北京:国防工业出版社,1999

[4] 高峰.单片微机应用系统设计及使用技术.北京:机械工业出版社,2007

[5] 彭伟.单片机C语音程序设计实例基于protues仿真.北京:电子工业出版社,2007

[6] 郭惠.单片机C语言程序设计完全自学手册.北京:电子工业出版社,2008

相关主题
文本预览
相关文档 最新文档