哈工大毕业论文-张艺

哈工大毕业论文张艺

成人教育学院

毕业设计(论文)

哈工大毕业论文张艺

2012 年 6月

摘 要

近年来,随着大规模集成电路的发展,单片机继续朝快速、高性能方向发展,从4位、8位单片机发展到16位、32位单片机。单片机主要用于控制,它的应用领域遍及各行各业,大到航天飞机,小至日常生活中的冰箱、彩电,单片机都可以大显其能。

单片机技术与传感与测量技术、信号与系统分析技术、电路设计技术、可编程逻辑应用技术、微机接口技术、数据库技术以及数据结构、计算机操作系统、汇编语言程序设计、高级语言程序设计、软件工程、数据网络通信、数字信号处理、自动控制、误差分析、仪器仪表结构设计和制造工艺等的结合,使得单片机的应用非常广泛。同时,单片机具有较强的管理功能。采用单片机对整个测量电路进行管理和控制,使得整个系统智能化、功耗低、使用电子元件较少、内部配线少、成本低,制造、安装、调试及维修方便。

本设计是基于单片机ATMAGE16设计的实时温度采集仪,通过本次设计,我成功的实现了利用单片机对温度的采集和测量。

关键词

单片机 ATMAGE16 DS18B20 ICCAVR 1

目 录

1 绪论 ................................................................................................................... 3

1.1 课题背景 ......................................................................................................... 4

1.2 设计目的及系统功能 ....................................................................................... 4

2 ATMAGE16特性 ............................................................................................... 6

2.1 ATMAGE16产品特性 ..................................................................................... 6

2.2 引脚配置 ......................................................................................................... 8

3 DS18B20的设计 .............................................................................................. 11

3.1 总体通信流程及通信协议 .............................................................................. 11

3.2 DS18B20温度测量软件的设计 ..................................................................... 13

3.3 多机通信软件的设计 ..................................................................................... 14

3.4 DS18B20工作时序问题 ................................................................................ 17

4 电路的设计 ....................................................................................................... 19

4.1 温度测量电路的设计 ..................................................................................... 19

4.2 串口通信电路的设计 ..................................................................................... 20

5 分布式温度采集系统设计 ................................................................................. 23

6 ICCAVR制作环境及介绍 .................................................................................. 25

6.1 ICCAVR 介绍 ............................................................................................... 25

6.2 ICCAVR 向导 ............................................................................................... 28

6.3 ICCAVR 的IDE 环境 ................................................................................... 29

结 论 ................................................................................................................... 32

参考文献 ................................................................................................................ 33

致 谢 ................................................................................................................... 34

附件1:总系统的原理图如下: ............................................................................. 35

附件2:单片机ATMAGE16控制DS18B20的程序: ............................................ 37

2

1 绪论

自从19xx年Intel公司推出第一批单片机以来,80年代单片机技术进入快速发展时期,近年来,随着大规模集成电路的发展,单片机继续朝快速、高性能方向发展,从4位、8位单片机发展到16位、32位单片机。单片机主要用于控制,它的应用领域遍及各行各业,大到航天飞机,小至日常生活中的冰箱、彩电,单片机都可以大显其能。单片机在国内的三大领域中应用得十分广泛:第一是家用电器业,例如全自动洗衣机、智能玩具;第二是通讯业,包括电话、手机和BP机等等;第三是仪器仪表和计算机外设制造,例如软盘、硬盘、收银机、电表。除了上述传统领域外,汽车、电子工业在国外也是单片机应用十分广泛的一个领域。它成本低、集成度高、功耗低、控制功能多能灵活的组装成各种智能控制装置,由它构成的智能仪表解决了长期以来测量仪器中的误差的修正、线性处理等问题。单片机将微处理器、存储器、定时/计数器、I/O接口电路等集成在一个芯片上的大规模集成电路,本身即是一个小型化的微机系统。单片机技术与传感与测量技术、信号与系统分析技术、电路设计技术、可编程逻辑应用技术、微机接口技术、数据库技术以及数据结构、计算机操作系统、汇编语言程序设计、高级语言程序设计、软件工程、数据网络通信、数字信号处理、自动控制、误差分析、仪器仪表结构设计和制造工艺等的结合,使得单片机的应用非常广泛。同时,单片机具有较强的管理功能。采用单片机对整个测量电路进行管理和控制,使得整个系统智能化、功耗低、使用电子元件较少、内部配线少、成本低,制造、安装、调试及维修方便。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。 3

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

1.1 课题背景

分布式温度采集系统广泛应用在使用了中央空调的大型商场、厂房、办公大楼等大型建筑内。本课题主要用温度传感器对环境温度实施实时监测,各结点控制单元可将有关信息上传给计算机,本课题研究主要解决的问题为分布式控制结构设计、多单

