ATMEGA128单片机的数据实时采集系统 - 图文(8)

2019-08-31 12:36

沈阳理工大学学士学位论文

ADC 包括一个采样保持电路,以确保在转换过程中输入到ADC 的电压保持恒定。ADC 的ADC 由AVCC 引脚单独提供电源。AVCC 与VCC 之间的偏差不能超过± 0.3V。请参考P219“ADC 噪声抑制器” 来了解如何连接这个引脚。标称值为2.56V 的基准电压,以及AVCC,都位于器件之内。基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。ADC 通过逐次逼近的方法将输入的模拟电压转换成一个10 位的数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1 LSB。通过写ADMUX寄存器的REFSn位可以把AVCC 或内部2.56V 的参考电压连接到AREF 引脚。在AREF 上外加电容可以对片内参考电压进行解耦以提高噪声抑制性能。 模引脚,像GND 及固定能隙参考电压,都可以作为ADC 的单端输入。ADC 输入引脚可选做差分增益放大器的正或负输入。如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级。然后放大值成为ADC 的模拟输入。如果使用单端通道,将绕过增益放大器。通过设置ADCSRA 寄存器的ADEN 即可启动ADC。只有当ADEN 置位时参考电压及输入通道选择才生效。ADEN 清零时ADC 并不耗电,因此建议在进入节能睡眠模式之前关闭ADC。

ADC转换结果为10位,存放于ADC数据寄存器ADCH及ADCL中。默认情况下转换结果为右对齐,但可通过设置ADMUX 寄存器的ADLAR 变为左对齐。如果要求转换结果左对齐,且最高只需8 位的转换精度,那么只要读取ADCH 就足够了。否则要先读ADCL,再读ADCH,以保证数据寄存器中的内容是同一次转换的结果。一旦读出ADCL, ADC 对数据寄存器的寻址就被阻止了。也就是说,读取ADCL 之后,即使在读ADCH 之前又有一次ADC 转换结束,数据寄存器的数据也不会更新,从而保证了转换结果不丢失。ADCH 被读出后, ADC 即可再次访问ADCH 及ADCL 寄存器。ADC转换结束可以触发中断。即使由于转换发生在读取ADCH与ADCL之间而造成ADC无法访问数据寄存器,并因此丢失了转换数据,中断仍将触发。

32

沈阳理工大学学士学位论文

4 软件设计

4.1 单片机C语言程序设计

4.1.1 单片机C语言的主要特点

随着AVR技术的发展以及系统的日益发展,对嵌入式系统代码的执行效率与可靠性要求越来越高。同时为了满足工程师的协作要求,执行代码还必须有规范性、模块化的特点。C语言作为一门结构化的语言,具有功能性强、效率高和与系统接近等特点。 用C编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能,这样可使整个应用系统程序结构清晰,易于调试和维护。不同的功能模块,分别指定相应的入口参数和出口参数,对于一些要重复调用的程序一般把其编成函数,这样可以减少程序代码的长度,又便于整个程序的管理,还可增强可读性和移植性。

在实际单片机程序设计中,程序结构一般均采用如下结构: #include /*头文件说明部份*/ unsigned char x1,x2; /*全局变量声明部份*/ …Function1(… ){ /*功能函数定义部份*/ …… } main() {

inti,j; /* 整型变量声明部份*/ Function1(…); /* 功能函数说明部份*/ ……}

C语言具有很强的功能性和结构性,可以缩短单片机控制系统的开发周期,而且易于调试和维护,已经成为目前单片机语言中最流行的编程语言。

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

33

沈阳理工大学学士学位论文

对于目前普遍使用的RISC架构的8bit MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。而且一些单片机厂家也不一定能提供C编译器。而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。

而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。

4.2 主流程

4.2.1 整体程序的设计

整体程序采用分模块设计法,各模块主要包括:ATmege128函数、AD转换函数和LED显示函数等。

4.2.2 ATmega128函数

34

沈阳理工大学学士学位论文

图4.1 初始化程序流程图

4.2.3 AD转换函数

根据ATmega128自带的10位AD转换,所以需要配置ADCSRA和ADNUX两个寄存器,程序里面配置的ADCSRA=0xC6则是选择64分频,连续转换,使能AD转换的意思。ADMUX=0x00则是参考电压为AREF,输出结果右对齐,模拟通道为单端输入,输入引脚为PF0。因为用的晶振是11.0592,所以系统时钟是93us,(1/11.0592)*1024=93us。定时器的时间t=(FFFF-TCNT1)*93us=508*93=47.24ms。所以转换时间为1S。其流程踢如图4.2所示。

图4.2 AD转换程序流程图

35

沈阳理工大学学士学位论文

4.3 系统运行

4.3.1 程序下载软件

如果使用并口下载线,并口接电脑 ,另一端接电路板上 。ISP下载需使用软件SLISP。

图4.3 程序下载界面图

4.3.2 系统运行结果

程序下载完毕后,LED显示出电压图4.4是显示的3.5V

36


ATMEGA128单片机的数据实时采集系统 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版六年级品德与社会上册教学计划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: