AVR单片机菜鸟进阶
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 AVR开发利器——菜鸟的装备

古人云,工欲善其事,必先利其器。因此,在开始学习AVR之前,先来了解一下AVR开发利器,也就是AVR的软件开发工具。本章将为读者介绍3款软件,其中2款是编程设计软件,1款是软件仿真工具。介绍这3款软件目的是让读者熟悉AVR的软件开发工具,以及一些常运用的工具或软件。

2.1 ICCAVR——AVR软件开发工具一

ICCAVR,对于已经接触过AVR单片机的工程师来说决不陌生。ICCAVR也是笔者第一个接触到的AVR编程软件。

2.1.1 ICCAVR的简介

ICCAVR是用一种符合ANSI标准的C语言开发MCU(单片机)程序的一个工具,其功能合适、使用方便、技术支持好。它主要有以下几个特点。

(1)它是一个综合了编辑器和工程管理器的集成工作环境(IDE)。

(2)其源文件全部被组织到工程之中,文件的编辑和工程的构筑也在这个环境中完成;错误显示在状态窗口中,并且当单击编译错误时,光标会自动跳转到错误的那一行。

(3)该工程管理器还能直接产生INTEL HEX格式的烧写文件(该格式的文件可被大多数编程器所支持,可以直接下载到芯片中使用)和符合AVR Studio(AVR Studio是AVR的另一款编程软件,将在2.2节介绍)的调试文件(COFF格式)。

(4)它是一个32位的程序,支持长文件名。

(5)它可在Win 95、Win 98、Win ME、Win NT、Win 2000、Win XP和Win 7环境下运行。

在互联网上下载到的很多样例工程都是基于ICCAVR软件开发的,因此读者有必要对其进行了解。

2.1.2 ICCAVR的安装

ICCAVR的安装比较简单,没有什么需要特殊设置的地方。对于ICCAVR的安装包,读者可以从ICCAVR的官网https://www.imagecraft.com/下载,其最新的版本为ICCV8 FOR AVR。本节介绍的版本是6.3 1 A。

打开软件所在的文件夹,双击iccavr6.3 1 A.exe应用程序,运行后,会出现如图2.1所示的ICCAVR安装界面。

图2.1 ICCAVR安装界面

根据提示一直单击“Next”即可完成安装。安装完成后单击开始菜单,会出现这样的一个图标,由此说明该软件安装成功。打开软件,如果发现软件上方出现图2.2中所示字样“WARNING:45 Days EVALUATION version”,说明你使用的是有限制的试用版,其试用期为45天。单击工具栏的“Help”菜单,再单击“Register Software”(如图2.3所示),会弹出如图2.4所示的“License ICCAVR”提示框。

图2.2 ICCAVR软件工具栏(软件未注册)

图2.3 Help菜单

图2.4 “License ICCAVR”提示框

将图2.4中框选的硬件地址码复制后直接发邮件到license@imagecraft.com便可获得解锁码(Unlock Code)。注册完成后的软件界面如图2.5所示。

图2.5 ICCAVR软件工具栏(软件已注册)

到此,ICCAVR算是真正安装成功了。

2.1.3 ICCAVR工程的建立

接下来试着在ICCAVR中建立一个新工程。打开软件,单击“Project”菜单下的“New”,会弹出如图2.6所示的提示框,将其命名为first_project,单击“保存”即可。此时的工程是无任何文件的,在新建文件之前,让我们先来设置工程选项。单击“Project”菜单下的“Options”或工具栏上的图标就可以进行工程选项的设置了,如图2.7所示。

图2.6 新建工程提示框

图2.7 工程选项的设置1

在“Target”标签下,“Device Configuration”的下拉菜单用于选择所要开发的芯片型号,这里选择的是ATmega88。在这里还有一个选项值得注意,就是“String in Flash only”,其意思是字符串只存储在Flash里,在后续的开发中会遇到这样的情况,到时再详细介绍。

如图2.8所示,在“Paths”标签下可以进行库文件的路径及输出路径等的设置。当把工程复制到其他计算机上时,可能会出现路径错误的提示,这是因为该计算机中的ICCAVR安装目录与之前的计算机中的ICCAVR安装目录不一致,只需要单击图2.8中各选项后面的“Add”或“Browse”按钮,查找到本机的安装目录,选择该目录后单击“确定”即可。还有另一种方法是直接复制安装路径,然后粘贴到对话框中。假设ICCAVR的安装路径是D:\icc,在图2.8中的“Include Path(s)”和“Library Path”两项中分别添加安装路径下对应文件夹,添加后内容分别为“c:\icc\include\;d:\icc\include\”和“c:\icc\lib\;d:\icc\lib\”。另外2个标签可以不用设置,选择默认设置即可。

图2.8 工程选项的设置2

单击“Files”菜单下的“New”,分别新建2个文件,命名并保存为main.c和main.h。

在main.h中添加如下内容:

            #ifndef_MAIN__H_
            #define _MAIN__H_
            #include  <iom88v.h>
            #include  <macros.h>
            //-------------------------------TYPEDEF-----------
            //使用typedef重定义类型,更方便代码移植
            typedef  unsigned char    uchar;
            typedef  unsigned int     uint;
            typedef  unsigned long    ulong;
            typedef  signed char      schar;
            typedef  signed int       sint;
            typedef  signed long      slong;
            #endif

说明:

(1)如果是软件自带的H文件,可以使用<>将其包含;如果是自定义的H文件,则可以使用""将其包含;

(2)使用typedef重定义类型更方便代码移植,而且可以减少输入量。

在main.c中添加如下内容:

            /**********************************************
            project:first project
            IDE:ICC AVR
            device:atmega88
            author:lg
            date:2012-07-05 21:10
            goal:在ICCAVR平台上新建一个工程
            ***********************************************/
            #include "main.h"
            //----------------------MAIN-----------------------
            void main(void)
            {
            DDRD| =0X0F;   //设置PD口的0~3口方向为输出
            PORTD=0X0F;     //设置PD口的0~3口电平为高
            //-----------循环-----------
                while(1);
            }

图2.9 工程文件界面

在这里简单设置了几个I/O为高电平输出。注意,新建一个工程时,最好在文件开头做上记录并在代码后增加注释,以便于以后代码的修改和移植。

新建操作完成后,在ICCAVR软件界面的右边可以看到新建工程时给工程命名的名字,然后选中“Files”菜单,用鼠标右键单击“Add File(s)”添加C文件到该目录下,再选中“Headers”将H文件添加进去,如图2.9所示。

之后,单击“Make Project”或编译工程(工程文件界面下方的编译输出窗口如图2.10所示)。编译成功后,在工程目录下便生成了可烧录的HEX文件。

图2.10 编译输出窗口

2.2 AVR Studio——AVR软件开发工具二

下面一起来了解一下AVR编程开发的另一款工具——AVR Studio,该软件也是笔者至今都在使用的一款。

2.2.1 AVR Studio的简介及AVR Studio 4的安装

AVR Studio是ATMEL公司开发的AVR单片机的集成环境汇编级开发调试软件,完全免费。ATMEL AVR Studio集成开发环境(IDE)包括AVR Assembler编译器、AVR Studio调试功能、AVR Prog串行、并行下载功能和JTAG ICE仿真等功能。它集汇编语言编译、软件仿真、芯片程序下载、芯片硬件仿真等一系列基础功能于一体,与任一款高级语言编译器配合使用即可完成高级语言的产品开发调试。

对于使用汇编的工程师来说,AVR Studio是直接可以运用开发的;而对于使用C语言开发的朋友来说,就需要多安装一个插件了,那就是WinAVR。WinAVR也是一个开源免费的工具,其特点是优化效率高,有利于平台移植。

AVR Studio及WinAVR的安装包都是可以直接从其官网上下载的。这里推荐给读者一个运用比较广的版本,即AVR Studio 4及WinAVR-20070525。对于两者的安装,这里简单介绍如下。

双击AvrStudio4Setup.exe,会出现如图2.1 1所示的界面,如果你对软件安装在你的系统盘无异议,就可以一直单击“Next”按钮,直至最后单击“Finish”按钮结束整个AVR Stu-dio 4的安装。

图2.1 1 AVR Studio的软件安装开始界面

接下来安装WinAVR。双击WinAVR-20070525.exe,会出现如图2.12所示的界面,一直单击“下一步”按钮即可完成安装。

它们的安装都是比较简单的,没有什么需要进行特殊设置的。

图2.12 WinAVR的安装向导界面

2.2.2 AVR Studio 4的第一个工程

虽然AVR Studio建立工程的过程与ICCAVR类似,但是也存在软件上的差异,而且两者使用的编译器也是不一样的。下面开始建立AVR Studio的第一个工程。

双击运行AVR Studio 4,界面如图2.13所示(有一个欢迎界面提示,也可取消掉)。再单击“New Project”按钮新建一个AVR Studio工程,然后会跳出另一个提示框,如图2.14所示。

图2.13 AVR Studio 4的启动界面

图2.14 新建工程界面

在图2.14中先选择编译工具:使用汇编编程的可以选择Atmel AVR Assembler;使用C语言编程的可以选择AVR GCC。而这个AVR GCC就是前面安装的WinAVR。如果没有安装WinAVR,是不会有AVR GCC这一项的。这里选择的是AVR GCC,此时界面的右边部分由不可操作变为可操作,然后输入工程名first_prj及初始化文件名main。界面下方是工程的路径。此处要注意的是,工程的路径一定要是全英文的,不然工程无法编译成功。

单击“Next”按钮,进入仿真器和器件类型的选择界面(如图2.15所示),这里选择的是JTAGICE mkII和ATmega88。单击“Finish”按钮,此时工程已经建立起来,可以开始添加文件了。

图2.15 仿真器与器件类型的选择界面

往工程中添加文件与ICCAVR中的操作相似。在main.h中添加如下内容:

            /*******************************************************
                main.h包含一些库文件,以及用户的自定义文件、宏定义等
                只需在.c文件包含该文件就可以了
            ******************************************************/
            #ifndef_MAIN_H_
            #define _MAIN_H_
            #include <avr/io.h>
            #include <stdio.h>
            #include <string.h>
            #include <avr/interrupt.h>
            //-------------------------------TYPEDEF-----------
            //使用typedef重定义类型,更方便代码移植
            typedef unsigned charuchar;
            typedef unsigned int uint;
            typedef    unsigned long ulong;
            typedef signed char      schar;
            typedef signed int       sint;
            typedef   signed long      slong;
            #endif

此处与ICCAVR不一样的地方为:不管你选择的是什么型号的器件,只要添加#include<avr/io.h>即可将其包含在里面。

在main.c中添加如下内容:

            /**********************************************
            project:first project
            IDE:AVR Studio 4+Winavr20070525
            device:atmega88
            author:lg
            date:2012-07-05 21:10
            goal:在AVR Studio4平台上新建一个工程
            ***********************************************/
            #include "main.h"
            //----------------------MAIN-----------------------
            int main(void)
            {
              DDRD| =0X0F;  //设置PD口的0~3口方向为输出
              PORTD=0X0F;    //设置PD口的0~3口电平为高
              //-----------循环-----------
                    while(1);
            }

此处与ICC AVR不同的地方为:main函数的返回类型一定要是int类型的,不然编译后会出现警告信息。对于工程,最好做到无警告,以防编译漏掉一些细节的东西,导致出现不可意料的结果。按下F7或单击“Build”按钮,弹出的编译输出窗口如图2.16所示。从编译输出窗口可以得到一些相关信息,如所选择的器件型号,flash和sram的使用情况等。

图2.16 编译输出窗口

2.2.3 ICCAVR过渡到AVR Studio——不同平台的移植

对于一些编程开发来说,一种产品在不同软件平台上运行是十分常见的事。但是不同平台下的程序一般是不能直接移植到另一个平台使用的,需要将该平台特有的东西转换为另一个平台的东西。

下面针对前面介绍过的2个软件,说明从ICCAVR过渡到AVR Studio需要注意的几个地方。

1.头文件的更改

在ICCAVR中使用不同的AVR,其工程的头文件是不同的。如果使用ATmega88V,则添加的头文件是iom88v.h;当更换成ATmega168V时,其头文件应该替换为iom168v.h。而在AVR Studio中,avr/io.h包含了不同MCU的头文件。因此,从ICCAVR过渡到AVR Stu-dio时,只需将“#include <iom88v.h>”更改为“#include <avr/io.h>”即可。

2.中断函数不同

中断函数有两个地方不同:一个是中断服务程序的写法不同;另一个是中断向量号不同。先来看一下ICCAVR的中断服务程序和中断向量表。

ICCAVR的中断服务程序的模板如下:

            #pragma interrupt_handler user_fuc:Interrupt vector number

如表2.1所示为ATmgea88V在ICCAVR软件中的中断向量表。

表2.1 ATmgea88V在ICCAVR软件中的中断向量表

举个例子,如果要在ICCAVR软件中编写定时器2的比较中断服务程序,则内容如下:

            #pragma interrupt_handler Time2:iv_TIMER2_COMP  //iv_TIMER2_COMP为向量号
            void Time2(void)                                  //定时器2的比较中断服务程序
            {
            ;/                                                /添加自己的程序
            }

对于AVR Studio,先来看一下中断服务程序和中断向量表,再对平台进行比较。

AVR Studio的中断服务程序的模板如下:

            ISR(Interrupt vector number) //Interrupt vector number为中断向量号
            {
                                  //添加自己的程序
            }

如表2.2所示为ATmgea88V在AVR Studio软件中的中断向量表。

表2.2 ATmgea88V在AVR Studio软件中的中断向量表

从中断服务程序模板和中断向量表可以看出ICCAVR和AVR Studio在编写中断函数时的不同之处,因此在进行平台的移植时,需要对对应的地方进行修改,并且在AVR Studio软件中需要添加“#include <avr/interrupt.h>”头文件,才能使用AVR的中断。

3.一些宏定义

表2.3列举了ICCAVR与AVR Studio中几个比较常用的宏定义的比较。

表2.3 两软件中常用宏定义的比较

在这里,可以在原来的宏定义的基础上再使用一次宏定义,以减少程序的改动量。

2.3 Proteus——软件仿真工具

本节介绍一个软件仿真工具——Proteus,该软件比较受软件工程师的青睐。虽然该软件模拟的硬件环境与实际环境存在差异,但是基本上在该软件中调试通过的程序运用到实际的硬件环境后的改动不是很大。

2.3.1 Proteus的简介

Proteus是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其他EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。Proteus从原理图布图、代码调试到单片机与外围电路协同仿真、一键切换到PCB设计,真正实现了从概念到产品的完整设计。它是目前世界上将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台软件之一,其处理器模型支持805 1、HC1 1、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加了其他系列的处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

这款软件主要用来进行软件仿真。在实际开发过程中,都是硬件和软件同时进行的,但如果硬件调试板还未完成,则可以使用这个软件进行仿真。你需要多少个电流表、电压表、示波器,它都可以满足你。

2.3.2 Proteus的安装

双击Proteus 75SP3 Setup.exe进行安装,当弹出如图2.17所示的界面后,选择“Use a locally installed Licence Key”(使用本地许可证)这一项,然后单击“Next”按钮,会提示有没有可使用的许可证存在,若没有,则单击“Next”按钮浏览本地许可证,然后单击提示框中的“Install”即可,如图2.18所示。接下来继续单击“Next”按钮,此时真正开始安装软件,最后单击“Finish”按钮即可完成整个安装过程。

图2.17 Proteus的安装向导

图2.18 Proteus的注册界面

安装完成后查看其生成的快捷方式,可知其中的ARES 7 Professional是用来设计PCB的,ISIS 7 Professional是用来进行原理图设计及软件仿真的。两者运行后的界面分别如图2.19和图2.20所示。

图2.19 ARES 7 Professional的运行界面

图2.20 ISIS 7 Professional的运行界面

2.3.3 Proteus的使用

对于Proteus的使用,这里只介绍运用ISIS 7 Professional工具来进行器件的添加及搭建一个简单的仿真电路。

运行ISIS 7 Professional,单击“库(L)”菜单,选择“拾取元器件/符号(P)”,会弹出如图2.21所示的界面。可以通过从图2.21左侧的类别、子类别及制作商中选择或直接输入关键字来查找我们所需要的器件,这里选中的是ATMEGA88_32PIN。图2.21右侧给出了其原理图及PCB的预览图。单击图2.21右下角的“确定”按钮,器件就添加好了,然后可以从图2.21左侧看到该器件。

现在来搭建一个简单的电路。首先根据上述方式添加MCU、晶振、LED、电阻和电压表。然后单击“元件模式”,放置元件,如图2.22所示。接着先对电源进行设置:单击“设计(D)”菜单中的“设定电源范围”,选择“VCC/VDD”项,其默认的电压值为5,这里修改为我们需要的3.3(对于芯片来说,5V电压也是可以的,电源范围可以根据实际需要来调整)。接下来需要修改的就是晶振的频率,这里将其设置为7.3728 MHz(其默认值为1 MHz)。最后需要修改ATMEGA88_32PIN的属性,这是最难设置的一个地方,需要根据程序的具体要求来设置。

单击MCU的属性,弹出如图2.23所示的界面。首先设置“Program File”,通过浏览找到2.1.3节中建立的那个工程的HEX文件,选中它后单击“确定”按钮即可。然后设置熔丝位,由于这里使用的是外部晶振7.3728MHz,所以熔丝位的设置也如图2.23中所示。至此,所有设置完成。

图2.21 选择型号界面

图2.22 电路示例1

2.1.3节的工程是实现将I/O方向设置为输出并且将电平设置为高电平,搭建的电路中接了4个LED来说明是否达到效果,如图2.24所示。从图中可以看到,PD的3个引脚所接的电压表都显示为3.29V。

Proteus还提供了很多虚拟仪器,如I2 C调试器、SPI调试器,它们都是单片机工程师经常会使用到的。因此,掌握Proteus的使用对开发很有好处。总的来说,如果能够多掌握一个工具,对于开发就会多一个解决方法。

图2.23 “编辑元件”界面

图2.24 电路示例2

2.4 小结

本章简单介绍了开发常用工具及AVR的编程开发软件及其运用,这里主要起一个抛砖引玉的作用,以让开始学习单片机的朋友大体了解一下开发时需要的工具、一些相关的设置及需要注意的地方。