片机串行通信、温度的采集与处理。

本设计是基于单片机ATMAGE16设计的实时温度采集仪,采用DS18B20可以采集多路温度数据(本设计只用了2路),同时实时显示所采集到的温度值。在传统的温度测量系统设计中,往往采用模拟技术进行设计,这样就不可避免地遇到诸如引线误差补偿、多点测量中的切换误差和信号调理电路的误差等问题;而其中某一环节处理不当,就可能造成整个系统性能的下降。随着现代科学技术的飞速发展,特别是大规模集成电路设计技术的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向。美国Dallas半导体公司推出的数字温度传感器DSl8B20,具有独特的单总线接口,仅需要占用一个通用I/O端口即可完成与微处理器的通信;在-10~+85℃温度范围内具有±O.01℃精度;用户可编程设定9~12位的分辨率。以上特性使得DSl8B20非常适用于构建高精度、多点温度测量系统。

1.2 设计目的及系统功能

本设计的目的是以单片机为核心设计出一个分布式温度采集系统。在传统测量系统中,传感器与计算机接口的连接是通过若干条导线连接。当传感器数量较多时,尤其是信号线的长距离传输时,相互容易产生干扰。一个室内多点温度测量中,系统的接线会非常多,导线往往不易铺设,使得测量工作非常困难。采用总线结构数字式传感器,配合单片机及PC机 4

串口进行长距离数据通信,则可以很容易解决这个问题,该系统最多可以检测256 路温度信号,在室内多点温度测量控制中能达到很好的效果。通过本课题设计,综合运用单片机及接口技术、微机原理、通信协议,锻炼动手操作能力,综合运用能力,学习论文的写作方法和步骤。 设计的温度控制系统有以下功能及特点:

(a)实现在一条数据总线上接多个DS18B20器件;

(b)测温范围0℃~99℃;

(c)温度显示:采用2个4位数码管,显示采样温度值;

(d)精度±0.01℃。

5 并在电脑上一同显示;

2 ATMAGE16特性

本章介绍了ATMAGE16的产品特性和ATmega16的结构。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达 1MIPS MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。

2.1 ATMAGE16产品特性

1、 高性能、低功耗的 8 位 AVR 微处理器

2、 先进的RISC结构

(a)131 条指令

(b)32 个8 位通用工作寄存器

(c)全静态工作

(d)工作于16 MHz 时性能高达16 MIPS

(e)只需两个时钟周期的硬件乘法器

(f)大多数指令执行时间为单个时钟周期

3、 非易失性程序和数据存储器

(a)16K 字节的系统内可编程 Flash擦写寿命: 10,000 次

(b) 具有独立锁定位的可选Boot 代码区通过片上Boot 程序实现系统内编程真正的同时读写操作

(c)512 字节的EEPROM擦写寿命: 100,000 次

(d)1K 字节的片内SRAM

(e)可以对锁定位进行编程以实现用户程序的加密

4、 JTAG 接口( 与IEEE 1149.1标准兼容 )

(a)符合JTAG标准的边界扫描功能

(b)支持扩展的片内调试功能

(c)通过JTAG接口实现对 Flash、EEPROM、熔丝位和锁定位的编程

5、 外设特点

6

(a)两个具有独立预分频器和比较器功能的8 位定时器/计数

(b)一个具有预分频器、比较功能和捕捉功能的16 位定时器/计数 (c)具有独立振荡器的实时计数器RTC

(d)四通道PWM

(e)8路 10 位ADC8 个单端通道TQFP 封装的7 个差分通道2个具有可编程增

益(1x, 10x, 或200x)的差分通道

(f)面向字节的两线接口

(g) 两个可编程的串行USART

(h) 可工作于主机/从机模式 SPI串行接口

(i) 具有独立片内振荡器的可编程看门狗定时器

(j) 片内模拟比较器

6、 特殊的处理器特点

(a)上电复位以及可编程的掉电检测

(b)片内经过标定的RC 振荡器

(c)片内/片外中断

(d)6种睡眠模式 : 空 ADC噪声抑制模式、省电模式、掉电模式、Standby 、式以扩展的Standby 模式

7、 I/O和封装

(a)32 个可编程的I/O口

(b)40 引脚PDIP封装 , 44 引脚 TQFP 封装,与 44 引脚MLF封装

8、 工作电压:

(a)ATmega16L:2.7 - 5.5V

(b)ATmega16:4.5 - 5.5V

9、速度等级

(a)0 - 8 MHz ATmega16L

7

(b)0 - 16 MHz ATmega16

