AtmelStudio60简易入门教程(精炼实用)_第1页
AtmelStudio60简易入门教程(精炼实用)_第2页
AtmelStudio60简易入门教程(精炼实用)_第3页
AtmelStudio60简易入门教程(精炼实用)_第4页
AtmelStudio60简易入门教程(精炼实用)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AtmelStudio60简易入门教程(精炼实用) 一、建议工程文件AtmelStudi6.0这个全新的环境使用起来极其不顺手,因为首先我对AtmelStudio以前的版本也根本没有使用经验,就根据很陌生,其次,这个新版本软件还根本没有人用,根本没有任何的相关教程资料,唯一可以参考的只是官网的比较简单的视频教程,还是英文讲解,反正没怎么搞透。 不过还是硬着头皮用下去,因为软件是的,而且当后来我知道代码环境其实就是微软VS环境的时候,我就更不犹豫了,大家应该都了解VS的代码编写环境是很智能的,尤其自动补全功能。 现在,我已经能很熟练的使用AtmelStudio6.0软件了,随着使用我也更加喜欢玩AVR单片机做一些小作品了,而不再用普通51和STC了。 当使用熟练以后也就感觉到其实这个智能的编译环境其实是很简单的,那现在我就帮助更多喜欢使用AVR而没用使用AtmelStudio软件的同学们轻松越过这一个门槛,进入一个美好的编程世界。 该软件的不足之处一是软件相对较大,打开比较慢,但是运行还是比较顺利的;二是不支持山寨仿真器,这可苦了没钱的劳苦电工们了。 (不过我都是用ISP烧录调试,一般不用仿真)最下面附件有一个简单的LED_test工程文件,编译通过的。 大家可以试用。 下面开始介绍的软件工程的建立。 1.软件总界面总体界面还是比较简洁的,和其他编译软件都是差不多的,而且和KEIL软件的界面是很相似的,使用很方便。 2.新建工程新建工程很简单FILE-NEW-Project然后就看到下面的新建工程界面了,选择第一个GCC CExecutable工程就可以,第二个GCC Cstatic Library是用来新建.h文件的。 然后下面蓝圈1是C文件的名称,蓝圈2Solution Name是工程的文件,中间的Location是文件存放位置,自己选择合适的位置即可。 点击下面的OK3.下面接着是单片机型号选择界面,选择合适的单片机就可以了。 4.下面就看到真正的代码界面了,软件会智能的添加工程文件说明信息,并提供简单的main函数代码,比较好。 在代码区编写你的实现代码即可。 5.大家可能看到上面中文注释部分由让人不喜欢的下划波浪线,下面告诉你怎么除掉它。 VAssistXVisual AssistX options然后underlines选择min即可,如下图6.对于软件环境的工具栏常用按键下面简单说一下,如下图。 (1)圈1就是编译按钮和KEIL的按键是一样的 (2)圈2是单片机型号选择,这个不同平台之间移植要首先修改单片机型号,不然会出错,这个也是本软件的一个优点,这样就AVR所有的单片机系列之间可以轻松的移植,如果遇到寄存器变化,编译的时候就会出错,提示你修改 (3)圈3就是注释和缩进快捷按钮也是编写代码比较常用的7.下面介绍一些使用atmelstudio6.0需要注意的一下事项。 这些事项很重要,不然会导致你无法编译成功,这些事项其实是从网上一篇文章从ICC AVR到Atmel Studio6中摘录的,一直不知道这位大侠是谁,在这里先向这位无私的大侠致敬,如果该大侠看到该我的文章,如果有不同意还请告诉我。 注意事项如下1)MCU必须的头文件Atmel Studio6(以下简称AS6)中统一用#include。 这点很重要,AS6把atmel所有的单片机头文件全都集成在一起了,以后不必再去分具体的每种芯片的头文件了2)汇编嵌入在AS6中,你可以直接使用asm(xxx)格式.或者用小写的sei();这个其实是很爽的,最常用的就是中断控制,使用比较方便。 3)延时函数在AS6中,只需要加载一个头文件#include,就可以使用两个标准的延时函数,分别是_delay_ms(double_ms)和_delay_us(double_us),虽然参数为double型,但可赋整型值。 注意在调用前定义#define F_CPU8000000UL,如下图,这样延时10ms的函数写为_delay_ms (10),经过试用,只要晶振填写准确,这两个延时函数很准确。 4)中断函数在AS6中,需加载头文件#include,并且函数名为ISR,不可自定义函数名,格式如下ISR(TIMER0_OVF_vect)?TIMER0_OVF_vect含义同iv_TIMER0_OVF,是T0溢出中断号。 不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。 5)EEPROM操作函数在ICC中加载头文件#include后,可以使用如下两个读写函数EEPROM_read(addr,var);/读EEPROM中的一个字节EEPROM_write(addr,var);/向EEPROM中写入一个字节6)定义数据在flash区主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出。 在AS6中,需加载头文件#include,然后用PROGMEM。 举例说明PROGMEM constunsigned charflash10;在flash区声明一个unsiged char型的数组,成员个数10。 unsigned chara;a=pgm_read_byte(flash0);把flash0值赋给变量a。 而a=flash0是不会从flash区读数据的,而是读data区的数据。 二维数组:PROGMEM constunsigned charflash310=?;指针数组:PROGMEM constunsigned char*const flash3=?; 二、工程文件的优化设置点击工程项目,properties进行设置定位代码地址,bootloader是必须的,其它程序也可能需要在“属性”里设置晶振频率(这也是预设计的#define.)设置头文件路径设置需要生成的文件(设置生成文件hex)设置优化率添加自定义库更换为WinaAvr编译条件的设置设置芯片设置仿真器(我没有使用仿真器,设置为Simulator) 三、从ICC_AVR_到_Atmel_Studio_6以前一直在用ICCAVR感觉生成文档方便,现在发现了Atmel Studio6,因为偶尔会用C#(VSxx)所以一下子就喜欢上了这个编译器,我只用8bit的AVR另外也是刚刚接触,所以在移植过程中会遇到各种问题,以下是自己的一些问题写出来共大家参考;1.MCU必须的头文件例如在ICC AVR(以下简称ICC)中使用#include或#include,要根据不同的mcu型号选择头文件。 而在Atmel Studio6(以下简称AS6)中统一用#include。 (ICC AVR7的版本中也可以用统一的头文件了)2.头文件在ICC中,头文件包含#include。 在AVRdef.h中,宏定义了一些常用的汇编指令和一些不常用的函数。 例如(详细内容请参考ICC安装程序中AVRdef.h)#define WDR()asm(wdr)#define SEI()asm(sei)#define CLI()asm(cli)3.#define NOP()asm(nop)#define SLEEP()asm(sleep);#define_WDR()asm(wdr)#define_SEI()asm(sei)#define_CLI()asm(cli)#define_NOP()asm(nop)#define_SLEEP()asm(sleep);#define BIT(x)(1(x);在AS6中,你可以直接使用asm(xxx)格式.或者用小写的sei();(当然要包含相应的头文件);Ps:如果移植ICC的代码比较麻烦,可以将这些宏命令添加到一个总的头文件(include.h)中,所有c文件都引用include.h,那么在移植过程中,将不需要修改代码。 延时函数在ICC中,delay延时函数,需要自己写,往往不准。 而在AS中,只需要加载一个头文件#include,就可以使用两个标准的延时函数,分别是_delay_ms(double_ms)和_delay_us(double_us),虽然参数为double型,但可赋整型值。 注意在调用前定义#define F_CPU16000000UL(我也不知道为什么要加UL),这样延时10ms的函数写为_delay_ms (10)。 4.中断函数例如T0溢出中断,在ICC中如下定义#pragma interrupt_handler timer0_ovf_isr:iv_TIMER0_OVF voidtimer0_ovf_isr(void)?timer0_ovf_isr这个函数名是自定义的。 而在A6中,需加载头文件#include,并且函数名为ISR,不可自定义函数名,格式如下ISR(TIMER0_OVF_vect)?TIMER0_OVF_vect含义同iv_TIMER0_OVF,是T0溢出中断号。 不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。 5.EEPROM操作函数在ICC中加载头文件#include后,可以使用如下两个读写函数EEPROM_read(addr,var);/读EEPROM中的一个字节EEPROM_write(addr,var);/向EEPROM中写入一个字节在AS6中,加载头文件#include后,可以使用如下两个读写函数_EEGET(var,addr);/读EEPROM中的一个字节_EEPUT(addr,var);/向EEPROM中写入一个字节Ps:为了移植时不修改代码,我的做法是在总的头文件(include.h)中添加以下宏定义#define EEPROM_read(addr,var)_EEGET(var,addr)#define EEPROM_write(addr,var)_EEPUT(addr,var)6.定义数据在flash区主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出.在ICC中,用const关键字定义变量,并在ICC软件设置项中,勾选treatconstas_flash即可。 在AS6中,需加载头文件#include,然后用PROGMEM举例说明PROGMEM constunsigned charflash

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论