AtmelStudio60简易入门教程精炼实用Word格式.docx

上传人:b****5 文档编号:20983020 上传时间:2023-01-26 格式:DOCX 页数:13 大小:139.81KB
下载 相关 举报
AtmelStudio60简易入门教程精炼实用Word格式.docx_第1页
第1页 / 共13页
AtmelStudio60简易入门教程精炼实用Word格式.docx_第2页
第2页 / 共13页
AtmelStudio60简易入门教程精炼实用Word格式.docx_第3页
第3页 / 共13页
AtmelStudio60简易入门教程精炼实用Word格式.docx_第4页
第4页 / 共13页
AtmelStudio60简易入门教程精炼实用Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

AtmelStudio60简易入门教程精炼实用Word格式.docx

《AtmelStudio60简易入门教程精炼实用Word格式.docx》由会员分享,可在线阅读,更多相关《AtmelStudio60简易入门教程精炼实用Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

AtmelStudio60简易入门教程精炼实用Word格式.docx

NEW->

Project然后就看到下而的新建工程界而了,选择第一个GCCCEXeCUtabIeTS就可以,第二个GcCCStatiCLibrary是用來新建.h文件的。

然后下面蓝圈1是C文件的名称,蓝圈2SOIUtiOnName是工程的文件,中间的LOeatiOn是文件存放位置,自己选择合适的位置即可。

点击下面的OK

卜両接着是单片机型号选择界而,选择合适的单片机就可以了。

DeViCeFamily:

megaAVR,8-bit▼

Name

App./BootMemOry(KbyteS)DataMemory(bytes)

EEPR

ATmega6490P

64

4096

2048∙

ATmega649A

2048

ATmega649P

ATmega64A

ATmega64C1

ATmega64HVE2

1024

ATnnega64Ml

ATmega64RFR2

8192

ATmega8

8

512

ATmega8515

ATmega8535

ATmega88

ATmega88A

ATmega88P

ATmega88PA

ATmega8A

512■

ATmega8HVA

ATmega8U2

512U

SearChfordevice

DeViCeInfo:

DeViCeName:

ATfneaa8A

Speed:

Vcc:

Family:

*3DatBSheetS

O

2.7/5.5megaAVR

SUPPOrtedTOOlS

AVRDraqOn

»

AVRISPmkII

rAVRONEj

TjJTAGlCE3

BJTAGlCEmkll

SimUlatOr

夕STK500

fSTK600

4.卜-面就看到真正的代码编辑界面了,软件会智能的添加工程文件说明佶息,并提供简单的main

两数代码,比较好。

在代码编辑区编写你的实现代码即可。

<

⅛(dhV⅛∙VAiPttX心Prς⅛αZDHWgT2∙WZ■Hep

J-⅛)JJ√Λ“、・•:

•住、,MM•9•习二區纟,=灣谭二2>

_■>

•'

.

I乜二:

七Rr86⅛c・」・iM:

∙J∙*∙<

JJ••:

」X•:

CJ二∙-∙atr⅛wbδINOr<

x>

w^9

5.大家可能看到上面中文注释部分由让人不喜欢的下划波浪线,下面告诉你怎么除掉它。

VASSiStX->

ViSUalASSiStXOPtiOnS然后UnderlineS选择min即可,如下图

•ViSUalASSiStXOPtionS

6.对于软件环境的工具栏常用按键下面简单说一下,如下图。

(1)圈1:

就是编译按钮和KElL的按键是一样的

(2)圈2:

是单片机型号选择,这个不同平台之间移植要首先修改单片机型号,不然会出错,这个也是本软件的一个优点,这样就AVR所有的单片机系列之间可以轻松的移植,如果遇到寄存器变化,编译的时候就会出错,提示你修改

(3)圈3:

就是注释和缩进快捷按钮也是编写代码比较常用的

7.下面介绍一些使用atmelstudio6.0需要注意的一下事项。

这些事项很重要,不然会导致你无法

编译成功,这些事项其实是从网上一篇文章《从l∞AVR到AtmelStUdiO6》中摘录的,

一直不知道这位大侠是谁,在这里先向这位无私的大侠致敬,如果该大侠看到该我的文章,如果有不同意还请告诉我。

注意事项整理如下:

1)MCU必须的头文件

AtmelstUdi06(以下简称AS6)屮统•用#includevavr/io.h>。

这点很重要,AS6把atmel所冇的单片机头文件全都集成在一起了,以后不必再去分具体的每种芯片的头文件了

2)汇编嵌入

在AS6中,你可以虚接使用asm(“xxx”)格式.或者用小写的sei();

这个其实是很爽的,最弟用的就是中断控制,使用比较方便。

3)延时函数

在AS6屮,只需要加载一个头文件#include<

util/delay.h>

就对以使用两个标准的延时断数,分别是_delay_ms(double_ms)和_delay_us(double_us),虽然参数为double型,

但可赋整型值。

注意在调用前定义#defineILCPU8000000UL,如卜-图,这样延时IOmS的换数写为_delay_ms(10),经过试川,只耍晶振填写准确,这两个延时两数很准确。

FiIeEdftVieWVA$$i$tXASFProjectBUiIdDebUgToolsWindOWHeIP

一-∙•一丨•-:

:

住二&

吒£

8仏給/川」>

⅛门>

3HeX-J∙7耳M:

IUW∙ATmegaS

4)中断函数

在AS6ψ,霸加载头文##include<

avr/interrupt.h>

并且函数名为ISR,不可自定义函数名,格式如下:

ISR(TIMERO_OVF_vect)

{...}

TIMERO_OVF_vect含义同iv_TIMERO_OVF,是To溢出中断号。

不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iOmXX)Ch中查找。

5)EEPROM操作函数

在IcC中加载头文#-#include<

eeprom.h>

后,可以使用如卜-两个读写隊[数:

EEPRoM_read(addr,var);

〃读EEPROM中的…个字节

EEPROM_write(addr,var);

〃向EEPROM中写入一个字节

6)定义数据在flash区主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少data区的使用,不至于使data区溢出。

在AS61I'

需加载头文件#include<

avr/pgmspace.h>

然后用PRoGMEM。

举例说明:

PROGMEM8∏stUnSignedCharflash(10];

在flash区声明一个UnsigedChar型的数组,成员个数10。

UnSignecIChara;

a=pgm_read_byte(flash[O]);

把flash[0]值赋给变量a。

而a=flash[O]是不会从flashK读数据的,而是读dataIx的数据。

•-维数组:

PRC)GMEMCOnStUnSignedCharflash[3][10]={};

指针数组:

PRoGMEMCOnStUnSignedchar*COnStflash[3]={};

工程文件的优化设置

点击工程项目,PrOPertieS进行设置

定位代码地址,bootloader是必须的,其它程序也可能盂要在“属性”小

BUild

BUiIdKVentS

ToOlCk<

in

D∙v>

c∙

Tool

AdVgCQd

ASF

设置晶振频率(这也是预设计的#define...)

BniId

BUiIdEVentSToolchftin^D∙vic・

ToOlAdVanCed

CCnfigUrfttionIACtXVdIJQbag)VPIAtformACtiVe(AVR)司

CCRfirUɪgeuyan⅜f∙r...

设置头文件路径

BUiId

BUlldZVentS

ToOlChMM

D⅜viCe

Toφ1

AdVanCed

^nfigUratiOnACtiVeODobu&

)VPItttfOrnIACIiVO(AVR)

ð

園AVR/WUCo=Onʌ

AVR/GXUCCoaPlI∙r∙Dιr∙ctorι∙β

3fOutFUtFilee日画AVR/GMICCoepg3fG∙n∙r∙l^PreprocessorJfSyaZ

^fOPtiBiZation22fD∙bufg2∏s

Includ∙PathB(-ɪ)

圍Q逐bQ

Myarmy

∙llan∙out

SAWGMlLink∙r

3fG*n∙r∙l^fLibr*ri∙s^foPtiBization3fM∙s0rySettings^Misc⅛llanGθU8曰^A∖rR∕<

2fUAsseebler3fGeneralVDebuffffinff

设置需要生成的文件(设置生成文件hex)

BuiId

BTXiIdEvents

CCefiCuɪfttiosMamfer..-

ToolchftiM

DQVɪee

TooI

ASP

8圏AVR/GXUCoefiOa

^G⅜n⅜r∙I

曰LiIAVRCCocpxltrHG∙n⅜ral^Pr∙proc∙tBor^SyBboIt^DIrACtoxx«

S"

¾

fOPtiɪiZation3ΓD∙buffin∣3fiamingsXisceIlaneoug

SIaJAW∞rLinkttr3ΓOeneraI3fLibraries^fOPtiSiXatioa3fMe®

OryStttinCt2fMiβc⅛llan⅜ous

曰[¾

AVR/GNUAt8⅜a⅛l*rHG∙n⅜ral"

STDGbufffiinc

^7Γ

A∖Tv,G>

lCoesoa睁OUtPUtriles

•Generatehexfile)(GtnerAttItsfile)(Generatee⅛pfile)(G∙MT∙t∙∙x⅜cfiɪ<

'

0□.00

设置优化率

添加自定义库

DUiId

BUildEvents

COnflcUr处ionACtiVeCDebU¢

)V

natfont:

ACtiVe(AVR)V

Toolchfldrt*DeViCe

TOOIAdvanced

"

θ^A∖τR∕rGXUCc≡onNG∙n∙r∙l3ΓOutputFilte日園AvR/GXUCCc≡pιlβrNG«

ral

FreProCo8sox3FSyɪbola^DirectoxiaaMθptɪɪiɪatɪoɑ^DebUgflngIamingB^ylSC∙Ilazx∙ousS圉A∖rR∕GIaILinker

NG∙n∙ral

θptɪɪɪɪatɪoa

JU≡orySettiDfS

^^Miscellaneous

θ[ifA∖rR∕GXUAssembler

NGenerAI

√.czjrrιr.:

IAvR/GNULιnk∙r■Libraries

Libr∙ri∙s(-<

1,~1>

-MId也;

r∣⅛∣

LibrarrSearChPath(-1IrL)

[δ]ClSl<

t∣8,

更换为WinaAVr编译条件的设置

BuiIdEVentSToOIChAinDeViCe

TooIAdVanCed

Toolchainflavourss∙tti∏f8Of*λts∙lAvR8-bit,toolchainCanbo≡odιfi∙dfroa

ToOIChainFIaVOUr>

ςat;

Ve

T8“■〉Opt:

on*■>

T81chpχπ-;

FlzomrCorlfigU"

tx5’

设置芯片

DeViCeNaɪe:

ATΠ∩θ<

]a48

App./BootMemoryCKbytes}:

4

DataMer,Ory(bytes):

512

EEFROM(bytes):

256

SPeediO

1.8/5.5

Faiily:

MegaAVR

-2DataSheetS

SUPPOrtedTooIS、AVRDraQOn»

AVRISPmklltAVRONE!

电JTAGlCE3ΛJTAGICEmkll

AVRSimUTatoH

脅STK500

设置仿真器(我没冇使用仿真器,设置为SimUIatOr)

三、从ICC_AVR_到_Atmel_StiIdio_6

以前一直在用ICCAVR感觉牛成文档方便,现在发现了AtmeIStUdio6,因为偶尔会用C#(VS2010)所以一下子就喜欢上了这个编译器,我只用8bit的AVR另外也是刚刚接触,所以在移植过程屮会遇到各种问题,以下是自己的一些问题写出来共大家参考;

1.MCU必须的头文件

例如在ICCAVR(以下简称ICC)中使用#include<

ioml6v.h>

或#inchκk<

ioml28v.h>

要根据不同的mcu型号选择头文件。

而在AtmClStUdiO6(以下简称AS6)中统一用#include<

avr/io.h>

o(ICCAVR7的版本中也可以用统一的头文件了)

2.头文件Vmacros.h>

在ICC中,头文件Vmacros.h>

包含#include<

AVRdef.h>

o在AVRdCf.h中,宏定义了一些常用的汇编指令和一些不常用的函数。

例如:

(详细内容请参考ICC安装程序中AVRdef.h)

#defineWDR()asm("

wdr"

#defineSEIOasm(,'

sei,'

#defineCLI()asm(”Clr)

#defineNOP()asm("

nop"

#defineSLEEPoasm(,'

sleep"

);

#define_WDR()asm("

WdrU)

#define_SEI()asm(,,sei,'

#define_CLI()asm(πcliu)

#define_NOP()asm("

#define_SLEEP()asm("

#defineBIT(X)(1«

(x));

在AS6中,你可以直接使用asm(”xxx”)格式.或者用小写的sei();

(当然要包含相应的头文件);

Ps:

如果移植ICC的代码比较麻烦,可以将这些宏命令添加到一个总的头文件(include.h)中,所有C文件都引用include.h,那么在移植过程中,将不需要修改代码。

3.延时函数

在ICC屮,delay延时函数,需要自己写,往往不准。

而在AS中,只需要加载一个头文!

#include<

就可以使用两个标准的延时函数,分别是_delay_ms(double_ms)flLdeIay_us(double_us),虽然参数为double型,但可赋整型值。

注意在调用前定义#defineF_CPU16000000UL(我也不知道为什么要加UL),这样延吋IOmS的函数写为_delay_ms(IO)O

4.中断函数

例如To溢出小断,在ICC小如下定义:

#pragmainteɪTUPt_handlcrtimcrO_ovf_isr:

iv_TIMERO_OVF

VOidtimerO_ovf_isr(VOid){•••}

timerO_ovf_isr这个函数名是自定义的。

而在A6中,需加载头文件#include<

并且函数名为ISR,不可自定义函数名,格式如下:

ISR(TIMERO_OVF_vcct)

{•・・}

TIMERO_OVF_vect含义同iv_TIMERO_OVF,是TO溢出中断号。

不同型号mcu的中断向量号的名称不同,A6的中断向量号请从avr/iomXXX.h中查找。

5.EEPROM操作函数

在ICC中加载头文件#includeVCCPI*om.h>

后,可以使用如下两个读写函数:

EEPROM_read(addr,var);

〃读EEPROM中的一个字节

//向EEPROM中写入一个字节

在AS6中,加载头文件#include<

avr/eeprom.h>

_EEGET(var,addr);

_EEPUT(addr,Var);

为了移植时不修改代码,我的做法是在总的头文件(include.h)中添加以下宏定义:

#defineEEPROM_rcad(addr,Var)_EEGET(var,addr)

#defineEEPROM_write(addr,Var)_EEPUT(addr,Var)

6.定义数据在flash区

主要用于在字符点阵或图形点阵数据存放在flash区,这样可以减少dam区的使用,不至于使data区溢出.在ICC中,用ConSt关键字定义变量,并在ICC软件设置项中,勾选treat"

const"

as_flash即可。

在AS6中,需加载头文件#include<

avr/PgmSPaCe.h>

然后用PROGMEM举例说明:

PROGMEMCOnStUnSignedCharHash[10];

在flash区声明一个UnSigedChar型的数组,成员个数IOoUnSignedChara;

a=Pgm_read_byte(flashIOJ);

把flash[0]值赋给变量a。

而a=flash[0]是不会从flash

区读数据的,而是读data区的数据。

二维数组:

PROGMEMCOnStUnSignedCharflash[3][10]={};

PROGMEMCOnStUnSignedchar*COnStflash[3]={};

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1