10、 ATmega16L在 1 MHz, 3V, 25 C时的功耗

(a)正常模式: 1.1 mA

(b)空 : 0.35 mA

(c)掉电模式: < 1 μA

2.2 引脚配置

ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达 1MIPS MHz,从而可以缓减系统在功耗和处理速度之间的矛盾。ATMAGE16引脚分布如图2.1所示。

AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的 CISC微控制器最高至 10倍的数据吞吐率。ATmega16 有如下特点 16K字节的系统内可编程Flash(具有同时读写的能力,即RWW), 8

图2.1 ATMAGE16引脚分布

AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元(ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的 CISC微控制器最高至 10倍的数据吞吐率。ATmega16 有如下特点 16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512 字节 EEPROM,1K字节 SRAM,32 个通用I/O 口线,32 个通用工作寄存器,用于边界扫描的 JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数(T/C),片内/外中断,可编程 USART,有起始条件检测

哈工大毕业论文张艺

9

器的通用串行接口,8路10位具有可选差分输入级可编程增益 (TQFP 封装 ) 的 ADC ,具有片内振荡器的可编程看门狗定时器,一个 SPI串行端口,以及六个可以通过软件进行选择的省电模式。 工作于空闲模式时 CPU 停止工作,而 USART、两线接口、 A/D 转换器、 SRAM、 T/C、 SPI 端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU 和除了异步定时器与ADC以外所有 I/O 模块的工作,以降低 ADC 转换时的开关噪声; Standby 模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展 Standby 模式下则允许振荡器和异步定时器继续工作。本芯片是以 Atmel 高密度非易失性存储器技术生产的。片内 ISP Flash 允许程序存储器通过 ISP 串行接口,或者通用编程器进行编程,也可以通过运行于 AVR 内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续运行,实现了 RWW 操作。 通过 8 位 RISC CPU 与系统内可编程的 Flash 集成在一个芯片内, ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。

10

3 DS18B20的设计

本章介绍了系统软件设计,并具体介绍了实现和调试的方法,以及分布式温度采集系统的通信流程和DS18B20温度测量软件的设计思路、DS18B20工作的时序问题。

3.1 总体通信流程及通信协议

总体通信流程体现在PC机,单片机主机及各从机的通信,信号接受及发送,这个设计中,通信协议是一个非常重要也很复杂的部分,在由PC 机与单片机组成的系统中,常要涉及通信问题,如果没有统一的通信协议,PC机与单片机之间的信息传递就无法识别。

通信协议是指通信各方事前约定规则,我们可以简单地理解为各计算机之间进行相互会话所使用的共同语言.PC机与单片机在进行通信时,必须使用的通信协议。

首先,在设计中自定义几个数据通信协议,如下问提到的“a”、“b”、“c”、“d”、“g”、“h”。这些协议一旦定义,在后面的执行过程中就代表了固定的含义,不再改变,PC机、单片机、从机都靠识别这个协议来执行程序,发送一个字节的数据,接受几个字节的数据,所有的数据协议全都建立在这2个操作方法上。

本设计中自定义“a”为PC机与单片机主机间的数据协议,意思为要求主机发送一号从机的温度给PC机;

自定义“b”为PC机与单片机主机间的数据协议,意思为要求主机发送二号从机的温度给PC机;

自定义“c”为从机与主机间的数据协议,它代表从机向主机发送完四位当前采集的温度,这里一号从机和二号从机采集的温度,都定义为“c”;

自定义“d”为PC机与单片机主机之间的数据协议,意思为开始和完成 11

命令的信号;

自定义“g”为一号从机和单片机主机之间的数据协议,意思为主机表示要采集一号从机的温度数据,一号从机要求单片机主机准备接收; 自定义“h”为二号从机和单片机主机之间的数据协议,意思为主机表示要采集二号从机的温度数据,二号从机要求单片机主机准备接收。 具体流程如下:

1、PC机向单片机主机发送“d”:

这步是流程的开始,PC机向单片机主机发送数据协议,要求主机把接收的温度发送给PC机显示;

2、单片机主机向一号从机发送“g”:

单片机主机在接收到PC机发送的“d”信号后,会立即向一号从机发送“g”,要求一号从机采集温度并且将温度发回单片机主机;

3、一号从机回发“g”:

一号从机接收到单片机主机的命令后,会立即向单片机主机回发信号,要求单片机主机做好接收准备;

4、向主机发送四位当前采集的温度,并回发发送完成标记“c”;

一号从机回发信号后,向主机发送四位采集的温度,这个温度在前文已提到标记为“c”;

5、主机发送“h”给2号从机:

主机在接收到一号从机发来的“c”命令后,会立刻发送“h”信号给二号从机,表示要采集二号从机的数据;

6、2号从机回发“h”:

二号从机接收到单片机主机的命令后,会立即向单片机主机回发信号,要求单片机主机做好接收准备;

7、向主机发送四位当前采集的温度,并回发发送完成标记“c”: 12

二号从机向单片机主机回发完信号后,向主机发送四位当前采集的温度,这个温度标记为“c”;

8、主机发送“d”给PC机:

单片机主机在接收到二号从机发送来的信号后,立刻发送信号给PC机,表示完成PC机的前一指令;

9、PC发送“a”给主机:

PC机在接收到单片机主机发送的信号后,发送新一个指令给单片机主机,要求单片机主机发送一号从机采集的温度数据;

10、主机将一号从机温度数据发送给PC机:

单片机主机接收到PC机的命令后将一号从机发送过来的四位当前温度数据转换成ASCII码后,发送给PC机,因为PC机只能读取ASCII码;

11、PC机发送“b”给主机:

PC机接收到单片机主机发送的即时温度后会立即发送另一指令给单片机主机,要求单片机主机发送二号从机采集的温度数据;

12、主机将二号从机温度数据发送给PC机,发送完成后,返回(1): 单片机主机接收到PC机的命令后将二号从机发送过来的四位当前温度数据同样也转换成ASCII码后,发送给PC机。此时一个完整过程结束,将返回(1)开始另一轮采集。

3.2 DS18B20温度测量软件的设计

由于DS18B20 单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20(发复位脉冲)→发ROM 功能命令→发存储器操作命令→处理数据。主机控制DS18B20完成温度转换的程序必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。假设单片机系统所用的晶振频率为12MHz,根据DS18B20的初始化时序、写时序和读时序,分 13

别编写3个子程序:INIT为初始化子程序,WRITE 为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s 进行一次,流程图如图3.1所示 。

读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC 校验,校验有错时不进行温度数据的改写,其程序流程图如图3.2所示。

从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9~12 位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。

3.3 多机通信软件的设计

ATMAGE16单片机有串行发送缓冲器/接收缓冲器(SBUF)、串行口控制寄存器(SCON)、特殊功能寄存器(PCON)。通过设置SCON可以有四种工作方式,其中工作方式2、3 适用于多机通信。在串行通信前,通过程序预先将各从机串行口设置为方式2或方式3,并使SM2和REN(允许串行接收控制位)为1,允许串行口中断。主机与从机通信时,将SM2置0,准备接收数据,否则维持SM2为1,这样在主机发送数据时(此时主机发送数据中第9 位为0),只有地址相符的从机可接收数据,

14

哈工大毕业论文张艺

15

图3.1 DS18B20温度主程序流程图 图3.2 读出温度子程序流程图

其余从机对数据信息不予理睬,从而可以实现多机通信集散型控制系统将各控制单元分散到现场各控制点。从机主程序和串行口中断服务程序如图

3.3所示。

PC 机与单片机的串口通信中,ATMAGE16单片机的Pl.3和Pl.4口分别模拟串行通信的发送和接收端,其接口程序主要由发送子程序和接收子

哈工大毕业论文张艺

16

程序组成。通信速率9600bps,帧格式为N.8.l。发送时,先发送一个起始位(低电平),接着 按低位在先的顺序发送8位数据,最后发送停止位。接收时,先判断P1.4接收端口是否有起始低电平出现,如有则按低位在先的顺序接收8位数,最后判断P1.4 口是否有停止高电平出现,如有则完成一个数据接收,否则继续等待。其中软件编写要严格按照异步通信的时序进行。

哈工大毕业论文张艺

图3.3 从机主程序和串行口中断服务程序

3.4 DS18B20工作时序问题

DS18B20的一线工作协议流程是:初始化→ROM操作指令→存储器操作指令→数据传输。其工作时序包括初始化时序、写时序和读时序。

主机即单片机首先发480us---960us的低电平,进行复位,然后释放总 17

线,之后总线被外部上拉电阻电阻抬高,大约等待15—60us之后,DS18B20发出60到240us的低电平信号,以示存在,至此初始化结束。 写“0“的时候,首先单片机发复位信号,然后发“0”于是低电平持续60us就完成了写“0”写“1”的时候首先单片机发复位信号,持续时间大于1us小于15us然后发“1”持续50us以上即可。 读时序也是主机先发低电平,然后在15us内检测连接DS18B20的数据线的引脚,从而读得相应值。

18

4 电路的设计

本章分析了分布式温度采集系统的各主要功能模块的设计与实现,具体包括温度测量电路模块和串口通信电路模块。

4.1 温度测量电路的设计

温度测量采用DS18B20 数字式温度传感器。由DS18B20 构成的智能温度测量装置由三部分组成:DS18B20 温度传感器、ATMAGE16、显示模块。产品的主要技术指标:①测量范围:-55℃~+125℃,②测量精度:0.5℃,③反应时间≤500ms。为了达到更高的精度,则在对DSl8B20测温原理进行详细分析的基础上,采取直接读取DSl8B20内部暂存寄存器的方法,将DSl8B20 的测温分辨率提高到0.01℃~0.1℃,DSl8B20内部暂存寄存器的分布如表4-1所列,其中第7字节存放的是当温度寄存器停止增值时计数器l的计数剩余值,第8字节存放的是每度所对应的计数值。这样,就可以通过下面的方法获得高分辨率的温度测量结果。

表4-1 DS18B20内部暂存器

哈工大毕业论文张艺

19

图4.1 温度测量电路

温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节),传感器可置于离装置150米以内的任何地方,输出脚I/O直接与单片机的P1.1 相连,R1为上拉电阻,传感器采用外部电源供电。ATMAGE16 是整个装置的控制核心,ATMAGE16内带1K字节的FlashROM,用户程序存放在这里。显示器模块由四位一体的共阳数码管和4个9012组成。系统程序分传感器控制程序和显示器程序两部分,传感器控制程序是按照DS18B20的通信协议编制。系统的工作是在程序控制下,完成对传感器的读写和对温度的显示。

