单片机课设AD转换.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date单片机课设AD转换(一) 目录 目录摘要:A/D转换是指将模拟信号转换为数字信号,这在信号处理、信号传输等领域具有重要的意义。常用的A/D转换电路有专用A/D集成电路、单片机ADC模块,前者精度高、电路复杂,后者成本低、设计简单。基于单片机的A/D转换电路在实际电路中获得了广泛的应用,论文对这一电路结构进行了详细的研究。关键词:单片机;AD转换器;电路(二)前言:在设计一个控制系统时,首先要对系统进行分析明确设计任务和设计要求,作为系统方案设计的依据。合理选着系统的构成方案,合理规划分硬件和软件的功能,以有利于兼顾性能、价格比和缩短开发周期。硬件设计应以在充分满足系统功能的前提下最简单为原则,在系统的运用中,单片机被广泛运用。A/D转换的方法是由传输信号与接收信号图解方法,借助这种方法可以在已知发,接收点和存储的条件下,制造出各式各样的电器产品。(三)目的要求:一要求 利用实验台上的ADC0809做A/D转换器,实验箱上的电位器提供模拟电压信号输入,编制程序,将模拟量转换成数字量,用数码管显示模拟量转换的结果。二目的1 掌握A/D转换与单片机的接口方法。2 了解A/D芯片ADC0809转换性能及编程方法。3 通过设计了解单片机如何进行数据采集。三原理1. ADC0809读写原理A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。ADC0809属第二类,是八位A/D转换器。每采集一次需100us。ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令: MOV DPTR,#PORT MOVX DPTR,AA中为何内容并不重要,这是一次虚拟写。在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相连接。在中断处理程序中,使用如下指令即可读取A/D转换的结果: MOV DPTR,#PORT MOVX A,DPTR 2.电路原理 实验板连接:将ADC0809的片选信号CS0809接CS0;电位器的输出信号AN0接0809的ADIN0;EOC接CPU板的INT0.四编程要点 学习ADC0809原理(参考教材第8章内容),了解本实验电路原理,数码管显示模拟量参照题目5。五基本任务1.利用实验设备正确接线。画出整体原理图。2.编制采集模拟电压信号及显示程序,并调试运行正确。3.画出程序流程图。(四) 总体设计数据采集,主要由三大模块组成:A/D转换模块,8051单片机模块和七段译码显示模块。首先,通过实验箱产生0-5V可调电压;然后,将0-5V可调电压输入A/D转换进行数模转换,将0-5V的模拟量转换成00H-FFH的数字信号,出入到单片机中,作为输入量进行倍率变换,并经软件编程实现动态扫描,最终在七段译码显示管上显示出温度变化。 该方案的前面部分本应用温度传感器,但试验设备不足,便用0-5V电压代替,之后的过程理论上皆可由实验箱和编程实现,所以具有较高的可行性。(五) 硬件电路5.1总体硬件电路图基于ADC0809的模数转换电路主要由两部分电路组成:单片机最小系统和ADC0809的电路。如图所示ADC0809电路完成模拟量到数字量的转换,单片机完成接收、存储并处理数据的任务。5.2单片机最小系统电路5.2.1最小系统电路图单片机最小系统电路图主要由主要由8051单片机、复位电路和晶振电路组成。5.2.2 8051单片机简介l 8位CPU。l 布尔代数处理器,具有位寻址能力。l 128B内部RAM数据存储器,21个专用寄存器。l 4KB内部掩膜ROM程序存储器。l 两个16位可编程定时器/计数器。l 32个(4*8位)双向可独立寻址的I/O接口。l 一个全双工UART(异步串行通信口)。l 5个中断源,两级中断优先级的中断控制器。l 时钟电路,外接晶振和电容可产生1.212MHz的时钟频率。l 外部程序存储器寻址空间为64KB,外部数据存储器寻址空间为64KB。l 111条指令,大部分为单字节指令。l 单一+5V电源供电,双列直插40引脚DIP封装。5.2.3 复位电路复位电路有两种:上电自动复位和上电/按键手动复位。在这里我们采用上电/按键手动复位,如图所示按下按键SW,电源对电容C充电,使RESET端快速达到高电平。松开按键,电容向芯片的内阻放电,恢复为低电平,从而使单片机可靠复位。既可上电复位,又可按键复位。一般R1选470欧姆,R2选8.2K欧姆,C选22uF。5.2.4 晶振电路晶振电路的两端接到单片机的18(XTAL2)和19(XTAL1)引脚,晶振采用12MHZ,两端各接一个30pF的电容。如图所示5.3 模数转换电路5.3.1 模数转换电路图模数转换电路主要由ADC0809模数转换芯片、74LS02或非门、CC4013D触发器(ALE引脚4分频)5.3.2 ADC0809芯片简介l 分辨率为8位l 误差正负1LSB,无漏码。l 转换时间为100us(当外部时钟输入频率Fc=640kHz时)。l 很容易与微处理器连接。l 单一电源+5V,采用单一电源+5V供电时,量程为05V。l 无须零位或满量程调整。l 带有锁存控制逻辑的8通道多路转换开关,便于选择8路中的任一路进行转换。l DIP28封装l 使用5V或采用经调整模拟间距的电压基准工作。l 带锁存器的三态数据输出。5.3.3 ADC0809 CLK信号产生电路ADC0809的CLK(10号引脚)所需的时钟输入信号的典型值为640kHz,鉴于640kHz频率的获取比较复杂,我们采用在8051的ALE信号的基础上分频的方法。单片机的晶振频率为12MHz时,ALE引脚上的频率大约为2MHz,经4分频后能达到500kHz,4分频是由CC4013两个D触发器实现的,如图所示,在D触发器中,当与D相接时,输出是输入的二分频。所以采用两个D触发器就能实现4分频。5.3.4 ADC0809的8路通道的地址锁存电路地址锁存采用74LS373芯片,如图所示,OE(1号引脚)端接低电平,锁存控制端LE(11号引脚)可以直接与CPU的地址锁存控制信号ALE相连,当LE为高电平时,Q端等于D端,当LE端从高电平下降到低电平时,输入端D的数据锁入锁存器中。D0D7与8051的P0.0P0.7相连。A0,A1,A2分别接ADC0809的A,B,C端,当A0A1A2=000111时,就实现了对ADC0809的8路通道的选择。5.3.5 读写控制信号电路读写控制电路由或非门实现的。74LS02是4输入或非门,其中A,B为输入,Y为输出。8051的P2.7(A15)和经或非门后的信号YSA与ADC0809的ALE端和START端相连,平时START因译码器输入端P2.7上的高电平而封锁,当单片机执行如下程序后MOV DPTR,#7FF8H MOV DPTR,A就启动了AD转换。8051的P2.7(A15)和经或非门后的信号YOE与ADC0809的OE端相连,但单片机执行如下程序后,MOV DPTR,#7FF8H MOV A,DPTR就可以获取AD的转换结果。转换数据的传送可以有定时传送方式,查询方式和中断方式,在这里我们采用中断方式。因为ADC0809的转换时间为100us,而单片机执行一条指令的时间为1us,它们之间相差两个数量级。而且采用中断方式的好处在于可以不占用CPU硬件资源,使CPU可以在转换的过程中完成其他的工作。将ADC0809的EOC引脚经或非门后与8051的INT0相连,这样就能在外部中断子程序中实现对采集来的数据进行存储。(六)软件设计6.1 Keil uVison 3 集成开发环境简介Keil uVison 3 是一套在windows环境下8051单片机整合性开发接口(Intergrated Development Environment,IDE )软件,它具备完善的项目管理系统,提供编译器以编写程序及说明文件,可以协助编写,翻译(包含C语言的编译器C51 Compiler以及A51组译器)除错和测试嵌入式系统程序。其中C51compiler是C语言软件开发系统。与汇编相比,C语言在功能,结构性,可读性和可维护性等方面有明显的优势,而且易学易用,Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外,重要的一点是只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码的效率是非常高的。6.2 主程序主程序主要是设置数据区的起始地址为60H,模拟路数为8路,设置外部中断方式是下降沿触发,开总中断,向ADC0809写数据启动AD转换。开始设数据区的起始地址,模拟路数设外部中断方式,开总中断启动AD转换转换数据结束,触发中断响应中断服务子程序T0中断返回 结束 图1 主流程图的设计框架6.3中断服务程序中断服务程序主要完成取AD转换结果存储,模拟路数自增1,存储区自增1,判断8路是否转换完毕,若完毕则返回。T0中断服务程序取AD转换结果,存储 DPTR,R0自增。R2自减否 R2=0?是 中断返回 图2 T0中断服务程序流程图汇编语言代码ORG 0000HLJMP MAINORG 0003HLJMP INT_T0ORG 0010HMAIN: MOV R0,#60H ;数据区起始地址送R0 MOV R2,#08H ;模拟量路数 8路 SETB EA SETB IT0 MOV DPTR,#7FF8H MOVX DPTR,A ;启动AD转换 SJMP $ ;等待中断INT_T0: MOVX A,DPTR MOV R0,A INC DPTR INC R0 DJNZ R2,LOOP CLR EA CLR EX0 RETILOOP: MOVX DPTR,A ;再次启动 RETI ENDC语言代码#include<reg52.h>#include<absacc.h>#define uchar unsigned char#define ADC0809 XBYTE0x7FF8/ADC0809的地址#define STO0809 PBYTE0x60/将采集来的8路数据存到内存0x600x67中去uchar data R_data8=0;uchar i=0;uchar idata *p,*q;void Init() EA=1; CPU开总中断 EX0=1; IT0=1; *p=ADC0809; *q=STO0809; ADC0809=0x00; /启动ADC0809void main()Init()while(1) ;void Int_t0 interrupt 0 using 1 ACC=*p; R_datai=ACC; *q=ACC; /存入数据区 p+; /模拟路数加1 q+; /存储区指针加1 i+; /数据区指针加1 if(i=8) /判断是否转换完毕。转换完毕关总中断 EA=0; EX0=0(七) 操作说明(八) 结束语: 刚开始,我们一点思路没有,但是大家很积极,很快找到了A/D转换这个切入点。由此入手,我们进入了硬件连接阶段,由于对实验箱不是很熟悉,我们连线时也不是很顺利。我们请教了实验室老师,顺利连好了电路。并且了解到,连电路前要关闭电源并且检查线是否是完好的。接着,我们进入了程序编写阶段。光是这个A/D转换的接口问题我们就研究了很久,到最后换了几个试验箱才完成了对A/D转换功能的验证。模块程序的编写并不是特别难,但是各个模块间的衔接需要仔细思考才能做好。(九) 参考文献-