4.2 串口通信电路的设计

为了增加单片机多机通信的距离,该部分电路采用RS232标准接口,通信距离可以达到15米;如果采用RS422 或是RS485 接口,通信距离会更远。多机通信接口原理图见图1 。在数据传输过程中采用的是RS232 电平,提高了抗干扰能力。需要在主机串行接口和从机串行接口进行电平转换:TTL-RS232-TTL。这都是用MAX232 接口芯片实现的,具体的电路如图4.2所示。

哈工大毕业论文张艺

20

图4.2 TTL-RS232-TTL电平转换电路

哈工大毕业论文张艺

21

通信电路是本设计的重要组成部分,负责温度数据的采集和数据的上传。包括单片机多机串口通信电路,PC 机与ATMAGE16的串口通信电路。其中主单片机ATMAGE16既要和从机通信,还要负责将数据通过串口发送到PC机上。而ATMAGE16 单片机只有一个串行通信口,这就需要用硬件或是软件扩展一个串行通信口。本设计采用一种用单片机普通I/O口和相应软件实现串行通信的方法。

22

5 分布式温度采集系统设计

数字式传感器一般采用单总线技术(1-WIREBUS),即在单片机或计算机接口中只用一根导线(输入/ 输出信号线),美国Dallas公司最新推出的1-WireBus数字式温度传感器DS18B20,与传统的温度传感器不同,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式,可以分别在93.75ms 和750ms内将温度值转化为9 位和12位的数字量,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃;为实现与PC机串口长距离数据通信,系统采用了RS232 串行接口,通信距离可以达到15m,如果采用RS422或RS485串行接口可以达到1000m。串口通信由PC机与单片机的通信和单片机多机通信组成,每个从机负责温度的测量然后通过多机通信把温度数据发送到主单片机上,最后PC机通过VB程序控制串口把主单片机上的所有温度数据收集起来。系统框图如图5.1所示。

23

图5.1 系统框图

哈工大毕业论文张艺

24

6 ICCAVR制作环境及介绍

本章介绍了ICCAVR的制作环境,ICCAVR 中的文件类型及其文件的扩展名、附注和扩充,并介绍了IAR 或其它ANSI C 编译系统的代码转换。

6.1 ICCAVR 介绍

本节主要介绍了ICCAVR文件的基本特点、类型、扩展名等。

6.1.1 ImageCraft 的ICCAVR 介绍

ImageCraft 的ICCAVR 是一种使用符合ANSI 标准的C 语言来开发微控制器(MCU)程序的一个工具,它有以下几个主要特点:

ICCAVR 是一个综合了编辑器和工程管理器的集成工作环境(IDE),其可在WINDOWS9X/NT 下工作。

源文件全部被组织到工程之中,文件的编辑和工程的构筑也在这个环境中完成。编译错误显示在状态窗口中,并且当你用鼠标单击编译错误时,光标会自动跳转到编辑窗口中引起错误的那一行。这个工程管理器还能直接产生您希望得到的可以直接使用的INTEL HEX 格式文件,INTEL HEX 格式文件可被大多数的编程器所支持,用于下载程序到芯片中去。

ICCAVR 是一个32 位的程序,支持长文件名。

本论文并不介绍通用的C 语言语法知识,仅介绍使用ICC AVR 所必须具备的知识。

6.1.2 ICCAVR 中的文件类型及其扩展名

文件类型是由它们的扩展名决定的,IDE 和编译器可以使用以下几种类型的文件。

输入文件:

.c 扩展名----表示是C 语言源文件

.s 扩展名----表示是汇编语言源文件

25

.h 扩展名----表示是C 语言的头文件

.prj 扩展名----表示是工程文件,这个文件保存由IDE 所创建和修改的一个工程的有

关信息。

.a 扩展名----库文件,它可以由几个库封装在一起。libcavr.a 是一个包含了标准C 的库和AVR 特殊程序调用的基本库。如果库被引用,链接器会将其链接到您的模块或文件中。您也可以创建或修改一个符合你需要的库。

输出文件

.s 对应每个C 语言源文件,由编译器在编译时产生的汇编输出文件。 .o 由汇编文件汇编产生的目标文件,多个目标文件可以链接成一个可执行文件。

.hex INTEL HEX 格式文件,其中包含了程序的机器代码。

.eep INTEL HEX 格式文件,包含了EEPROM 的初始化数据。 .cof COFF 格式输出文件,用于在ATMEL 的AvrStudio 环境下进行程序调试。

.lst 列表文件,在这个文件中列举出了目标代码对应的最终地址。 .mp 内存映象文件 它包含了您程序中有关符号及其所占内存大小的信息

.cmd NoICE 2.xx 调试命令文件。

.noi NoICE 3.xx 调试命令文件。

.dbg ImageCraft 调试命令文件。

6.1.3 附注和扩充

#pragma (编译附注)

这个编译器接受以下附注:

#pragma interrupt_handler <func1>:<vector number> <func2>:<vector> ... 26

这个附注必须在函数之前定义,它说明函数func1、func2 是中断操作函数,所以编译器在中断操作函数中生成中断返回指令reti 来代替普通返回指令ret ,并且保存和恢复函数所使用的全部寄存器;同样编译器根据中断向量号vector number 生成中断向量地址。

#pragma ctask <func1> <func2>...

这个附注指定了函数不生成挥发寄存器来保存和恢复代码,它的典型应用是在RTOS实时操作系统中让RTOS 核直接管理寄存器。

#pragma text:<name>

改变代码段名称,使其与命令行选项相适应。

#pragma data:<data>

改变数据段名称,使其与命令行选项相适应。这个附注在分配全局变量至EEPROM中时必须被使用。

#pragma abs_address:<address>

函数与全局数据不使用浮动定位(重定位),而是从<address>开始分配绝对地址。这在访问中断向量和其它硬件项目时特别有用。 #pragma end_abs_address

结束绝对定位,使目标程序使用正常浮动定位。

C++ 注释

如果你选择了编译扩充(Project->Options->Compiler),你可以在你的源代码中使用C ++的 // 类型的注释。

二进制常数

如果你选择了编译扩充(Project->Options->Compiler),你可以使用0b<1|0>* 来指定二进制常数,例如0b10101 等于十进制数21。

在线汇编

你可以使用asm("string")函数来指定在线汇编代码。

6.1.4 代码转换

27

IAR 或其它ANSI C 编译系统的代码转换

IAR C 编译器作为应用于AVR 的第一个C 编译器,它有十分丰富的源代码。当你从IAR编译系统转换到ImageCraft 编译系统时,绝大多数符合ANSI C标准的程序代码不需要转换,IAR C 中IO 寄存器的定义与ICCAVR 也是相同的。

中断操作描述,ICCAVR 使用pragma 附注描述中断操作函数,而IAR 引入了语法扩充(interrupt 关键字),下面是一个对照:

在 ICCAVR 中:

#pragma interrupt_handler func:4 // 4 是这个中断的向量号,func 为中断处理函数名称,ICCAVR 可以使多个中断向量共用一个中断处理函数。

在 IAR 中:

interrupt [vector_name] func() // vector_name 是某一个中断向量的名称,IAR C 的中断向量地址使用中断名称来代替,以增加程序的可读性。

扩充关键字

IAR 引入flash 关键字将项目分配进入程序存贮空间(FLASH 存贮器),ICCAVR 使用const 关键字来达到相同的目的。

过程调用转换

在两个编译系统之间函数参数传递使用的寄存器是不同的,这仅影响手工写的汇编函数。

在线汇编、宏等,IAR 不支持在线汇编符号,而ICCAVR 支持在线汇编。

6.2 ICCAVR 向导

自你启动 IDE 后,首先从Project 菜单系统选择Open 命令,进入\icc\examples.avr 目录并且选择并打开“led”工程,工程管理器显示在这个工程中只有一个文件led.c。 然后从Project 菜单中选择Options 命令打开工 28

程编译选项,在"Target"标号下选择目标处理器。然后从Project 菜单中选择Make Project 命令,IDE 将调用编译器编译这个工程文件,并且在状态窗口中显示所有的信息。

6.3 ICCAVR 的IDE 环境

6.3.1 编译一个单独的文件

正常建立一个输出文件的次序是,你首先应该建立一个工程文件并且定义属于这个工程的所有文件。然而,我们有时也需要将一个文件单独地编译为目标文件或最终的输出文件。这时可以这样操作:从IDE 菜单“File” 中选择“Compile File...”命令,来执行“to Object”和“to Output”中的任意一个。当你调用这个命令时,文件应该是打开的并且在编辑窗口中可以编辑的。

编译一个文件为目标文件(to Object),对检查语法错误和编译一个新的启动文件是很有用的。编译一个文件为输出文件(to Output),对较小的并且是一个文件的程序较为有用。

6.3.2 创建一个新的工程

为创建一个新的工程,从菜单“Project”中选择“New”命令,IDE 会弹出一个对话框,在对话框中你可以指定工程的名称,这也是你的输出文件的名称。如果你使用一些已经建立的源文件,你可在菜单“Project”中选择“AddFile(s) ”命令。

另外,你可以在菜单“File”中选择“New”命令来建立一个新的源文件来输入你的代码,你可以在菜单“File”中选择“Save”或“Save As”命令来保存文件。然后你可以象上面所述调用“AddFile(s)”命令将文件加入到工程中,也可在当前编辑窗口中单击鼠标右键选择“Add to Project”将文件加入已打开的工程列表中。通常你输出源文件在工程同一个目录中,但也可不作这样要求。

工程的编译选项使用菜单中 “Project”中的“Options”命令。

29

6.3.3 工程管理

工程管理允许你将多个文件组织进同一个工程,而且定义它们的编译选项,这个特性允许你将工程分解成许多小的模块。当你处理工程构筑时,只有一个文件被修改和重新编译,如果一个头文件作了修改,当你编译包含这个头文件的源文件时,IDE 会自动重新编译已经改变的头文件。

一个源文件可以写成 C 或汇编格式的任意一种。C 文件必须使用“.c”扩展名汇编文件必须使用“.s”扩展名。你可以将任意文件放在工程列表中,例如你可以将一个工程文档文件放在工程管理窗口中,工程管理器在构筑工程时对源文件以外的文件不予理睬。

对目标器件不同的工程,可以在编译选项中设置有关参数。当你新建一个工程时,使用默认的编译选项,你可以将现有编译选项设置成默认选项,也可将默认编译选项装入现有工程中。默认编译选项保存在default.prj 文件中。

为避免你的工程目录混乱,你可以指定输出文件和中间文件到一个指定的目录,通常这个目录是你的工程目录的一个子目录。

6.3.4 编辑窗口

编辑窗口是你与 IDE 交流信息的主要区域,在这个窗口中你可以修改相应的文件。当编译存在错误时,用鼠标单击有关错误信息时,编辑器会自动将光标定位在错误行的位置。

6.3.5 应用构筑向导

应用构筑向导是用于创建外围设备初始化代码的一个图形界面。你可以单击工具条中的“Wizard”按钮或菜单“Tools”中的“ApplicationBuilder”命令来调用它。

应用构筑向导使用编译选项中指定的目标MCU来产生相应的选项和代码。

应用构筑向导显示目标 MCU 的每一个外围设备子系统,它的使用是很显而易见的。在这里你可以设置MCU 的所具有的中断、内存、定时器、 30

IO 端口、UART 、SPI 和模拟量比较器等外围设备,并产生相应的代码,如果你需要的话,还可产生main( )函数。

6.3.6 终端仿真

IDE 有一个内置的终端仿真器,注意它不包含任意一个ISP(在系统编程)功能,但它可以作为一个简单的终端,或许可以显示你的目标装置的调试信息,也可下载一个ASC码文件。从 6.20 版本开始IDE 加入了对ISP 的支持。

31

结 论

ATMAGE16单片机体积小、重量轻、抗干扰能力强、对环境要求不高、价格低廉、可靠性高、灵活性好。即使是非电子计算机专业人员,通过学习一些专业基础知识以后也能依靠自己的技术力量来开发所希望的单片机应用系统。在传统的温度测量系统中,往往采用模拟的温度传感器进行设计,必须经过A/D转换后才可以被微处理器识别和处理。这样的设计方法不仅对前端模拟信号处理电路提出了更高的要求,而且不具有数字通信和网络功能。本设计文结合DSl8B20的新特性和现代温度测量系统提出的新要求,提出了基于智能数字温度传感器DSl8820的高精度、分布式多点温度测量系统设计方案。该方案具有安装方便、数字化程度高、精度高、适应性强等特点,在多种温度检测中具有广阔的应用前景。经过模块化的电路测试、软件调试和系统组装,测温精度可以达到±0.01℃。设计出的多路远距离自动化、智能化温度采集系统可以广泛应用于工业控制领域。本次设计只给出2路从机采集,根据需要可以增加更多从机进行温度采集。 32

参 考 文 献

1 何立民.单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社.1999

2 李广弟.单片机基础.北京:北京航空航天大学出版社.1999

3 刘守义.单片及应用技术.西安:西安电子科技大学出版社.2002 4 潘新民.微型计算机与传感技术.北京:人民邮电出版社.1988

5 辛友顺等.单片机应用系统设计与实现.福州:福建科学技术出版社.2005 6 陈嘉庆.工业控制计算机应用100例.北京:微计算机信息编辑部.2002 7 王幸之.AT89系列单片机原理与接口技术.北京:北京航空航天大学出版社.2004

8 张 军.AVR单片机应用系统开发典型实例.第一版.中国电力出版社 9 谭浩强.C语言程序设计(第二版).北京清华大学出版社.2005

10马忠梅.单片机的C语言应用程序设计(第三版).北京:北京航空航天大学出版社.2003

11夏路易.电路原理图与电路板设计教程PROTEL99SE.北京:北京希望电子出版社

33

致 谢

在我的论文收笔之际,首先,我要衷心感谢哈尔滨工业大学成教学院老师对我的指导和教育。在毕业设计期间,老师给予了我很大的帮助、鼓励和支持,十分关心我的设计进度,对毕业设计提出大量宝贵的意见和建议,在老师的悉心指导和大力支持下,我的毕业课程设计得以顺利完成。

最后,再次向哈尔滨工业大学成教学院的老师们表示我最诚挚的谢意。

34

附件1:总系统的原理图如下: 35

36

附件2:单片机ATMAGE16控制DS18B20的程序: #include <iom16v.h>

#include <macros.h>

#define uchar unsigned char

#define uint unsigned int

uchar Temp=0x00,Flag=0,Point=0;

const uchar DISCODE[10] =

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9 const uchar order[4]={0x07,0x0b,0x0d,0x0e};

const uchar fuhao1[8]={0X81,0XF7,0XF7,0X87,0XF5,0XF5,0XF5,0X00};//正字

const uchar fuhao0[8]={0xf7,0xc7,0xeb,0x81,0xb5,0xb5,0xeb,0x9C};//负字 #pragma interrupt_handler Timer0:10

void Timer0(void)//每32ms扫描一次数码管

{

uchar j;

for(j=0;j<8;j++)

{

PORTB=1<<j;

if(Flag)PORTD=fuhao1[j];

else PORTD=fuhao0[j];

DelayMS(1);

PORTB=0x00;

PORTD=0xff;

}

TCNT0=0x00;//重新开始

}

37

void Dis_Init(void) {

uchar i;

DDRC=0xff;

DDRA=0xff;

DDRD=0xff;

PORTC=0xf0;

for(i=0;i<10;i++) {

PORTA=DISCODE[9-i]; DelayMS(100); }

TIMSK=0x01;

TCNT0=0x00;

SREG=0x80;

TCCR0=0x04;//512分频 }

void Dis_Data(uchar disdata) {

char disbuf[4],i,j; SREG=0x00;

disbuf[0] = disdata /100; disbuf[1] = (disdata/10)%10; disbuf[2] = disdata%10; disbuf[3] = Point;

38

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

{

PORTC = order[i];

PORTA = DISCODE[disbuf[i]]; if(i==2) PORTA|=0x80;//显示小数点 DelayMS(2);

PORTA=0x00;

DelayMS(1);

}

SREG=0x80;

}

void gettemp(void)

{

char temph=0,templ=0,TempL=0; while(Check18B20());//验证初始化成功 Write18B20(0xcc);

Write18B20(0x44); //启动转换 //DelayMS(500); //750MS while(Check18B20());//成功

Write18B20(0xcc);

Write18B20(0xbe); //读取温度值 templ = Read18B20();

temph = Read18B20();

while(Check18B20());

Temp=(templ>>4)|(temph<<4); 39

TempL=templ&0x0c;//小数位

Point=(TempL>>3)*5+((TempL>>2)&0x01)*2; Flag=!(Temp&0x80);

}

void main(void)

{

Dis_Init();

while(1)

{

gettemp();

Dis_Data(Temp);

}

}

40

相关推荐